#include "wx/dcscreen.h"
#include "wx/dcprint.h"
#include "wx/prntbase.h"
+#include "wx/scopeguard.h"
#ifndef WX_PRECOMP
#include "wx/math.h"
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();
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)
yUnderscore = 0;
// split the string into lines and draw each of them separately
+ //
+ // NB: while wxDC::DrawText() on some platforms supports drawing multi-line
+ // strings natively, this is not the case for all of them, notably not
+ // wxMSW which uses this function for multi-line texts, so we may only
+ // call DrawText() for single-line strings from here to avoid infinite
+ // recursion.
wxString curLine;
for ( wxString::const_iterator pc = text.begin(); ; ++pc )
{