diff options
author | Gunnar Sletta <gunnar.sletta@nokia.com> | 2012-03-05 09:28:10 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-05 11:26:23 +0100 |
commit | 416786d0f7fee72e235814c98eb2d887b6098ae3 (patch) | |
tree | c5e56a0afe871f5e61c0d60384efa6f6b4902ebf /src/quick/items/qquickwindowmanager.cpp | |
parent | 12048b91d95034725830a465c33c387cec26a971 (diff) |
Made QQuickWindowManager pluggable via QSGContext.
Also rename paint() to exposureChanged() as that is what the function
actually means. The implementation of paint() has been removed in both
trivial and threaded version as it is superflous as show() already
triggers rendering.
Change-Id: I7e53f42786efaf961921f10a39977de511965d71
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
Diffstat (limited to 'src/quick/items/qquickwindowmanager.cpp')
-rw-r--r-- | src/quick/items/qquickwindowmanager.cpp | 43 |
1 files changed, 17 insertions, 26 deletions
diff --git a/src/quick/items/qquickwindowmanager.cpp b/src/quick/items/qquickwindowmanager.cpp index 5de8ad1279..12c5dbd932 100644 --- a/src/quick/items/qquickwindowmanager.cpp +++ b/src/quick/items/qquickwindowmanager.cpp @@ -188,7 +188,7 @@ public: void canvasDestroyed(QQuickCanvas *canvas); - void paint(QQuickCanvas *canvas); + void exposureChanged(QQuickCanvas *canvas); QImage grab(QQuickCanvas *canvas); void resize(QQuickCanvas *canvas, const QSize &size); void handleDeferredUpdate(); @@ -297,7 +297,7 @@ public: void initializeGL(); void renderCanvas(QQuickCanvas *canvas); - void paint(QQuickCanvas *canvas); + void exposureChanged(QQuickCanvas *canvas); QImage grab(QQuickCanvas *canvas); void resize(QQuickCanvas *canvas, const QSize &size); void wakeup(); @@ -333,14 +333,21 @@ QQuickWindowManager *QQuickWindowManager::instance() static QQuickWindowManager *theInstance; if (!theInstance) { - bool fancy = QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::ThreadedOpenGL); + + theInstance = QSGContext::createWindowManager(); + + bool fancy = QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::BufferQueueingOpenGL); if (qmlNoThreadedRenderer()) fancy = false; + if (qmlFixedAnimationStep()) QUnifiedTimer::instance(true)->setConsistentTiming(true); - theInstance = fancy - ? (QQuickWindowManager*) new QQuickRenderThreadSingleContextWindowManager - : (QQuickWindowManager*) new QQuickTrivialWindowManager; + + if (!theInstance) { + theInstance = fancy + ? (QQuickWindowManager*) new QQuickRenderThreadSingleContextWindowManager + : (QQuickWindowManager*) new QQuickTrivialWindowManager; + } } return theInstance; } @@ -932,26 +939,15 @@ void QQuickRenderThreadSingleContextWindowManager::animationStopped() } -void QQuickRenderThreadSingleContextWindowManager::paint(QQuickCanvas *canvas) +void QQuickRenderThreadSingleContextWindowManager::exposureChanged(QQuickCanvas *canvas) { Q_UNUSED(canvas); #ifdef THREAD_DEBUG - printf("GUI: paint called: %p\n", canvas); + printf("GUI: exposure changed: %p\n", canvas); #endif - lockInGui(); - exhaustSyncEvent(); - - isPaintCompleted = false; - while (isRunning() && !isPaintCompleted) { - if (isRenderBlocked) - wake(); - wait(); - } - unlockInGui(); - #ifdef THREAD_DEBUG - printf("GUI: paint done: %p\n", canvas); + printf("GUI: exposure changed done: %p\n", canvas); #endif } @@ -1234,13 +1230,8 @@ void QQuickTrivialWindowManager::renderCanvas(QQuickCanvas *canvas) maybeUpdate(canvas); } -void QQuickTrivialWindowManager::paint(QQuickCanvas *canvas) +void QQuickTrivialWindowManager::exposureChanged(QQuickCanvas *canvas) { - if (!m_windows.contains(canvas)) - return; - - m_windows[canvas].updatePending = true; - renderCanvas(canvas); } QImage QQuickTrivialWindowManager::grab(QQuickCanvas *canvas) |