From: Vadim Zeitlin Date: Sat, 26 Sep 2009 13:31:41 +0000 (+0000) Subject: Don't use invalid pen in wxDCImpl::DoGradientFillConcentric(). X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/1d8cdcf2e39810b8e6128ac8a504cc206068f58c?ds=sidebyside Don't use invalid pen in wxDCImpl::DoGradientFillConcentric(). 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 --- diff --git a/src/common/dcbase.cpp b/src/common/dcbase.cpp index d698009c31..415b71763a 100644 --- a/src/common/dcbase.cpp +++ b/src/common/dcbase.cpp @@ -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)