]> git.saurik.com Git - wxWidgets.git/commitdiff
Don't use invalid pen in wxDCImpl::DoGradientFillConcentric().
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 26 Sep 2009 13:31:41 +0000 (13:31 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 26 Sep 2009 13:31:41 +0000 (13:31 +0000)
The old code stored the original colour of m_pen before changing it and
restored it on exit but this didn't work if the pen was invalid to start with.

Just store the pen itself instead, this works in any case.

Closes #11235.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62143 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/dcbase.cpp

index d698009c316fe755d4ea235d8a277c7b189255e7..415b71763a961fbec886fb005e94891e153a87ea 100644 (file)
@@ -30,6 +30,7 @@
 #include "wx/dcscreen.h"
 #include "wx/dcprint.h"
 #include "wx/prntbase.h"
+#include "wx/scopeguard.h"
 
 #ifndef WX_PRECOMP
     #include "wx/math.h"
@@ -1054,8 +1055,9 @@ void wxDCImpl::DoGradientFillConcentric(const wxRect& rect,
                                       const wxColour& destColour,
                                       const wxPoint& circleCenter)
 {
-    //save the old pen color
-    wxColour oldPenColour = m_pen.GetColour();
+    // save the old pen and ensure it is restored on exit
+    const wxPen penOrig = m_pen;
+    wxON_BLOCK_EXIT_SET(m_pen, penOrig);
 
     wxUint8 nR1 = destColour.Red();
     wxUint8 nG1 = destColour.Green();
@@ -1100,12 +1102,10 @@ void wxDCImpl::DoGradientFillConcentric(const wxRect& rect,
             nB = (wxUint8)(nB1 + ((nB2 - nB1) * nGradient / 100));
 
             //set the pixel
-            m_pen.SetColour(wxColour(nR,nG,nB));
+            m_pen = wxColour(nR,nG,nB);
             DoDrawPoint(x + rect.GetLeft(), y + rect.GetTop());
         }
     }
-    //return old pen color
-    m_pen.SetColour(oldPenColour);
 }
 
 void wxDCImpl::InheritAttributes(wxWindow *win)