summaryrefslogtreecommitdiffstats
path: root/src/gui/graphicsview/qgraphicsscene_p.h
diff options
context:
space:
mode:
authorBjørn Erik Nilsen <bjorn.nilsen@nokia.com>2009-05-27 19:31:44 (GMT)
committerAndreas Aardal Hanssen <andreas.aardal.hanssen@nokia.com>2009-06-09 07:26:58 (GMT)
commit63a3c0ad549b57d0896f267383cf671d6212a70e (patch)
tree6e79f410a93cdf69c7582077c5631b98b8868377 /src/gui/graphicsview/qgraphicsscene_p.h
parente7c7e4f57530d7b3571bf11dbe555c52f6dc3f34 (diff)
downloadQt-63a3c0ad549b57d0896f267383cf671d6212a70e.zip
Qt-63a3c0ad549b57d0896f267383cf671d6212a70e.tar.gz
Qt-63a3c0ad549b57d0896f267383cf671d6212a70e.tar.bz2
Massive re-factoring of Graphics View's update mechanism.
This is work-in-progress, so don't expect everything to work perfectly. Most of the auto-test pass and examples and demos seem to run fine. Unfortunately I'm too tired to write about the actual update mehanism now, but it's faster than the old approach (if that helps:)). There's more to optimize, but I'll come back to that later. I need some sleep now :) To be continued.
Diffstat (limited to 'src/gui/graphicsview/qgraphicsscene_p.h')
-rw-r--r--src/gui/graphicsview/qgraphicsscene_p.h30
1 files changed, 26 insertions, 4 deletions
diff --git a/src/gui/graphicsview/qgraphicsscene_p.h b/src/gui/graphicsview/qgraphicsscene_p.h
index bb99908..f2226bf 100644
--- a/src/gui/graphicsview/qgraphicsscene_p.h
+++ b/src/gui/graphicsview/qgraphicsscene_p.h
@@ -111,7 +111,7 @@ public:
QSet<QGraphicsItem *> selectedItems;
QList<QGraphicsItem *> unindexedItems;
QList<QGraphicsItem *> indexedItems;
- QList<QGraphicsItem *> dirtyItems;
+ QVector<QGraphicsItem *> dirtyItems;
QList<QGraphicsItem *> pendingUpdateItems;
QList<QGraphicsItem *> unpolishedItems;
QList<QGraphicsItem *> topLevelItems;
@@ -121,9 +121,7 @@ public:
void _q_updateLater();
void _q_polishItems();
- void _q_resetDirtyItems();
- void resetDirtyItemsLater();
- bool dirtyItemResetPending;
+ void _q_processDirtyItems();
QList<int> freeItemIndexes;
bool regenerateIndex;
@@ -257,6 +255,30 @@ public:
void drawSubtreeRecursive(QGraphicsItem *item, QPainter *painter, const QTransform &parentTransform,
const QTransform &viewTransform,
const QRegion &exposedRegion, QWidget *widget, QGraphicsView::OptimizationFlags optimizationFlags);
+ void markDirty(QGraphicsItem *item, const QRectF &rect = QRectF(), bool invalidateChildren = false,
+ bool maybeDirtyClipPath = false, bool force = false, bool ignoreOpacity = false);
+
+ inline void resetDirtyItem(QGraphicsItem *item)
+ {
+ Q_ASSERT(item);
+ item->d_ptr->dirty = 0;
+ item->d_ptr->paintedViewBoundingRectsNeedRepaint = 0;
+ item->d_ptr->dirtyChildren = 0;
+ item->d_ptr->inDirtyList = 0;
+ item->d_ptr->needsRepaint = QRectF();
+ }
+
+ inline void removeFromDirtyItems(QGraphicsItem *item)
+ {
+ int i = 0;
+ while (i < dirtyItems.size()) {
+ if (dirtyItems.at(i) == item)
+ dirtyItems.remove(i);
+ else
+ ++i;
+ }
+ resetDirtyItem(item);
+ }
QStyle *style;
QFont font;