Handle implicit close in QDashedStrokeProcessor
Otherwise dashed polygons will not be closed when stroked like they are documented to be. Task-number: QTBUG-60397 Change-Id: I58e9e3a06af157f9a2789ccab640c9da75867962 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
This commit is contained in:
parent
d9e55e40a9
commit
62fc49fb91
@ -1330,8 +1330,7 @@ void QOpenGL2PaintEngineExPrivate::stroke(const QVectorPath &path, const QPen &p
|
||||
|
||||
QVectorPath dashStroke(dasher.points(),
|
||||
dasher.elementCount(),
|
||||
dasher.elementTypes(),
|
||||
s->renderHints);
|
||||
dasher.elementTypes());
|
||||
stroker.process(dashStroke, pen, clip, s->renderHints);
|
||||
}
|
||||
|
||||
|
@ -525,6 +525,7 @@ void QDashedStrokeProcessor::process(const QVectorPath &path, const QPen &pen, c
|
||||
int count = path.elementCount();
|
||||
|
||||
bool cosmetic = qt_pen_is_cosmetic(pen, hints);
|
||||
bool implicitClose = path.hasImplicitClose();
|
||||
|
||||
m_points.reset();
|
||||
m_types.reset();
|
||||
@ -558,8 +559,14 @@ void QDashedStrokeProcessor::process(const QVectorPath &path, const QPen &pen, c
|
||||
if (count < 2)
|
||||
return;
|
||||
|
||||
const qreal *endPts = pts + (count<<1);
|
||||
bool needsClose = false;
|
||||
if (implicitClose) {
|
||||
if (pts[0] != pts[count * 2 - 2] || pts[1] != pts[count * 2 - 1])
|
||||
needsClose = true;
|
||||
}
|
||||
|
||||
const qreal *firstPts = pts;
|
||||
const qreal *endPts = pts + (count<<1);
|
||||
m_dash_stroker.begin(this);
|
||||
|
||||
if (!types) {
|
||||
@ -605,6 +612,8 @@ void QDashedStrokeProcessor::process(const QVectorPath &path, const QPen &pen, c
|
||||
}
|
||||
}
|
||||
}
|
||||
if (needsClose)
|
||||
m_dash_stroker.lineTo(firstPts[0], firstPts[1]);
|
||||
|
||||
m_dash_stroker.end();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user