diff options
author | Charles Yin <charles.yin@nokia.com> | 2011-10-27 13:06:57 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-10-28 22:31:32 +0200 |
commit | 1bc655b46738811268b50b318a3f3cd03ff02aff (patch) | |
tree | 4bd5d7f5659033b51d7039f90e5237614d826594 /src | |
parent | 4e644d592655c806bacbce051eb4b7d1f8aacd67 (diff) |
Fix PaintedItem redraw bug
1) After QQuickItem::update() being called (means item's content is dirty),
the paint() function should always been called, so the contentsDirty
and geometryDirty flags are not needed.
2) Update the smile example to validate the above changes
Task-number:QTBUG-22250
Change-Id: I5a72f18e6982bdb3ba23e78a253c2876aca2e8cb
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Reviewed-by: Yoann Lopes <yoann.lopes@nokia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/declarative/items/qquickpainteditem.cpp | 18 | ||||
-rw-r--r-- | src/declarative/items/qquickpainteditem.h | 1 | ||||
-rw-r--r-- | src/declarative/items/qquickpainteditem_p.h | 2 | ||||
-rw-r--r-- | src/declarative/scenegraph/util/qsgpainternode.cpp | 4 | ||||
-rw-r--r-- | src/declarative/scenegraph/util/qsgpainternode_p.h | 2 |
5 files changed, 4 insertions, 23 deletions
diff --git a/src/declarative/items/qquickpainteditem.cpp b/src/declarative/items/qquickpainteditem.cpp index ac67f6a8d0..4d96da2e1a 100644 --- a/src/declarative/items/qquickpainteditem.cpp +++ b/src/declarative/items/qquickpainteditem.cpp @@ -123,8 +123,6 @@ QQuickPaintedItemPrivate::QQuickPaintedItemPrivate() , fillColor(Qt::transparent) , renderTarget(QQuickPaintedItem::Image) , performanceHints(0) - , geometryDirty(false) - , contentsDirty(false) , opaquePainting(false) , antialiasing(false) , mipmap(false) @@ -171,7 +169,6 @@ QQuickPaintedItem::~QQuickPaintedItem() void QQuickPaintedItem::update(const QRect &rect) { Q_D(QQuickPaintedItem); - d->contentsDirty = true; if (rect.isNull() && !d->dirtyRect.isNull()) d->dirtyRect = contentsBoundingRect().toAlignedRect(); @@ -492,17 +489,6 @@ void QQuickPaintedItem::setRenderTarget(RenderTarget target) */ /*! - This function is called after the item's geometry has changed. -*/ -void QQuickPaintedItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) -{ - Q_D(QQuickPaintedItem); - d->geometryDirty = true; - QQuickItem::geometryChanged(newGeometry, oldGeometry); -} - - -/*! This function is called when the Scene Graph node associated to the item needs to be updated. */ @@ -531,11 +517,9 @@ QSGNode *QQuickPaintedItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDat node->setOpaquePainting(d->opaquePainting); node->setFillColor(d->fillColor); node->setContentsScale(d->contentsScale); - node->setDirty(d->contentsDirty || d->geometryDirty, d->dirtyRect); + node->setDirty(d->dirtyRect); node->update(); - d->contentsDirty = false; - d->geometryDirty = false; d->dirtyRect = QRect(); return node; diff --git a/src/declarative/items/qquickpainteditem.h b/src/declarative/items/qquickpainteditem.h index 1ddfa25c5e..b2da9e6c7a 100644 --- a/src/declarative/items/qquickpainteditem.h +++ b/src/declarative/items/qquickpainteditem.h @@ -114,7 +114,6 @@ Q_SIGNALS: protected: QQuickPaintedItem(QQuickPaintedItemPrivate &dd, QQuickItem *parent = 0); - virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); virtual QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *); private: diff --git a/src/declarative/items/qquickpainteditem_p.h b/src/declarative/items/qquickpainteditem_p.h index 00061d9977..b847b0a4ef 100644 --- a/src/declarative/items/qquickpainteditem_p.h +++ b/src/declarative/items/qquickpainteditem_p.h @@ -61,8 +61,6 @@ public: QRect dirtyRect; - bool geometryDirty : 1; - bool contentsDirty : 1; bool opaquePainting: 1; bool antialiasing: 1; bool mipmap: 1; diff --git a/src/declarative/scenegraph/util/qsgpainternode.cpp b/src/declarative/scenegraph/util/qsgpainternode.cpp index a89dd75bac..f3e5202241 100644 --- a/src/declarative/scenegraph/util/qsgpainternode.cpp +++ b/src/declarative/scenegraph/util/qsgpainternode.cpp @@ -378,9 +378,9 @@ void QSGPainterNode::setSize(const QSize &size) m_dirtyTexture = true; } -void QSGPainterNode::setDirty(bool d, const QRect &dirtyRect) +void QSGPainterNode::setDirty(const QRect &dirtyRect) { - m_dirtyContents = d; + m_dirtyContents = true; m_dirtyRect = dirtyRect; if (m_mipmapping) diff --git a/src/declarative/scenegraph/util/qsgpainternode_p.h b/src/declarative/scenegraph/util/qsgpainternode_p.h index c838ed1a0c..8e95107efc 100644 --- a/src/declarative/scenegraph/util/qsgpainternode_p.h +++ b/src/declarative/scenegraph/util/qsgpainternode_p.h @@ -83,7 +83,7 @@ public: void setSize(const QSize &size); QSize size() const { return m_size; } - void setDirty(bool d, const QRect &dirtyRect = QRect()); + void setDirty(const QRect &dirtyRect = QRect()); void setOpaquePainting(bool opaque); bool opaquePainting() const { return m_opaquePainting; } |