]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dc.h
Added wxToggleButton handler
[wxWidgets.git] / include / wx / dc.h
index f805dd61acd50d749cfc4d565626bd233f021dcf..24899df0a05e864902b616b4c39b02c9b9f63d29 100644 (file)
@@ -5,7 +5,7 @@
 // Modified by:
 // Created:     05/25/99
 // RCS-ID:      $Id$
 // Modified by:
 // Created:     05/25/99
 // RCS-ID:      $Id$
-// Copyright:   (c) wxWindows team
+// Copyright:   (c) wxWidgets team
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
@@ -133,6 +133,7 @@ public:
 #endif // wxUSE_PALETTE
     {
         ResetBoundingBox();
 #endif // wxUSE_PALETTE
     {
         ResetBoundingBox();
+        ResetClipping();
     }
 
     ~wxDCBase() { }
     }
 
     ~wxDCBase() { }
@@ -314,18 +315,18 @@ public:
      *  \param y Upper left corner of bounding box.
      *  \param w Width of bounding box.
      *  \param h Height of bounding box.
      *  \param y Upper left corner of bounding box.
      *  \param w Width of bounding box.
      *  \param h Height of bounding box.
-     *  \param sa Starting angle of arc 
+     *  \param sa Starting angle of arc
      *            (counterclockwise, start at 3 o'clock, 360 is full circle).
      *  \param ea Ending angle of arc.
      *            (counterclockwise, start at 3 o'clock, 360 is full circle).
      *  \param ea Ending angle of arc.
-     *  \param angle Rotation angle, the Arc will be rotated after 
+     *  \param angle Rotation angle, the Arc will be rotated after
      *               calculating begin and end.
      */
      *               calculating begin and end.
      */
-    void DrawEllipticArcRot( wxCoord x, wxCoord y, 
-                             wxCoord width, wxCoord height, 
+    void DrawEllipticArcRot( wxCoord x, wxCoord y,
+                             wxCoord width, wxCoord height,
                              double sa = 0, double ea = 0, double angle = 0 )
     { DoDrawEllipticArcRot( x, y, width, height, sa, ea, angle ); }
                              double sa = 0, double ea = 0, double angle = 0 )
     { DoDrawEllipticArcRot( x, y, width, height, sa, ea, angle ); }
-    
-    void DrawEllipticArcRot( const wxPoint& pt, 
+
+    void DrawEllipticArcRot( const wxPoint& pt,
                              const wxSize& sz,
                              double sa = 0, double ea = 0, double angle = 0 )
     { DoDrawEllipticArcRot( pt.x, pt.y, sz.x, sz.y, sa, ea, angle ); }
                              const wxSize& sz,
                              double sa = 0, double ea = 0, double angle = 0 )
     { DoDrawEllipticArcRot( pt.x, pt.y, sz.x, sz.y, sa, ea, angle ); }
@@ -334,27 +335,27 @@ public:
                              double sa = 0, double ea = 0, double angle = 0 )
     { DoDrawEllipticArcRot( rect.x, rect.y, rect.width, rect.height, sa, ea, angle ); }
 
                              double sa = 0, double ea = 0, double angle = 0 )
     { DoDrawEllipticArcRot( rect.x, rect.y, rect.width, rect.height, sa, ea, angle ); }
 
-    virtual void DoDrawEllipticArcRot( wxCoord x, wxCoord y, 
-                                       wxCoord w, wxCoord h, 
+    virtual void DoDrawEllipticArcRot( wxCoord x, wxCoord y,
+                                       wxCoord w, wxCoord h,
                                        double sa = 0, double ea = 0, double angle = 0 );
                                        double sa = 0, double ea = 0, double angle = 0 );
-    
+
     //! Rotates points around center.
     /*! This is a quite straight method, it calculates in pixels
      *  and so it produces rounding errors.
      *  \param points The points inside will be rotated.
      *  \param angle Rotating angle (counterclockwise, start at 3 o'clock, 360 is full circle).
      *  \param center Center of rotation.
     //! Rotates points around center.
     /*! This is a quite straight method, it calculates in pixels
      *  and so it produces rounding errors.
      *  \param points The points inside will be rotated.
      *  \param angle Rotating angle (counterclockwise, start at 3 o'clock, 360 is full circle).
      *  \param center Center of rotation.
-     */ 
+     */
     void Rotate( wxList* points, double angle, wxPoint center = wxPoint() );
 
     // used by DrawEllipticArcRot
     // Careful: wxList gets filled with points you have to delete later.
     void Rotate( wxList* points, double angle, wxPoint center = wxPoint() );
 
     // used by DrawEllipticArcRot
     // Careful: wxList gets filled with points you have to delete later.
-    void CalculateEllipticPoints( wxList* points, 
-                                  wxCoord xStart, wxCoord yStart, 
-                                  wxCoord w, wxCoord h, 
+    void CalculateEllipticPoints( wxList* points,
+                                  wxCoord xStart, wxCoord yStart,
+                                  wxCoord w, wxCoord h,
                                   double sa, double ea );
 #endif
                                   double sa, double ea );
 #endif
-    
+
     // global DC operations
     // --------------------
 
     // global DC operations
     // --------------------
 
@@ -390,21 +391,13 @@ public:
     void SetClippingRegion(const wxRegion& region)
         { DoSetClippingRegionAsRegion(region); }
 
     void SetClippingRegion(const wxRegion& region)
         { DoSetClippingRegionAsRegion(region); }
 
-    virtual void DestroyClippingRegion() = 0;
+    virtual void DestroyClippingRegion() { ResetClipping(); }
 
     void GetClippingBox(wxCoord *x, wxCoord *y, wxCoord *w, wxCoord *h) const
         { DoGetClippingBox(x, y, w, h); }
     void GetClippingBox(wxRect& rect) const
         {
 
     void GetClippingBox(wxCoord *x, wxCoord *y, wxCoord *w, wxCoord *h) const
         { DoGetClippingBox(x, y, w, h); }
     void GetClippingBox(wxRect& rect) const
         {
-#if 1
           DoGetClippingBox(&rect.x, &rect.y, &rect.width, &rect.height);
           DoGetClippingBox(&rect.x, &rect.y, &rect.width, &rect.height);
-#else
-          // Necessary to use intermediate variables for 16-bit compilation
-          // REMOVE ME if the above is OK for all current platforms
-          wxCoord x, y, w, h;
-          DoGetClippingBox(&x, &y, &w, &h);
-          rect.x = x; rect.y = y; rect.width = w; rect.height = h;
-#endif
         }
 
     // text extent
         }
 
     // text extent
@@ -432,7 +425,7 @@ public:
     bool GetPartialTextExtents(const wxString& text, wxArrayInt& widths) const
         { return DoGetPartialTextExtents(text, widths); }
 
     bool GetPartialTextExtents(const wxString& text, wxArrayInt& widths) const
         { return DoGetPartialTextExtents(text, widths); }
 
-    
+
     // size and resolution
     // -------------------
 
     // size and resolution
     // -------------------
 
@@ -486,26 +479,17 @@ public:
 
     virtual bool Ok() const { return m_ok; }
 
 
     virtual bool Ok() const { return m_ok; }
 
-    // accessors
-    // ---------
+    // accessors and setters
+    // ---------------------
 
 
-        // const...
     int GetBackgroundMode() const { return m_backgroundMode; }
     const wxBrush&  GetBackground() const { return m_backgroundBrush; }
     const wxBrush&  GetBrush() const { return m_brush; }
     const wxFont&   GetFont() const { return m_font; }
     const wxPen&    GetPen() const { return m_pen; }
     int GetBackgroundMode() const { return m_backgroundMode; }
     const wxBrush&  GetBackground() const { return m_backgroundBrush; }
     const wxBrush&  GetBrush() const { return m_brush; }
     const wxFont&   GetFont() const { return m_font; }
     const wxPen&    GetPen() const { return m_pen; }
-    const wxColour& GetTextBackground() const { return m_textBackgroundColour; }
-    const wxColour& GetTextForeground() const { return m_textForegroundColour; }
-
-        // ... and non const
-    wxBrush&  GetBackground() { return m_backgroundBrush; }
-    wxBrush&  GetBrush() { return m_brush; }
-    wxFont&   GetFont() { return m_font; }
-    wxPen&    GetPen() { return m_pen; }
-    wxColour& GetTextBackground() { return m_textBackgroundColour; }
-    wxColour& GetTextForeground() { return m_textForegroundColour; }
 
 
+    const wxColour& GetTextForeground() const { return m_textForegroundColour; }
+    const wxColour& GetTextBackground() const { return m_textBackgroundColour; }
     virtual void SetTextForeground(const wxColour& colour)
         { m_textForegroundColour = colour; }
     virtual void SetTextBackground(const wxColour& colour)
     virtual void SetTextForeground(const wxColour& colour)
         { m_textForegroundColour = colour; }
     virtual void SetTextBackground(const wxColour& colour)
@@ -708,17 +692,14 @@ protected:
     virtual void DoGetClippingBox(wxCoord *x, wxCoord *y,
                                   wxCoord *w, wxCoord *h) const
     {
     virtual void DoGetClippingBox(wxCoord *x, wxCoord *y,
                                   wxCoord *w, wxCoord *h) const
     {
-        if ( m_clipping )
-        {
-            if ( x ) *x = m_clipX1;
-            if ( y ) *y = m_clipY1;
-            if ( w ) *w = m_clipX2 - m_clipX1;
-            if ( h ) *h = m_clipY2 - m_clipY1;
-        }
-        else
-        {
-            *x = *y = *w = *h = 0;
-        }
+        if ( x )
+            *x = m_clipX1;
+        if ( y )
+            *y = m_clipY1;
+        if ( w )
+            *w = m_clipX2 - m_clipX1;
+        if ( h )
+            *h = m_clipY2 - m_clipY1;
     }
 
     virtual void DoGetLogicalOrigin(wxCoord *x, wxCoord *y) const
     }
 
     virtual void DoGetLogicalOrigin(wxCoord *x, wxCoord *y) const
@@ -738,14 +719,22 @@ protected:
                                  wxCoord *descent = NULL,
                                  wxCoord *externalLeading = NULL,
                                  wxFont *theFont = NULL) const = 0;
                                  wxCoord *descent = NULL,
                                  wxCoord *externalLeading = NULL,
                                  wxFont *theFont = NULL) const = 0;
-    
+
     virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const;
     virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const;
-    
+
 #if wxUSE_SPLINES
     virtual void DoDrawSpline(wxList *points);
 #endif
 
 protected:
 #if wxUSE_SPLINES
     virtual void DoDrawSpline(wxList *points);
 #endif
 
 protected:
+    // unset clipping variables (after clipping region was destroyed)
+    void ResetClipping()
+    {
+        m_clipping = false;
+
+        m_clipX1 = m_clipX2 = m_clipY1 = m_clipY2 = 0;
+    }
+
     // flags
     bool m_colour:1;
     bool m_ok:1;
     // flags
     bool m_colour:1;
     bool m_ok:1;