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:
@@ -51,6 +51,7 @@ public:
|
||||
/**
|
||||
Appends a circle around (@a x,@a y) with radius @a r as a new closed
|
||||
subpath.
|
||||
After this call the current point will be at (@a x+@a r, @a y).
|
||||
*/
|
||||
virtual void AddCircle(wxDouble x, wxDouble y, wxDouble r);
|
||||
|
||||
@@ -70,7 +71,9 @@ public:
|
||||
const wxPoint2DDouble& e);
|
||||
|
||||
/**
|
||||
Appends an ellipse fitting into the passed in rectangle.
|
||||
Appends an ellipse fitting into the passed in rectangle as a new
|
||||
closed subpath.
|
||||
After this call the current point will be at (@a x+@a w, @a y+@a h/2).
|
||||
*/
|
||||
virtual void AddEllipse(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
||||
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user