]> git.saurik.com Git - wxWidgets.git/commitdiff
translate the wxRegion from device to user coordinates, swap angles for the arc drawing
authorStefan Csomor <csomor@advancedconcepts.ch>
Mon, 6 Nov 2006 08:06:09 +0000 (08:06 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Mon, 6 Nov 2006 08:06:09 +0000 (08:06 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43107 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/dcgraph.cpp

index 6a8bfab9894e020ce231cc1e0f148c40d27749f9..94f164466569e9b616b83389665d84029a5e4b22 100644 (file)
@@ -158,6 +158,7 @@ void wxGCDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord w, wxCoord h )
 
 void wxGCDC::DoSetClippingRegionAsRegion( const wxRegion &region )
 {
+    // region is in device coordinates
     wxCHECK_RET( Ok(), wxT("wxGCDC(cg)::DoSetClippingRegionAsRegion - invalid DC") );
 
     if (region.Empty())
@@ -166,10 +167,13 @@ void wxGCDC::DoSetClippingRegionAsRegion( const wxRegion &region )
         return;
     }
 
+    wxRegion logRegion( region );
     wxCoord x, y, w, h;
-    region.GetBox( x, y, w, h );
 
-    m_graphicContext->Clip( region );
+    logRegion.Offset( DeviceToLogicalX(0), DeviceToLogicalY(0) );
+    logRegion.GetBox( x, y, w, h );
+
+    m_graphicContext->Clip( logRegion );
     if ( m_clipping )
     {
         m_clipX1 = wxMax( m_clipX1, x );
@@ -480,7 +484,9 @@ void wxGCDC::DoDrawArc( wxCoord x1, wxCoord y1,
     wxGraphicsPath path = m_graphicContext->CreatePath();
     if ( fill && ((x1!=x2)||(y1!=y2)) )
         path.MoveToPoint( xc, yc );
-    path.AddArc( xc, yc , rad , DegToRad(sa) , DegToRad(ea), false );
+    // since these angles (ea,sa) are measured counter-clockwise, we invert them to
+    // get clockwise angles
+    path.AddArc( xc, yc , rad , DegToRad(-sa) , DegToRad(-ea), false );
     if ( fill && ((x1!=x2)||(y1!=y2)) )
         path.AddLineToPoint( xc, yc );
     m_graphicContext->DrawPath(path);