Fixed adding a line to wxGraphicsPath with Direct2D renderer.
When current point is not yet set then wxGraphicsPath::AddLineToPoint() should behave as MoveToPoint(). We have to determine whether current point is set or not using additional flag because native renderer doesn't provide any support regarding this matter. See #17525
This commit is contained in:
@@ -1028,6 +1028,7 @@ private :
|
|||||||
|
|
||||||
mutable wxCOMPtr<ID2D1TransformedGeometry> m_transformedGeometry;
|
mutable wxCOMPtr<ID2D1TransformedGeometry> m_transformedGeometry;
|
||||||
|
|
||||||
|
bool m_currentPointSet;
|
||||||
D2D1_POINT_2F m_currentPoint;
|
D2D1_POINT_2F m_currentPoint;
|
||||||
|
|
||||||
D2D1_MATRIX_3X2_F m_transformMatrix;
|
D2D1_MATRIX_3X2_F m_transformMatrix;
|
||||||
@@ -1044,6 +1045,7 @@ private :
|
|||||||
|
|
||||||
wxD2DPathData::wxD2DPathData(wxGraphicsRenderer* renderer, ID2D1Factory* d2dFactory) :
|
wxD2DPathData::wxD2DPathData(wxGraphicsRenderer* renderer, ID2D1Factory* d2dFactory) :
|
||||||
wxGraphicsPathData(renderer), m_direct2dfactory(d2dFactory),
|
wxGraphicsPathData(renderer), m_direct2dfactory(d2dFactory),
|
||||||
|
m_currentPointSet(false),
|
||||||
m_currentPoint(D2D1::Point2F(0.0f, 0.0f)),
|
m_currentPoint(D2D1::Point2F(0.0f, 0.0f)),
|
||||||
m_transformMatrix(D2D1::Matrix3x2F::Identity()),
|
m_transformMatrix(D2D1::Matrix3x2F::Identity()),
|
||||||
m_figureOpened(false),
|
m_figureOpened(false),
|
||||||
@@ -1161,11 +1163,20 @@ void wxD2DPathData::MoveToPoint(wxDouble x, wxDouble y)
|
|||||||
EnsureFigureOpen(x, y);
|
EnsureFigureOpen(x, y);
|
||||||
|
|
||||||
m_currentPoint = D2D1::Point2F(x, y);
|
m_currentPoint = D2D1::Point2F(x, y);
|
||||||
|
m_currentPointSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// adds a straight line from the current point to (x,y)
|
// adds a straight line from the current point to (x,y)
|
||||||
void wxD2DPathData::AddLineToPoint(wxDouble x, wxDouble y)
|
void wxD2DPathData::AddLineToPoint(wxDouble x, wxDouble y)
|
||||||
{
|
{
|
||||||
|
// If current point is not yet set then
|
||||||
|
// this function should behave as MoveToPoint.
|
||||||
|
if( !m_currentPointSet )
|
||||||
|
{
|
||||||
|
MoveToPoint(x, y);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
EnsureFigureOpen(m_currentPoint.x, m_currentPoint.y);
|
EnsureFigureOpen(m_currentPoint.x, m_currentPoint.y);
|
||||||
m_geometrySink->AddLine(D2D1::Point2F(x, y));
|
m_geometrySink->AddLine(D2D1::Point2F(x, y));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user