]> git.saurik.com Git - wxWidgets.git/blobdiff - demos/fractal/fractal.cpp
rebaked after adding src/tiff/tif_color.c
[wxWidgets.git] / demos / fractal / fractal.cpp
index 6d4b327a696ab13fe6b42ad2cbd44bff56ca5038..217c1d13f2a63f5e59b0b3a960514bf77de0c95e 100644 (file)
@@ -49,15 +49,16 @@ hack doesn't fix.
 #define Random(x) (rand() % x)
 #define Randomize() (srand((unsigned int)time(NULL)))
 
 #define Random(x) (rand() % x)
 #define Randomize() (srand((unsigned int)time(NULL)))
 
-static int detail = 9;         // CHANGE THIS... 7,8,9 etc
+static int detail = 9; // CHANGE THIS... 7,8,9 etc
 
 
-static bool running = FALSE;                                
+static bool running = false;                                
 static wxMenuBar *menuBar = NULL;
 
 // Define a new application type
 class MyApp: public wxApp
 static wxMenuBar *menuBar = NULL;
 
 // Define a new application type
 class MyApp: public wxApp
-{ public:
-       bool OnInit();
+{
+public:
+    bool OnInit();
 };
 
 IMPLEMENT_APP(MyApp)
 };
 
 IMPLEMENT_APP(MyApp)
@@ -66,26 +67,27 @@ IMPLEMENT_APP(MyApp)
 class MyFrame: public wxFrame
 {
 public:
 class MyFrame: public wxFrame
 {
 public:
-       MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size);
+    MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size);
 
 
-       void OnCloseWindow(wxCloseEvent& event);
+    void OnCloseWindow(wxCloseEvent& event);
     void OnExit(wxCommandEvent& event);
     void OnExit(wxCommandEvent& event);
-DECLARE_EVENT_TABLE()
+
+    DECLARE_EVENT_TABLE()
 };
 
 // Define a new canvas which can receive some events
 class MyCanvas: public wxWindow
 {
 public:
 };
 
 // Define a new canvas which can receive some events
 class MyCanvas: public wxWindow
 {
 public:
-       MyCanvas(wxFrame *frame);
-       void Draw(wxDC& dc);
+    MyCanvas(wxFrame *frame);
+    void Draw(wxDC& dc);
 
 private:
 
 private:
-       void OnPaint(wxPaintEvent& event);
-       void Fractal(wxDC& dc, int X1, int Y1, int X2, int Y2, int Z1, int Z2, int Z3, int Z4, int Iteration, double Std, double Ratio);
-       wxPen SnowPen, MtnPen, GreenPen;
-       wxBrush WaterBrush;
-       int Sealevel;
+    void OnPaint(wxPaintEvent& event);
+    void Fractal(wxDC& dc, int X1, int Y1, int X2, int Y2, int Z1, int Z2, int Z3, int Z4, int Iteration, double Std, double Ratio);
+    wxPen SnowPen, MtnPen, GreenPen;
+    wxBrush WaterBrush;
+    int Sealevel;
 
 DECLARE_EVENT_TABLE()
 };
 
 DECLARE_EVENT_TABLE()
 };
@@ -94,7 +96,7 @@ DECLARE_EVENT_TABLE()
 bool MyApp::OnInit()
 {
   // Create the main frame window
 bool MyApp::OnInit()
 {
   // Create the main frame window
-  MyFrame *frame = new MyFrame(NULL, _T("Fractal Mountains for wxWidgets"), wxPoint(-1, -1), wxSize(640, 480));
+  MyFrame *frame = new MyFrame(NULL, _T("Fractal Mountains for wxWidgets"), wxDefaultPosition, wxSize(640, 480));
 
   // Make a menubar
   wxMenu *file_menu = new wxMenu;
 
   // Make a menubar
   wxMenu *file_menu = new wxMenu;
@@ -109,9 +111,9 @@ bool MyApp::OnInit()
   (void) new MyCanvas(frame);
 
   // Show the frame
   (void) new MyCanvas(frame);
 
   // Show the frame
-  frame->Show(TRUE);
+  frame->Show(true);
 
 
-  return TRUE;
+  return true;
 }
 
 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
 }
 
 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
@@ -121,7 +123,7 @@ END_EVENT_TABLE()
 
 // My frame constructor
 MyFrame::MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size):
 
 // My frame constructor
 MyFrame::MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size):
-  wxFrame(frame, -1, title, pos, size, wxDEFAULT_FRAME_STYLE | wxFULL_REPAINT_ON_RESIZE)
+  wxFrame(frame, wxID_ANY, title, pos, size, wxDEFAULT_FRAME_STYLE | wxFULL_REPAINT_ON_RESIZE )
 {
 }
 
 {
 }
 
@@ -133,13 +135,13 @@ void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
 {
 
 void MyFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
 {
-    static bool destroyed = FALSE;
+    static bool destroyed = false;
     if (destroyed)
         return;
 
     this->Destroy();
 
     if (destroyed)
         return;
 
     this->Destroy();
 
-    destroyed = TRUE;
+    destroyed = true;
 }
 
 BEGIN_EVENT_TABLE(MyCanvas, wxWindow)
 }
 
 BEGIN_EVENT_TABLE(MyCanvas, wxWindow)
@@ -148,7 +150,7 @@ END_EVENT_TABLE()
 
 // Define a constructor for my canvas
 MyCanvas::MyCanvas(wxFrame *frame):
 
 // Define a constructor for my canvas
 MyCanvas::MyCanvas(wxFrame *frame):
- wxWindow(frame, -1)
+ wxWindow(frame, wxID_ANY)
 {
     wxColour wxCol1(255,255,255);
     SnowPen = wxPen(wxCol1, 2, wxSOLID);
 {
     wxColour wxCol1(255,255,255);
     SnowPen = wxPen(wxCol1, 2, wxSOLID);
@@ -166,90 +168,94 @@ MyCanvas::MyCanvas(wxFrame *frame):
 void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event))
 {
     wxPaintDC dc(this);
 void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event))
 {
     wxPaintDC dc(this);
-       Draw(dc);
+    PrepareDC(dc);
+    Draw(dc);
 }
 
 void MyCanvas::Draw(wxDC& dc)
 {
     if (running) return;
         
 }
 
 void MyCanvas::Draw(wxDC& dc)
 {
     if (running) return;
         
-    running = TRUE;
-    menuBar->EnableTop(0, FALSE);
+    running = true;
+    menuBar->EnableTop(0, false);
+
+    Randomize();
 
 
-       Randomize();
+    dc.SetBackground(*wxLIGHT_GREY_BRUSH);
+    dc.Clear();
 
 
-       int Left, Top, Right, Bottom;
-       GetClientSize(&Right, &Bottom);
+    int Left, Top, Right, Bottom;
+    GetClientSize(&Right, &Bottom);
 
 
-       Right *= 3; Right /= 4;
-       Bottom *= 3; Bottom /= 4;
-       Left = 0;
-       Top = Bottom/8;
+    Right *= 3; Right /= 4;
+    Bottom *= 3; Bottom /= 4;
+    Left = 0;
+    Top = Bottom/8;
 
 
-       wxPoint Water[4];
-       Water[0].x = Left;                          Water[0].y = Top;
-       Water[1].x = Right;                             Water[1].y = Top;
-       Water[2].x = Right+Bottom/2;    Water[2].y = Bottom;
-       Water[3].x = Bottom/2;                  Water[3].y = Bottom;
+    wxPoint Water[4];
+    Water[0].x = Left;            Water[0].y = Top;
+    Water[1].x = Right;           Water[1].y = Top;
+    Water[2].x = Right+Bottom/2;  Water[2].y = Bottom;
+    Water[3].x = Bottom/2;        Water[3].y = Bottom;
 
 
-       dc.SetBrush(WaterBrush);
-       dc.DrawPolygon(4, Water);
+    dc.SetBrush(WaterBrush);
+    dc.DrawPolygon(4, Water);
 
 
-       double H = 0.75;
-       double Scale = Bottom;
-       double Ratio = 1.0 / pow(2.0, H);
-       double Std = Scale * Ratio;
-       Sealevel = Random(18) - 8;
+    double H = 0.75;
+    double Scale = Bottom;
+    double Ratio = 1.0 / pow(2.0, H);
+    double Std = Scale * Ratio;
+    Sealevel = Random(18) - 8;
 
 
-       Fractal(dc, Left, Top, Right, Bottom, 0, 0, 0, 0, detail, Std, Ratio);
+    Fractal(dc, Left, Top, Right, Bottom, 0, 0, 0, 0, detail, Std, Ratio);
 
 
-    menuBar->EnableTop(0, TRUE);
-    running = FALSE;
+    menuBar->EnableTop(0, true);
+    running = false;
 }
 
 void MyCanvas::Fractal(wxDC& dc, int X1, int Y1, int X2, int Y2, int Z1, int Z2, int Z3, int Z4, int Iteration, double Std, double Ratio)
 {
 }
 
 void MyCanvas::Fractal(wxDC& dc, int X1, int Y1, int X2, int Y2, int Z1, int Z2, int Z3, int Z4, int Iteration, double Std, double Ratio)
 {
-       int Xmid = (X1 + X2) / 2;
-       int Ymid = (Y1 + Y2) / 2;
-       int Z23 = (Z2 + Z3) / 2;
-       int Z41 = (Z4 + Z1) / 2;
-       int Newz = (int)((Z1 + Z2 + Z3 + Z4) / 4 + (double)(Random(17) - 8) / 8.0 * Std);
-
-       if (--Iteration)
-       {
-               int Z12 = (Z1 + Z2) / 2;
-               int Z34 = (Z3 + Z4) / 2;
-               double Stdmid = Std * Ratio;
-
-               Fractal(dc, Xmid, Y1, X2, Ymid, Z12, Z2, Z23, Newz, Iteration, Stdmid, Ratio);
-               Fractal(dc, X1, Y1, Xmid, Ymid, Z1, Z12, Newz, Z41, Iteration, Stdmid, Ratio);
-               Fractal(dc, Xmid, Ymid, X2, Y2, Newz, Z23, Z3, Z34, Iteration, Stdmid, Ratio);
-               Fractal(dc, X1, Ymid, Xmid, Y2, Z41, Newz, Z34, Z4, Iteration, Stdmid, Ratio);
-       }
-       else
-       {
-               if (Newz <= Sealevel)
-               {
-                       wxPoint P[4];
-                       P[0].x = Y1 / 2 + X1;   P[0].y = Y1 + Z1;
-                       P[1].x = Y1 / 2 + X2;   P[1].y = Y1 + Z2;
-                       P[2].x = Y2 / 2 + X2;   P[2].y = Y2 + Z3;
-                       P[3].x = Y2 / 2 + X1;   P[3].y = Y2 + Z4;
-
-                       dc.SetPen(* wxBLACK_PEN);
-                       dc.SetBrush(* wxBLACK_BRUSH);
-
-                       dc.DrawPolygon(4, P);
-
-                       if (Z1 >= -(60+Random(25)))
-                               dc.SetPen(GreenPen);
-                       else if (Z1 >= -(100+Random(25)))
-                               dc.SetPen(MtnPen);
-                       else
-                               dc.SetPen(SnowPen);
-
-                       dc.DrawLine(Ymid/2+X2, Ymid+Z23, Ymid/2+X1, Ymid+Z41);
-               }
-       }
+    int Xmid = (X1 + X2) / 2;
+    int Ymid = (Y1 + Y2) / 2;
+    int Z23 = (Z2 + Z3) / 2;
+    int Z41 = (Z4 + Z1) / 2;
+    int Newz = (int)((Z1 + Z2 + Z3 + Z4) / 4 + (double)(Random(17) - 8) / 8.0 * Std);
+
+    if (--Iteration)
+    {
+        int Z12 = (Z1 + Z2) / 2;
+        int Z34 = (Z3 + Z4) / 2;
+        double Stdmid = Std * Ratio;
+
+        Fractal(dc, Xmid, Y1, X2, Ymid, Z12, Z2, Z23, Newz, Iteration, Stdmid, Ratio);
+        Fractal(dc, X1, Y1, Xmid, Ymid, Z1, Z12, Newz, Z41, Iteration, Stdmid, Ratio);
+        Fractal(dc, Xmid, Ymid, X2, Y2, Newz, Z23, Z3, Z34, Iteration, Stdmid, Ratio);
+        Fractal(dc, X1, Ymid, Xmid, Y2, Z41, Newz, Z34, Z4, Iteration, Stdmid, Ratio);
+    }
+    else
+    {
+        if (Newz <= Sealevel)
+        {
+            wxPoint P[4];
+            P[0].x = Y1 / 2 + X1;    P[0].y = Y1 + Z1;
+            P[1].x = Y1 / 2 + X2;    P[1].y = Y1 + Z2;
+            P[2].x = Y2 / 2 + X2;    P[2].y = Y2 + Z3;
+            P[3].x = Y2 / 2 + X1;    P[3].y = Y2 + Z4;
+
+            dc.SetPen(* wxBLACK_PEN);
+            dc.SetBrush(* wxBLACK_BRUSH);
+
+            dc.DrawPolygon(4, P);
+
+            if (Z1 >= -(60+Random(25)))
+                dc.SetPen(GreenPen);
+            else if (Z1 >= -(100+Random(25)))
+                dc.SetPen(MtnPen);
+            else
+                dc.SetPen(SnowPen);
+
+            dc.DrawLine(Ymid/2+X2, Ymid+Z23, Ymid/2+X1, Ymid+Z41);
+        }
+    }
 }
 
 }