Fix AddArcToPoint when no current point is set on wxGraphicsPath
Current behavior of AddArcToPoint() when there is no current point is not documented and moreover it is not the same in native macOS and in generic implementation. Under macOS nothing is done and "no current point" error is raised but under other ports (generic implementation) only arc is drawn (without initial line). When there is no current point, in similar functions AddCurveToPoint(), AddQuadCurveToPoint() it is initially set to the some known control point of the curve but this approach cannot be applied to AddArcToPoint(). The only well defined fallback point seems to be (0, 0) and this option is implemented here. See #18086.
This commit is contained in:
parent
fd5576a326
commit
9acb2fe3a0
Binary file not shown.
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.2 KiB |
@ -55,6 +55,8 @@ public:
|
||||
to the line connecting (@a x1, @a y1) and (@a x2, @a y2).
|
||||
If the current point and the starting point of the arc are different,
|
||||
a straight line connecting these points is also appended.
|
||||
If there is no current point before the call to AddArcToPoint() this
|
||||
function will behave as if preceded by a call to MoveToPoint(0, 0).
|
||||
After this call the current point will be at the ending point
|
||||
of the arc.
|
||||
@image html drawing-addarctopoint.png
|
||||
|
@ -455,6 +455,12 @@ void wxGraphicsPathData::AddArcToPoint( wxDouble x1, wxDouble y1 , wxDouble x2,
|
||||
{
|
||||
wxPoint2DDouble current;
|
||||
GetCurrentPoint(¤t.m_x, ¤t.m_y);
|
||||
if ( current == wxPoint(0, 0) )
|
||||
{
|
||||
// (0, 0) is returned by GetCurrentPoint() also when the last point is not yet actually set,
|
||||
// so we should reposition it to (0, 0) to be sure that a last point is initially set.
|
||||
MoveToPoint(0, 0);
|
||||
}
|
||||
wxPoint2DDouble p1(x1, y1);
|
||||
wxPoint2DDouble p2(x2, y2);
|
||||
|
||||
|
@ -1223,6 +1223,12 @@ void wxMacCoreGraphicsPathData::AddArc( wxDouble x, wxDouble y, wxDouble r, wxDo
|
||||
|
||||
void wxMacCoreGraphicsPathData::AddArcToPoint( wxDouble x1, wxDouble y1 , wxDouble x2, wxDouble y2, wxDouble r )
|
||||
{
|
||||
// This function should be preceded by MoveToPoint(0, 0)
|
||||
// if current point is not yet set (CGPathAddArcToPoint requires non-empty path).
|
||||
if ( CGPathIsEmpty(m_path) )
|
||||
{
|
||||
MoveToPoint(0, 0);
|
||||
}
|
||||
CGPathAddArcToPoint( m_path, NULL , (CGFloat) x1, (CGFloat) y1, (CGFloat) x2, (CGFloat) y2, (CGFloat) r);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user