Fixed appending circle/ellipse to wxGraphicsPath with Direct2D renderer.

Circle/ellipse should be appended as a closed sub-path and the current point after the operation should be moved to "the rightmost point" of the figure ((x+r,y) and (x+w,y+h/2) respectively).

See #17520
This commit is contained in:
Artur Wieczorek
2016-05-04 21:59:13 +02:00
parent e2b13a7b8e
commit 008a162241
2 changed files with 16 additions and 11 deletions

View File

@@ -1239,7 +1239,17 @@ void wxD2DPathData::AddEllipse(wxDouble x, wxDouble y, wxDouble w, wxDouble h)
const wxDouble rx = w / 2.0;
const wxDouble ry = h / 2.0;
MoveToPoint(x, y + ry);
MoveToPoint(x + w, y + ry);
D2D1_ARC_SEGMENT arcSegmentLower =
{
D2D1::Point2((FLOAT)(x), (FLOAT)(y + ry)), // end point
D2D1::SizeF((FLOAT)(rx), (FLOAT)(ry)), // size
0.0f,
D2D1_SWEEP_DIRECTION_CLOCKWISE,
D2D1_ARC_SIZE_SMALL
};
m_geometrySink->AddArc(arcSegmentLower);
D2D1_ARC_SEGMENT arcSegmentUpper =
{
@@ -1251,15 +1261,7 @@ void wxD2DPathData::AddEllipse(wxDouble x, wxDouble y, wxDouble w, wxDouble h)
};
m_geometrySink->AddArc(arcSegmentUpper);
D2D1_ARC_SEGMENT arcSegmentLower =
{
D2D1::Point2((FLOAT)(x), (FLOAT)(y + ry)), // end point
D2D1::SizeF((FLOAT)(rx), (FLOAT)(ry)), // size
0.0f,
D2D1_SWEEP_DIRECTION_CLOCKWISE,
D2D1_ARC_SIZE_SMALL
};
m_geometrySink->AddArc(arcSegmentLower);
CloseSubpath();
}
// gets the last point of the current path, (0,0) if not yet set