From: Guillermo Rodriguez Garcia Date: Thu, 17 Feb 2000 03:02:14 +0000 (+0000) Subject: Optimized drawing code in OnMouse() for freehand drawing. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/5e9ff6adaa0982b43f6fd2b50d72e3639cd521d2 Optimized drawing code in OnMouse() for freehand drawing. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6102 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/demos/life/life.cpp b/demos/life/life.cpp index 2bb9526393..4dba59107b 100644 --- a/demos/life/life.cpp +++ b/demos/life/life.cpp @@ -543,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); } @@ -666,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; @@ -685,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; @@ -703,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; @@ -716,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();