]> git.saurik.com Git - wxWidgets.git/blobdiff - demos/life/life.cpp
removed saveValue param in EndEdit()
[wxWidgets.git] / demos / life / life.cpp
index 448b059fbc39a85de12f7d45db87e24d267de9b0..4dba59107b2bcdeb0e0d0cba3f91b19359c2a957 100644 (file)
     #pragma implementation "life.h"
 #endif
 
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+#include "wx/wx.h"
+#endif
+
 #include "wx/statline.h"
 
 #include "life.h"
@@ -459,7 +470,7 @@ void LifeCanvas::SetCellSize(int cellsize)
     wxInt32 cy = m_viewportY + m_viewportH / 2;
 
     // get current canvas size and adjust viewport accordingly
-    wxCoord w, h;
+    int w, h;
     GetClientSize(&w, &h);
     m_viewportW = (w + m_cellsize - 1) / m_cellsize;
     m_viewportH = (h + m_cellsize - 1) / m_cellsize;
@@ -532,12 +543,10 @@ void LifeCanvas::DrawChanged()
 
     if (m_cellsize == 1)
     {
-        // drawn using DrawPoint
         dc.SetPen(*wxBLACK_PEN);
     }
     else
     {
-        // drawn using DrawRectangle
         dc.SetPen(*wxTRANSPARENT_PEN);
         dc.SetBrush(*wxBLACK_BRUSH);
     }
@@ -655,6 +664,14 @@ void LifeCanvas::OnMouse(wxMouseEvent& event)
     }
     else if ((m_mi != i) || (m_mj != j))
     {
+        bool alive = (m_status == MOUSE_DRAWING);
+
+        // prepare DC and pen + brush to optimize drawing
+        wxClientDC dc(this);
+        dc.SetPen(alive? *wxBLACK_PEN : *wxWHITE_PEN);
+        dc.SetBrush(alive? *wxBLACK_BRUSH : *wxWHITE_BRUSH);
+        dc.BeginDrawing();
+
         // draw a line of cells using Bresenham's algorithm
         wxInt32 d, ii, jj, di, ai, si, dj, aj, sj;
         di = i - m_mi;
@@ -674,8 +691,8 @@ void LifeCanvas::OnMouse(wxMouseEvent& event)
                
             while (ii != i)
             {
-                m_life->SetCell(ii, jj, m_status == MOUSE_DRAWING);
-                DrawCell(ii, jj, m_status == MOUSE_DRAWING);
+                m_life->SetCell(ii, jj, alive);
+                DrawCell(ii, jj, dc);
                 if (d >= 0)
                 {
                     jj += sj;
@@ -692,8 +709,8 @@ void LifeCanvas::OnMouse(wxMouseEvent& event)
 
             while (jj != j)
             {
-                m_life->SetCell(ii, jj, m_status == MOUSE_DRAWING);
-                DrawCell(ii, jj, m_status == MOUSE_DRAWING);
+                m_life->SetCell(ii, jj, alive);
+                DrawCell(ii, jj, dc);
                 if (d >= 0)
                 {
                     ii += si;
@@ -705,10 +722,12 @@ void LifeCanvas::OnMouse(wxMouseEvent& event)
         }
 
         // last cell
-        m_life->SetCell(ii, jj, m_status == MOUSE_DRAWING);
-        DrawCell(ii, jj, m_status == MOUSE_DRAWING);
+        m_life->SetCell(ii, jj, alive);
+        DrawCell(ii, jj, dc);
         m_mi = ii;
         m_mj = jj;
+
+        dc.EndDrawing();
     }
 
     GET_FRAME()->UpdateInfoText();