]> git.saurik.com Git - wxWidgets.git/commitdiff
Introduced wxDCPenChanger and wxDCBrushChanger.
authorWłodzimierz Skiba <abx@abx.art.pl>
Mon, 22 May 2006 14:25:35 +0000 (14:25 +0000)
committerWłodzimierz Skiba <abx@abx.art.pl>
Mon, 22 May 2006 14:25:35 +0000 (14:25 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39269 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/dc.h
src/generic/renderg.cpp

index af5ebf450131ac6b574dae56652d8d06c00cc7ef..e82459096650dfd9c7c3a6196d332ec7b0761ce2 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        dc.h
+// Name:        wx/dc.h
 // Purpose:     wxDC class
 // Author:      Vadim Zeitlin
 // Modified by:
@@ -161,20 +161,20 @@ public:
     // fill the area specified by rect with a radial gradient, starting from
     // initialColour in the centre of the cercle and fading to destColour.
     void GradientFillConcentric(const wxRect& rect,
-                                const wxColour& initialColour, 
+                                const wxColour& initialColour,
                                 const wxColour& destColour)
         { GradientFillConcentric(rect, initialColour, destColour,
                                  wxPoint(rect.GetWidth() / 2,
                                          rect.GetHeight() / 2)); }
 
     void GradientFillConcentric(const wxRect& rect,
-                                const wxColour& initialColour, 
+                                const wxColour& initialColour,
                                 const wxColour& destColour,
                                 const wxPoint& circleCenter);
 
     // fill the area specified by rect with a linear gradient
     void GradientFillLinear(const wxRect& rect,
-                            const wxColour& initialColour, 
+                            const wxColour& initialColour,
                             const wxColour& destColour,
                             wxDirection nDirection = wxEAST)
         { DoGradientFillLinear(rect, initialColour, destColour, nDirection); }
@@ -659,7 +659,7 @@ protected:
                                       const wxColour& initialColour,
                                       const wxColour& destColour,
                                       wxDirection nDirection = wxEAST);
-    
+
     virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const = 0;
 
     virtual void DoDrawPoint(wxCoord x, wxCoord y) = 0;
@@ -868,6 +868,68 @@ private:
     DECLARE_NO_COPY_CLASS(wxDCTextColourChanger)
 };
 
+// ----------------------------------------------------------------------------
+// helper class: you can use it to temporarily change the DC pen and
+// restore it automatically when the object goes out of scope
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxDCPenChanger
+{
+public:
+    wxDCPenChanger(wxDC& dc) : m_dc(dc), m_penOld() { }
+
+    ~wxDCPenChanger()
+    {
+        if ( m_penOld.Ok() )
+            m_dc.SetPen(m_penOld);
+    }
+
+    void Set(const wxPen& pen)
+    {
+        if ( !m_penOld.Ok() )
+            m_penOld = m_dc.GetPen();
+        m_dc.SetPen(pen);
+    }
+
+private:
+    wxDC& m_dc;
+
+    wxPen m_penOld;
+
+    DECLARE_NO_COPY_CLASS(wxDCPenChanger)
+};
+
+// ----------------------------------------------------------------------------
+// helper class: you can use it to temporarily change the DC brush and
+// restore it automatically when the object goes out of scope
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxDCBrushChanger
+{
+public:
+    wxDCBrushChanger(wxDC& dc) : m_dc(dc), m_brushOld() { }
+
+    ~wxDCBrushChanger()
+    {
+        if ( m_brushOld.Ok() )
+            m_dc.SetBrush(m_brushOld);
+    }
+
+    void Set(const wxBrush& brush)
+    {
+        if ( !m_brushOld.Ok() )
+            m_brushOld = m_dc.GetBrush();
+        m_dc.SetBrush(brush);
+    }
+
+private:
+    wxDC& m_dc;
+
+    wxBrush m_brushOld;
+
+    DECLARE_NO_COPY_CLASS(wxDCBrushChanger)
+};
+
 // ----------------------------------------------------------------------------
 // another small helper class: sets the clipping region in its ctor and
 // destroys it in the dtor
index cc3af3fdc5610280559ccbe183d6c415afd5f07a..b1b8fc76c4b76fdc92b48bae7a4b0d856adac156 100644 (file)
@@ -232,12 +232,13 @@ wxRendererGeneric::DrawTreeItemButton(wxWindow * WXUNUSED(win),
                                       int flags)
 {
     // store settings
-    wxPen pen(dc.GetPen());
-    wxBrush brush(dc.GetBrush());
+    wxDCPenChanger penChanger(dc);
+    wxDCBrushChanger brushChanger(dc);
 
     // white background
-    dc.SetPen(*wxGREY_PEN);
-    dc.SetBrush(*wxWHITE_BRUSH);
+    penChanger.Set(*wxGREY_PEN);
+    brushChanger.Set(*wxWHITE_BRUSH);
+
     dc.DrawRectangle(rect);
 
     // black lines
@@ -257,9 +258,6 @@ wxRendererGeneric::DrawTreeItemButton(wxWindow * WXUNUSED(win),
         dc.DrawLine(xMiddle, yMiddle - halfHeight,
                     xMiddle, yMiddle + halfHeight + 1);
     }
-
-    dc.SetPen(pen);
-    dc.SetBrush(brush);
 }
 
 // ----------------------------------------------------------------------------