]> git.saurik.com Git - wxWidgets.git/commitdiff
Make GetClippingBox() work for wxPrinterDC in wxGTK.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 14 Oct 2012 14:55:32 +0000 (14:55 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 14 Oct 2012 14:55:32 +0000 (14:55 +0000)
GetClippingBox() implementation relies on wxDCImpl::m_clip[XY][12] being
updated in DoSetClippingRegion() but this wasn't done here. Fix this by adding
the code to do this to the base class version of this method and calling it
from wxGtkPrinterDCImpl.

Also, refactor wxGCDCImpl to reuse the same code instead of duplicating it.

Closes #14697.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72674 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/dc.h
src/common/dcbase.cpp
src/common/dcgraph.cpp
src/gtk/print.cpp

index c6ff1fa3a28c65feaa416ab84ab65b4cae8f4c67..34f58e266258b14b9217967f81c14a118c62e9d3 100644 (file)
@@ -433,8 +433,12 @@ public:
 
     // clipping
 
 
     // clipping
 
+    // Note that this pure virtual method has an implementation that updates
+    // the values returned by DoGetClippingBox() and so can be called from the
+    // derived class overridden version if it makes sense (i.e. if the clipping
+    // box coordinates are not already updated in some other way).
     virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
     virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
-                                     wxCoord width, wxCoord height) = 0;
+                                     wxCoord w, wxCoord h) = 0;
 
     // NB: this function works with device coordinates, not the logical ones!
     virtual void DoSetDeviceClippingRegion(const wxRegion& region) = 0;
 
     // NB: this function works with device coordinates, not the logical ones!
     virtual void DoSetDeviceClippingRegion(const wxRegion& region) = 0;
index 9a22d6b1c3b689d9d4a3e4d68f2d1523312f5b15..49fdb5f3620593c89548963be6a2be6d07f65d6e 100644 (file)
@@ -367,6 +367,30 @@ wxDCImpl::~wxDCImpl()
 {
 }
 
 {
 }
 
+// ----------------------------------------------------------------------------
+// clipping
+// ----------------------------------------------------------------------------
+
+void wxDCImpl::DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord w, wxCoord h)
+{
+    if ( m_clipping )
+    {
+        m_clipX1 = wxMax( m_clipX1, x );
+        m_clipY1 = wxMax( m_clipY1, y );
+        m_clipX2 = wxMin( m_clipX2, (x + w) );
+        m_clipY2 = wxMin( m_clipY2, (y + h) );
+    }
+    else
+    {
+        m_clipping = true;
+
+        m_clipX1 = x;
+        m_clipY1 = y;
+        m_clipX2 = x + w;
+        m_clipY2 = y + h;
+    }
+}
+
 // ----------------------------------------------------------------------------
 // coordinate conversions and transforms
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // coordinate conversions and transforms
 // ----------------------------------------------------------------------------
index 2388f3ec8cd671925355acecb5ca99eb277e035b..2b9b2913a51c6694ad3af41cd9aba1049bda92b8 100644 (file)
@@ -289,22 +289,8 @@ void wxGCDCImpl::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord w, wxCoord h
     wxCHECK_RET( IsOk(), wxT("wxGCDC(cg)::DoSetClippingRegion - invalid DC") );
 
     m_graphicContext->Clip( x, y, w, h );
     wxCHECK_RET( IsOk(), wxT("wxGCDC(cg)::DoSetClippingRegion - invalid DC") );
 
     m_graphicContext->Clip( x, y, w, h );
-    if ( m_clipping )
-    {
-        m_clipX1 = wxMax( m_clipX1, x );
-        m_clipY1 = wxMax( m_clipY1, y );
-        m_clipX2 = wxMin( m_clipX2, (x + w) );
-        m_clipY2 = wxMin( m_clipY2, (y + h) );
-    }
-    else
-    {
-        m_clipping = true;
 
 
-        m_clipX1 = x;
-        m_clipY1 = y;
-        m_clipX2 = x + w;
-        m_clipY2 = y + h;
-    }
+    wxDCImpl::DoSetClippingRegion(x, y, w, h);
 }
 
 void wxGCDCImpl::DoSetDeviceClippingRegion( const wxRegion &region )
 }
 
 void wxGCDCImpl::DoSetDeviceClippingRegion( const wxRegion &region )
index f2f1b27f407a4a8e843d42133d826b0617333e8a..d3ffb65e26cb8ae4cc07d570a4c5e4e9180b28a0 100644 (file)
@@ -2072,6 +2072,8 @@ void wxGtkPrinterDCImpl::DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width
 {
     cairo_rectangle ( m_cairo, XLOG2DEV(x), YLOG2DEV(y), XLOG2DEVREL(width), YLOG2DEVREL(height));
     cairo_clip(m_cairo);
 {
     cairo_rectangle ( m_cairo, XLOG2DEV(x), YLOG2DEV(y), XLOG2DEVREL(width), YLOG2DEVREL(height));
     cairo_clip(m_cairo);
+
+    wxDCImpl::DoSetClippingRegion(x, y, width, height);
 }
 
 void wxGtkPrinterDCImpl::DestroyClippingRegion()
 }
 
 void wxGtkPrinterDCImpl::DestroyClippingRegion()