summaryrefslogtreecommitdiffstats
path: root/src/gui/graphicsview/qgraphicsview.cpp
diff options
context:
space:
mode:
authorAndreas Aardal Hanssen <andreas.aardal.hanssen@nokia.com>2009-05-25 09:59:10 (GMT)
committerAndreas Aardal Hanssen <andreas.aardal.hanssen@nokia.com>2009-06-09 07:20:25 (GMT)
commitb5c401b9aa3481886ad9e2d7816680c97839004e (patch)
tree476d42d12be47d20d8763a0cfc8365fdb781e758 /src/gui/graphicsview/qgraphicsview.cpp
parentcea87b08520888feff2f10d1bbf71bc8c2f1d780 (diff)
downloadQt-b5c401b9aa3481886ad9e2d7816680c97839004e.zip
Qt-b5c401b9aa3481886ad9e2d7816680c97839004e.tar.gz
Qt-b5c401b9aa3481886ad9e2d7816680c97839004e.tar.bz2
Add recursive drawing method to QGraphicsScene. For now it's opt-in, but
the important thing is by effectively implementing Simple Canvas' approach to drawing, we're in theory (and in practise measured on the desktop) as fast as Simple Canvas when rendering.
Diffstat (limited to 'src/gui/graphicsview/qgraphicsview.cpp')
-rw-r--r--src/gui/graphicsview/qgraphicsview.cpp34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index 10b837a..2459c49 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -3387,10 +3387,6 @@ void QGraphicsView::paintEvent(QPaintEvent *event)
bool allItems = false;
QList<QGraphicsItem *> itemList = d->findItems(exposedRegion, &allItems);
-#ifdef QGRAPHICSVIEW_DEBUG
- int exposedTime = stopWatch.elapsed();
-#endif
-
if ((d->cacheMode & CacheBackground)
#ifdef Q_WS_X11
&& X11->use_xrender
@@ -3436,16 +3432,26 @@ void QGraphicsView::paintEvent(QPaintEvent *event)
int backgroundTime = stopWatch.elapsed() - exposedTime;
#endif
- if (!itemList.isEmpty()) {
- // Generate the style options.
- const int numItems = itemList.size();
- QGraphicsItem **itemArray = &itemList[0]; // Relies on QList internals, but is perfectly valid.
- QStyleOptionGraphicsItem *styleOptionArray = d->allocStyleOptionsArray(numItems);
- for (int i = 0; i < numItems; ++i)
- itemArray[i]->d_ptr->initStyleOption(&styleOptionArray[i], viewTransform, exposedRegion, allItems);
- // Draw the items.
- drawItems(&painter, numItems, itemArray, styleOptionArray);
- d->freeStyleOptionsArray(styleOptionArray);
+ const char *directEnv = getenv("QGRAPHICSVIEW_DIRECT");
+ bool overrideDirectPaint = directEnv && atoi(directEnv) != 0;
+ if (overrideDirectPaint || (d->optimizationFlags & BypassDrawItems)) {
+ d->scene->d_func()->drawSubtreeRecursive(0, &painter, viewTransform, exposedRegion, viewport());
+ } else {
+ // Find all exposed items
+ bool allItems = false;
+ QList<QGraphicsItem *> itemList = d->findItems(exposedRegion, &allItems);
+
+ if (!itemList.isEmpty()) {
+ // Generate the style options.
+ const int numItems = itemList.size();
+ QGraphicsItem **itemArray = &itemList[0]; // Relies on QList internals, but is perfectly valid.
+ QStyleOptionGraphicsItem *styleOptionArray = d->allocStyleOptionsArray(numItems);
+ for (int i = 0; i < numItems; ++i)
+ itemArray[i]->d_ptr->initStyleOption(&styleOptionArray[i], viewTransform, exposedRegion, allItems);
+ // Draw the items.
+ drawItems(&painter, numItems, itemArray, styleOptionArray);
+ d->freeStyleOptionsArray(styleOptionArray);
+ }
}
#ifdef QGRAPHICSVIEW_DEBUG