summaryrefslogtreecommitdiffstats
path: root/src/gui/graphicsview
diff options
context:
space:
mode:
authorBjørn Erik Nilsen <bjorn.nilsen@nokia.com>2009-07-09 09:08:48 (GMT)
committerBjørn Erik Nilsen <bjorn.nilsen@nokia.com>2009-07-09 09:08:48 (GMT)
commitbdb6d461f4889e38296c859446283c0f9397dbdd (patch)
tree2ba5ee22e5f10045eb2e918f412760ee9f71b27d /src/gui/graphicsview
parente1b6cd9170d9a20fd3ee1b8d7ef11dcd3364e16d (diff)
downloadQt-bdb6d461f4889e38296c859446283c0f9397dbdd.zip
Qt-bdb6d461f4889e38296c859446283c0f9397dbdd.tar.gz
Qt-bdb6d461f4889e38296c859446283c0f9397dbdd.tar.bz2
Rendering artifacts when hiding a QGraphicsItem.
The problem was that update() followed by hide() didn't work as expected because the update() caused all sub-sequent update requests to be discareded. This is correct, however, we have to make sure the ignoreVisible/ignoreOpacity bit is set properly; we won't process a hidden item otherwise. Auto-test included.
Diffstat (limited to 'src/gui/graphicsview')
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index ae6c53c..0ca72b7 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -4358,6 +4358,16 @@ void QGraphicsScenePrivate::markDirty(QGraphicsItem *item, const QRectF &rect, b
/*ignoreVisibleBit=*/force,
/*ignoreDirtyBit=*/removingItemFromScene || invalidateChildren,
/*ignoreOpacity=*/ignoreOpacity)) {
+ if (item->d_ptr->dirty) {
+ // The item is already marked as dirty and will be processed later. However,
+ // we have to make sure ignoreVisible and ignoreOpacity are set properly;
+ // otherwise things like: item->update(); item->hide() (force is now true)
+ // won't work as expected.
+ if (force)
+ item->d_ptr->ignoreVisible = 1;
+ if (ignoreOpacity)
+ item->d_ptr->ignoreOpacity = 1;
+ }
return;
}