diff --git a/src/common/dcgraph.cpp b/src/common/dcgraph.cpp index 4490323dce..cea03f23ef 100644 --- a/src/common/dcgraph.cpp +++ b/src/common/dcgraph.cpp @@ -168,7 +168,7 @@ void wxGCDC::DoSetClippingRegionAsRegion( const wxRegion ®ion ) if (region.Empty()) { - DestroyClippingRegion(); + //DestroyClippingRegion(); return; } @@ -204,7 +204,7 @@ void wxGCDC::DestroyClippingRegion() // so we must explicitely make sure it only covers the area we want it to draw int width, height ; GetSize( &width , &height ) ; - m_graphicContext->Clip( DeviceToLogicalX(0) , DeviceToLogicalY(0) , width, height ); + m_graphicContext->Clip( DeviceToLogicalX(0) , DeviceToLogicalY(0) , DeviceToLogicalXRel(width), DeviceToLogicalYRel(height) ); m_graphicContext->SetPen( m_pen ); m_graphicContext->SetBrush( m_brush ); @@ -501,7 +501,6 @@ void wxGCDC::DoDrawEllipticArc( wxCoord x, wxCoord y, wxCoord w, wxCoord h, if ( !m_logicalFunctionSupported ) return; - wxGraphicsPath path = m_graphicContext->CreatePath(); m_graphicContext->PushState(); m_graphicContext->Translate(x+w/2.0,y+h/2.0); wxDouble factor = ((wxDouble) w) / h; @@ -509,8 +508,27 @@ void wxGCDC::DoDrawEllipticArc( wxCoord x, wxCoord y, wxCoord w, wxCoord h, // since these angles (ea,sa) are measured counter-clockwise, we invert them to // get clockwise angles - path.AddArc( 0, 0, h/2.0 , DegToRad(-sa) , DegToRad(-ea), sa > ea ); - m_graphicContext->DrawPath( path ); + if ( m_brush.GetStyle() != wxTRANSPARENT ) + { + wxGraphicsPath path = m_graphicContext->CreatePath(); + path.MoveToPoint( 0, 0 ); + path.AddLineToPoint( h / 2.0 * cos(DegToRad(sa)) , h / 2.0 * sin(DegToRad(-sa)) ); + path.AddLineToPoint( h / 2.0 * cos(DegToRad(ea)) , h / 2.0 * sin(DegToRad(-ea)) ); + path.AddLineToPoint( 0, 0 ); + m_graphicContext->FillPath( path ); + + path = m_graphicContext->CreatePath(); + path.AddArc( 0, 0, h/2.0 , DegToRad(-sa) , DegToRad(-ea), sa > ea ); + m_graphicContext->FillPath( path ); + m_graphicContext->StrokePath( path ); + } + else + { + wxGraphicsPath path = m_graphicContext->CreatePath(); + path.AddArc( 0, 0, h/2.0 , DegToRad(-sa) , DegToRad(-ea), sa > ea ); + m_graphicContext->DrawPath( path ); + } + m_graphicContext->PopState(); } @@ -838,13 +856,13 @@ void wxGCDC::DoGetTextExtent( const wxString &str, wxCoord *width, wxCoord *heig m_graphicContext->GetTextExtent( str, &w, &h, &d, &e ); if ( height ) - *height = (wxCoord)h; + *height = (wxCoord)(h+0.5); if ( descent ) - *descent = (wxCoord)d; + *descent = (wxCoord)(d+0.5); if ( externalLeading ) - *externalLeading = (wxCoord)e; + *externalLeading = (wxCoord)(e+0.5); if ( width ) - *width = (wxCoord)w; + *width = (wxCoord)(w+0.5); if ( theFont ) { @@ -899,8 +917,8 @@ void wxGCDC::Clear(void) void wxGCDC::DoGetSize(int *width, int *height) const { - *width = 1000; - *height = 1000; + *width = 10000; + *height = 10000; } void wxGCDC::DoGradientFillLinear(const wxRect& rect,