Clip to bounding rect
authorAlan Alpert <alan.alpert@nokia.com>
Thu, 28 Jul 2011 05:36:44 +0000 (15:36 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 28 Jul 2011 09:27:26 +0000 (11:27 +0200)
Bounding rect varies from width/height in some cases, like Rectangle.

This restores rectangle clipping behaviour to be the same as QtQuick 1.

Task-number: QTBUG-20547
Change-Id: I2b6edc662a0026219d73b52878d2f4c046fef7f0
Reviewed-on: http://codereview.qt.nokia.com/2317
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
src/declarative/items/qsgcanvas.cpp
src/declarative/items/qsgitem.cpp
src/declarative/items/qsgitem.h
src/declarative/items/qsgrectangle_p.h

index 38b5da6..ecb4e2b 100644 (file)
@@ -1703,7 +1703,7 @@ void QSGCanvasPrivate::updateDirtyNode(QSGItem *item)
 
         if (item->clip()) {
             Q_ASSERT(itemPriv->clipNode == 0);
-            itemPriv->clipNode = new QSGDefaultClipNode(QRectF(0, 0, itemPriv->width, itemPriv->height));
+            itemPriv->clipNode = new QSGDefaultClipNode(item->boundingRect());
 
             if (child)
                 parent->removeChildNode(child);
@@ -1789,7 +1789,7 @@ void QSGCanvasPrivate::updateDirtyNode(QSGItem *item)
     }
 
     if ((dirty & QSGItemPrivate::Size || clipEffectivelyChanged) && itemPriv->clipNode) {
-        itemPriv->clipNode->setRect(QRectF(0, 0, itemPriv->width, itemPriv->height));
+        itemPriv->clipNode->setRect(item->boundingRect());
         itemPriv->clipNode->update();
     }
 
index dea0286..55d84a7 100644 (file)
@@ -2227,6 +2227,7 @@ void QSGItem::itemChange(ItemChange change, const ItemChangeData &value)
 
 /*! \internal */
 // XXX todo - do we want/need this anymore?
+// Note that it's now used for varying clip rect
 QRectF QSGItem::boundingRect() const
 {
     Q_D(const QSGItem);
index 12e9360..2cd2082 100644 (file)
@@ -256,7 +256,7 @@ public:
     void setFlag(Flag flag, bool enabled = true);
     void setFlags(Flags flags);
 
-    QRectF boundingRect() const;
+    virtual QRectF boundingRect() const;
 
     bool hasActiveFocus() const;
     bool hasFocus() const;
index 4f89996..4d93e66 100644 (file)
@@ -160,7 +160,7 @@ public:
     qreal radius() const;
     void setRadius(qreal radius);
 
-    QRectF boundingRect() const;
+    virtual QRectF boundingRect() const;
 
 Q_SIGNALS:
     void colorChanged();