From 2a8c290e0de5e657f22a0c13817df65688b01345 Mon Sep 17 00:00:00 2001 From: jonkraber Date: Sun, 24 Dec 2017 15:37:10 +0100 Subject: [PATCH] Restore previous clipping box in wxDCClipper Remember the clipping box of the previously active clipping region in wxDCClipper ctor and restore it in its dtor. See #13834. --- include/wx/dc.h | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/include/wx/dc.h b/include/wx/dc.h index 7cfe17fb14..dadbe793a3 100644 --- a/include/wx/dc.h +++ b/include/wx/dc.h @@ -1436,16 +1436,30 @@ class WXDLLIMPEXP_CORE wxDCClipper { public: wxDCClipper(wxDC& dc, const wxRegion& r) : m_dc(dc) - { dc.SetClippingRegion(r.GetBox()); } + { + dc.GetClippingBox(m_oldClipRect); + dc.SetClippingRegion(r.GetBox()); + } wxDCClipper(wxDC& dc, const wxRect& r) : m_dc(dc) - { dc.SetClippingRegion(r.x, r.y, r.width, r.height); } + { + dc.GetClippingBox(m_oldClipRect); + dc.SetClippingRegion(r.x, r.y, r.width, r.height); + } wxDCClipper(wxDC& dc, wxCoord x, wxCoord y, wxCoord w, wxCoord h) : m_dc(dc) - { dc.SetClippingRegion(x, y, w, h); } + { + dc.GetClippingBox(m_oldClipRect); + dc.SetClippingRegion(x, y, w, h); + } - ~wxDCClipper() { m_dc.DestroyClippingRegion(); } + ~wxDCClipper() + { + m_dc.DestroyClippingRegion(); + m_dc.SetClippingRegion(m_oldClipRect); + } private: wxDC& m_dc; + wxRect m_oldClipRect; wxDECLARE_NO_COPY_CLASS(wxDCClipper); };