aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/items/qquickpathitemsoftwarerenderer.cpp9
-rw-r--r--src/quick/items/qquickpathitemsoftwarerenderer_p.h1
-rw-r--r--src/quick/scenegraph/coreapi/qsgrendernode.cpp4
3 files changed, 13 insertions, 1 deletions
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<VisualPathRenderData> m_vp;
+ QRectF m_boundingRect;
friend class QQuickPathItemSoftwareRenderer;
};
diff --git a/src/quick/scenegraph/coreapi/qsgrendernode.cpp b/src/quick/scenegraph/coreapi/qsgrendernode.cpp
index 3007e0000c..a8954848d6 100644
--- a/src/quick/scenegraph/coreapi/qsgrendernode.cpp
+++ b/src/quick/scenegraph/coreapi/qsgrendernode.cpp
@@ -267,6 +267,10 @@ QSGRenderNode::RenderingFlags QSGRenderNode::flags() const
For rendernodes covering the entire area of a corresponding QQuickItem the
return value will be (0, 0, item->width(), item->height()).
+ \note Nodes are also free to render outside the boundaries specified by the
+ item's width and height, since the scenegraph nodes are not bounded by the
+ QQuickItem geometry, as long as this is reported correctly from this function.
+
\sa flags()
*/
QRectF QSGRenderNode::rect() const