aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2017-03-17 14:18:40 +0100
committerLaszlo Agocs <laszlo.agocs@qt.io>2017-03-17 13:56:33 +0000
commitd55f0433c102dbdbd0b69c8ddbc397a0854d86a0 (patch)
tree5597a11b3c27ff9c968fe013c6efab6de1064cd2 /src/quick
parent28af5be1fa824a181e560cf7d9f2b06479720c31 (diff)
Fix for disappearing VisualPath entries in generic PathItem
Prevent internal overflows in tesselation due to 100x scale and keep the correct scenegraph node - VisualPath entry associations. Change-Id: I181eae6872ea5c5af5783b68a8757a5249c074e5 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/quick')
-rw-r--r--src/quick/items/qquickpathitemgenericrenderer.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/quick/items/qquickpathitemgenericrenderer.cpp b/src/quick/items/qquickpathitemgenericrenderer.cpp
index a76a5e2b43..dfa01f4d42 100644
--- a/src/quick/items/qquickpathitemgenericrenderer.cpp
+++ b/src/quick/items/qquickpathitemgenericrenderer.cpp
@@ -51,7 +51,7 @@
QT_BEGIN_NAMESPACE
-static const qreal SCALE = 100;
+static const qreal TRI_SCALE = 1;
struct ColoredVertex // must match QSGGeometry::ColoredPoint2D
{
@@ -410,13 +410,13 @@ void QQuickPathItemGenericRenderer::triangulateFill(const QPainterPath &path,
{
const QVectorPath &vp = qtVectorPathForPath(path);
- QTriangleSet ts = qTriangulate(vp, QTransform::fromScale(SCALE, SCALE), 1, supportsElementIndexUint);
+ QTriangleSet ts = qTriangulate(vp, QTransform::fromScale(TRI_SCALE, TRI_SCALE), 1, supportsElementIndexUint);
const int vertexCount = ts.vertices.count() / 2; // just a qreal vector with x,y hence the / 2
fillVertices->resize(vertexCount);
ColoredVertex *vdst = reinterpret_cast<ColoredVertex *>(fillVertices->data());
const qreal *vsrc = ts.vertices.constData();
for (int i = 0; i < vertexCount; ++i)
- vdst[i].set(vsrc[i * 2] / SCALE, vsrc[i * 2 + 1] / SCALE, fillColor);
+ vdst[i].set(vsrc[i * 2] / TRI_SCALE, vsrc[i * 2 + 1] / TRI_SCALE, fillColor);
size_t indexByteSize;
if (ts.indices.type() == QVertexIndexVector::UnsignedShort) {
@@ -441,7 +441,7 @@ void QQuickPathItemGenericRenderer::triangulateStroke(const QPainterPath &path,
{
const QVectorPath &vp = qtVectorPathForPath(path);
const QRectF clip(QPointF(0, 0), clipSize);
- const qreal inverseScale = 1.0 / SCALE;
+ const qreal inverseScale = 1.0 / TRI_SCALE;
QTriangulatingStroker stroker;
stroker.setInvScale(inverseScale);
@@ -508,8 +508,12 @@ void QQuickPathItemGenericRenderer::updateNode()
if (m_accDirty & DirtyList)
d.effectiveDirty |= DirtyFillGeom | DirtyStrokeGeom | DirtyColor | DirtyFillGradient;
- if (!d.effectiveDirty)
+
+ if (!d.effectiveDirty) {
+ prevNode = node;
+ nodePtr = &node->m_next;
continue;
+ }
if (d.fillColor.a == 0) {
delete node->m_fillNode;