From: Alan Alpert Date: Thu, 28 Jul 2011 05:36:44 +0000 (+1000) Subject: Clip to bounding rect X-Git-Tag: qt-v5.0.0-alpha1~2034 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=31ebb4bfb0df83805c5d86b6773f11ba1145c7cd;p=profile%2Fivi%2Fqtdeclarative.git Clip to bounding rect 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 Reviewed-by: Martin Jones Reviewed-by: Gunnar Sletta --- diff --git a/src/declarative/items/qsgcanvas.cpp b/src/declarative/items/qsgcanvas.cpp index 38b5da6..ecb4e2b 100644 --- a/src/declarative/items/qsgcanvas.cpp +++ b/src/declarative/items/qsgcanvas.cpp @@ -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(); } diff --git a/src/declarative/items/qsgitem.cpp b/src/declarative/items/qsgitem.cpp index dea0286..55d84a7 100644 --- a/src/declarative/items/qsgitem.cpp +++ b/src/declarative/items/qsgitem.cpp @@ -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); diff --git a/src/declarative/items/qsgitem.h b/src/declarative/items/qsgitem.h index 12e9360..2cd2082 100644 --- a/src/declarative/items/qsgitem.h +++ b/src/declarative/items/qsgitem.h @@ -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; diff --git a/src/declarative/items/qsgrectangle_p.h b/src/declarative/items/qsgrectangle_p.h index 4f89996..4d93e66 100644 --- a/src/declarative/items/qsgrectangle_p.h +++ b/src/declarative/items/qsgrectangle_p.h @@ -160,7 +160,7 @@ public: qreal radius() const; void setRadius(qreal radius); - QRectF boundingRect() const; + virtual QRectF boundingRect() const; Q_SIGNALS: void colorChanged();