]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dcgraph.cpp
Implement wxRendererMac::DrawItemSelectionRect and move the generic wxTreeCtrl to...
[wxWidgets.git] / src / common / dcgraph.cpp
index d5da1bb58bb9ee5f952a1b0e080ff3e5a6f5fb2f..fc1a6a89e743a7a59852be76d3dc68930ba6ab18 100644 (file)
@@ -83,6 +83,14 @@ wxGCDC::wxGCDC(const wxWindowDC& dc)
     SetGraphicsContext( wxGraphicsContext::Create(dc) );
 }
 
     SetGraphicsContext( wxGraphicsContext::Create(dc) );
 }
 
+#ifdef __WXMSW__
+wxGCDC::wxGCDC(const wxMemoryDC& dc)
+{
+    Init();
+    SetGraphicsContext( wxGraphicsContext::Create(dc) );
+}
+#endif    
+
 void wxGCDC::Init()
 {
     m_ok = false;
 void wxGCDC::Init()
 {
     m_ok = false;
@@ -158,6 +166,7 @@ void wxGCDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord w, wxCoord h )
 
 void wxGCDC::DoSetClippingRegionAsRegion( const wxRegion &region )
 {
 
 void wxGCDC::DoSetClippingRegionAsRegion( const wxRegion &region )
 {
+    // region is in device coordinates
     wxCHECK_RET( Ok(), wxT("wxGCDC(cg)::DoSetClippingRegionAsRegion - invalid DC") );
 
     if (region.Empty())
     wxCHECK_RET( Ok(), wxT("wxGCDC(cg)::DoSetClippingRegionAsRegion - invalid DC") );
 
     if (region.Empty())
@@ -166,10 +175,13 @@ void wxGCDC::DoSetClippingRegionAsRegion( const wxRegion &region )
         return;
     }
 
         return;
     }
 
+    wxRegion logRegion( region );
     wxCoord x, y, w, h;
     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 );
     if ( m_clipping )
     {
         m_clipX1 = wxMax( m_clipX1, x );
@@ -480,7 +492,9 @@ void wxGCDC::DoDrawArc( wxCoord x1, wxCoord y1,
     wxGraphicsPath path = m_graphicContext->CreatePath();
     if ( fill && ((x1!=x2)||(y1!=y2)) )
         path.MoveToPoint( xc, yc );
     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);
     if ( fill && ((x1!=x2)||(y1!=y2)) )
         path.AddLineToPoint( xc, yc );
     m_graphicContext->DrawPath(path);
@@ -762,7 +776,10 @@ void wxGCDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y,
     if ( m_logicalFunction != wxCOPY )
         return;
 
     if ( m_logicalFunction != wxCOPY )
         return;
 
-     m_graphicContext->DrawText( str, x ,y , DegToRad(angle ));
+    if ( m_backgroundMode == wxTRANSPARENT )
+        m_graphicContext->DrawText( str, x ,y , DegToRad(angle ));
+    else
+        m_graphicContext->DrawText( str, x ,y , DegToRad(angle ), m_graphicContext->CreateBrush( wxBrush(m_textBackgroundColour,wxSOLID) ) );
 }
 
 void wxGCDC::DoDrawText(const wxString& str, wxCoord x, wxCoord y)
 }
 
 void wxGCDC::DoDrawText(const wxString& str, wxCoord x, wxCoord y)
@@ -774,7 +791,10 @@ void wxGCDC::DoDrawText(const wxString& str, wxCoord x, wxCoord y)
     if ( m_logicalFunction != wxCOPY )
         return;
 
     if ( m_logicalFunction != wxCOPY )
         return;
 
-    m_graphicContext->DrawText( str, x ,y);
+    if ( m_backgroundMode == wxTRANSPARENT )
+        m_graphicContext->DrawText( str, x ,y);
+    else
+        m_graphicContext->DrawText( str, x ,y , m_graphicContext->CreateBrush( wxBrush(m_textBackgroundColour,wxSOLID) ) );
 }
 
 bool wxGCDC::CanGetTextExtent() const
 }
 
 bool wxGCDC::CanGetTextExtent() const