summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Erik Nilsen <bjorn.nilsen@nokia.com>2009-06-04 18:58:34 (GMT)
committerAndreas Aardal Hanssen <andreas.aardal.hanssen@nokia.com>2009-06-09 07:34:51 (GMT)
commit9aa44bff88f377f056eafe5d9f24c88d81f477e5 (patch)
tree47e4779da2f16cfeba4bd780471ec48be1eff93d
parent4af92dcf716ee3c2fc4673aadd07fde19b7bffed (diff)
downloadQt-9aa44bff88f377f056eafe5d9f24c88d81f477e5.zip
Qt-9aa44bff88f377f056eafe5d9f24c88d81f477e5.tar.gz
Qt-9aa44bff88f377f056eafe5d9f24c88d81f477e5.tar.bz2
Removes odd artifact in the chip demo.
Calling repaint() instead of update() is bad when having multiple views (which GV perfectly supports). The result is that e.g. when moving a chip in the chip demo, there's a visible lag between each view. It can also be a performance killer on QWS, where the surface is locked for each repaint(). Instead of calling repaint() we call update() as before, but we also make sure the updates are processed immediately.
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp9
-rw-r--r--src/gui/graphicsview/qgraphicsview.cpp6
2 files changed, 12 insertions, 3 deletions
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index eaf00a0..4b54c08 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -697,6 +697,15 @@ void QGraphicsScenePrivate::_q_processDirtyItems()
// changed signal is emitted, so we emit it now.
_q_emitUpdated();
}
+
+ // Immediately dispatch all pending update requests on the views.
+ for (int i = 0; i < views.size(); ++i) {
+ QWidget *viewport = views.at(i)->d_func()->viewport;
+ if (qt_widget_private(viewport)->paintOnScreen())
+ QCoreApplication::sendPostedEvents(viewport, QEvent::UpdateRequest);
+ else
+ QCoreApplication::sendPostedEvents(viewport->window(), QEvent::UpdateRequest);
+ }
}
/*!
diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index c91e0d1..87b5e3f 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -814,11 +814,11 @@ void QGraphicsViewPrivate::processPendingUpdates()
if (viewportUpdateMode == QGraphicsView::BoundingRectViewportUpdate) {
if (optimizationFlags & QGraphicsView::DontAdjustForAntialiasing)
- viewport->repaint(dirtyBoundingRect);
+ viewport->update(dirtyBoundingRect);
else
- viewport->repaint(dirtyBoundingRect.adjusted(-2, -2, 2, 2));
+ viewport->update(dirtyBoundingRect.adjusted(-2, -2, 2, 2));
} else {
- viewport->repaint(dirtyRegion); // Already adjusted in updateRect/Region.
+ viewport->update(dirtyRegion); // Already adjusted in updateRect/Region.
}
dirtyBoundingRect = QRect();