From 77614c6c48ce8caf5697afb53a26caf1b165fed3 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Tue, 10 Jan 2017 17:17:11 +0100 Subject: Correct software PathItem bounding rect Reporting the QQuickItem geometry is incorrect. Report the area touched by the path instead. This fixes the tiger in the pathitem example. Change-Id: Ib443f442411befabe7864eff6473604926527f4e Reviewed-by: Andy Nichols --- src/quick/items/qquickpathitemsoftwarerenderer.cpp | 9 ++++++++- src/quick/items/qquickpathitemsoftwarerenderer_p.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'src/quick/items') diff --git a/src/quick/items/qquickpathitemsoftwarerenderer.cpp b/src/quick/items/qquickpathitemsoftwarerenderer.cpp index 63d4f8f6d4..46ebcbfe6d 100644 --- a/src/quick/items/qquickpathitemsoftwarerenderer.cpp +++ b/src/quick/items/qquickpathitemsoftwarerenderer.cpp @@ -180,6 +180,8 @@ void QQuickPathItemSoftwareRenderer::updateNode() if (listChanged) m_node->m_vp.resize(count); + m_node->m_boundingRect = QRectF(); + for (int i = 0; i < count; ++i) { VisualPathGuiData &src(m_vp[i]); QQuickPathItemSoftwareRenderNode::VisualPathRenderData &dst(m_node->m_vp[i]); @@ -201,6 +203,11 @@ void QQuickPathItemSoftwareRenderer::updateNode() dst.brush = src.brush; src.dirty = 0; + + QRectF br = dst.path.boundingRect(); + const float sw = qMax(1.0f, dst.strokeWidth); + br.adjust(-sw, -sw, sw, sw); + m_node->m_boundingRect |= br; } m_node->markDirty(QSGNode::DirtyMaterial); @@ -256,7 +263,7 @@ QSGRenderNode::RenderingFlags QQuickPathItemSoftwareRenderNode::flags() const QRectF QQuickPathItemSoftwareRenderNode::rect() const { - return QRect(0, 0, m_item->width(), m_item->height()); + return m_boundingRect; } QT_END_NAMESPACE diff --git a/src/quick/items/qquickpathitemsoftwarerenderer_p.h b/src/quick/items/qquickpathitemsoftwarerenderer_p.h index 38130d7301..64280b436e 100644 --- a/src/quick/items/qquickpathitemsoftwarerenderer_p.h +++ b/src/quick/items/qquickpathitemsoftwarerenderer_p.h @@ -125,6 +125,7 @@ private: QBrush brush; }; QVector m_vp; + QRectF m_boundingRect; friend class QQuickPathItemSoftwareRenderer; }; -- cgit v1.2.3