adding correct filling area to arc, correct rounding and clipping
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@49286 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -168,7 +168,7 @@ void wxGCDC::DoSetClippingRegionAsRegion( const wxRegion ®ion )
|
|||||||
|
|
||||||
if (region.Empty())
|
if (region.Empty())
|
||||||
{
|
{
|
||||||
DestroyClippingRegion();
|
//DestroyClippingRegion();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ void wxGCDC::DestroyClippingRegion()
|
|||||||
// so we must explicitely make sure it only covers the area we want it to draw
|
// so we must explicitely make sure it only covers the area we want it to draw
|
||||||
int width, height ;
|
int width, height ;
|
||||||
GetSize( &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->SetPen( m_pen );
|
||||||
m_graphicContext->SetBrush( m_brush );
|
m_graphicContext->SetBrush( m_brush );
|
||||||
@@ -501,7 +501,6 @@ void wxGCDC::DoDrawEllipticArc( wxCoord x, wxCoord y, wxCoord w, wxCoord h,
|
|||||||
if ( !m_logicalFunctionSupported )
|
if ( !m_logicalFunctionSupported )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wxGraphicsPath path = m_graphicContext->CreatePath();
|
|
||||||
m_graphicContext->PushState();
|
m_graphicContext->PushState();
|
||||||
m_graphicContext->Translate(x+w/2.0,y+h/2.0);
|
m_graphicContext->Translate(x+w/2.0,y+h/2.0);
|
||||||
wxDouble factor = ((wxDouble) w) / h;
|
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
|
// since these angles (ea,sa) are measured counter-clockwise, we invert them to
|
||||||
// get clockwise angles
|
// get clockwise angles
|
||||||
path.AddArc( 0, 0, h/2.0 , DegToRad(-sa) , DegToRad(-ea), sa > ea );
|
if ( m_brush.GetStyle() != wxTRANSPARENT )
|
||||||
m_graphicContext->DrawPath( path );
|
{
|
||||||
|
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();
|
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 );
|
m_graphicContext->GetTextExtent( str, &w, &h, &d, &e );
|
||||||
|
|
||||||
if ( height )
|
if ( height )
|
||||||
*height = (wxCoord)h;
|
*height = (wxCoord)(h+0.5);
|
||||||
if ( descent )
|
if ( descent )
|
||||||
*descent = (wxCoord)d;
|
*descent = (wxCoord)(d+0.5);
|
||||||
if ( externalLeading )
|
if ( externalLeading )
|
||||||
*externalLeading = (wxCoord)e;
|
*externalLeading = (wxCoord)(e+0.5);
|
||||||
if ( width )
|
if ( width )
|
||||||
*width = (wxCoord)w;
|
*width = (wxCoord)(w+0.5);
|
||||||
|
|
||||||
if ( theFont )
|
if ( theFont )
|
||||||
{
|
{
|
||||||
@@ -899,8 +917,8 @@ void wxGCDC::Clear(void)
|
|||||||
|
|
||||||
void wxGCDC::DoGetSize(int *width, int *height) const
|
void wxGCDC::DoGetSize(int *width, int *height) const
|
||||||
{
|
{
|
||||||
*width = 1000;
|
*width = 10000;
|
||||||
*height = 1000;
|
*height = 10000;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxGCDC::DoGradientFillLinear(const wxRect& rect,
|
void wxGCDC::DoGradientFillLinear(const wxRect& rect,
|
||||||
|
Reference in New Issue
Block a user