diff options
author | Bjørn Erik Nilsen <bjorn.nilsen@nokia.com> | 2009-07-09 09:08:48 (GMT) |
---|---|---|
committer | Bjørn Erik Nilsen <bjorn.nilsen@nokia.com> | 2009-07-09 09:08:48 (GMT) |
commit | bdb6d461f4889e38296c859446283c0f9397dbdd (patch) | |
tree | 2ba5ee22e5f10045eb2e918f412760ee9f71b27d /src/gui/graphicsview | |
parent | e1b6cd9170d9a20fd3ee1b8d7ef11dcd3364e16d (diff) | |
download | Qt-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.cpp | 10 |
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; } |