From 6119d12d7d7d63b00891e7fa21a5fab6751fb062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Tue, 6 Sep 2011 16:44:59 +0200 Subject: Fixed tst_QGL::partialGLWidgetUpdates. Change-Id: Ie37051e28b199b5d159f5be05be41efbd17fdf08 Reviewed-on: http://codereview.qt.nokia.com/4273 Reviewed-by: Qt Sanity Bot Reviewed-by: Gunnar Sletta --- src/plugins/platforms/xcb/qxcbintegration.cpp | 33 +++++++++++++++++++++++++-- src/widgets/kernel/qwidgetbackingstore.cpp | 5 +--- tests/auto/qgl/tst_qgl.cpp | 9 ++------ 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index 41650efcdb..3d181dcf0c 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -125,15 +125,43 @@ QPlatformWindow *QXcbIntegration::createPlatformWindow(QWindow *window) const class QEGLXcbPlatformContext : public QEGLPlatformContext { public: - QEGLXcbPlatformContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share, EGLDisplay display) + QEGLXcbPlatformContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share, + EGLDisplay display, QXcbConnection *c) : QEGLPlatformContext(glFormat, share, display) + , m_connection(c) { + Q_XCB_NOOP(m_connection); + } + + void swapBuffers(QPlatformSurface *surface) + { + Q_XCB_NOOP(m_connection); + QEGLPlatformContext::swapBuffers(surface); + Q_XCB_NOOP(m_connection); + } + + bool makeCurrent(QPlatformSurface *surface) + { + Q_XCB_NOOP(m_connection); + bool ret = QEGLPlatformContext::makeCurrent(surface); + Q_XCB_NOOP(m_connection); + return ret; + } + + void doneCurrent() + { + Q_XCB_NOOP(m_connection); + QEGLPlatformContext::doneCurrent(); + Q_XCB_NOOP(m_connection); } EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface) { return static_cast(surface)->eglSurface()->surface(); } + +private: + QXcbConnection *m_connection; }; #endif @@ -143,7 +171,8 @@ QPlatformOpenGLContext *QXcbIntegration::createPlatformOpenGLContext(QOpenGLCont #if defined(XCB_USE_GLX) return new QGLXContext(screen, context->format(), context->shareHandle()); #elif defined(XCB_USE_EGL) - return new QEGLXcbPlatformContext(context->format(), context->shareHandle(), screen->connection()->egl_display()); + return new QEGLXcbPlatformContext(context->format(), context->shareHandle(), + screen->connection()->egl_display(), screen->connection()); #elif defined(XCB_USE_DRI2) return new QDri2Context(context->format(), context->shareHandle()); #endif diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp index 1cb6f51619..d151d5e9e1 100644 --- a/src/widgets/kernel/qwidgetbackingstore.cpp +++ b/src/widgets/kernel/qwidgetbackingstore.cpp @@ -1353,11 +1353,8 @@ void QWidgetPrivate::repaint_sys(const QRegion &rgn) extra->staticContentsSize = data.crect.size(); } -#ifdef Q_WS_QPA //Dont even call q->p - QPaintEngine *engine = 0; -#else QPaintEngine *engine = q->paintEngine(); -#endif + // QGLWidget does not support partial updates if: // 1) The context is double buffered // 2) The context is single buffered and auto-fill background is enabled. diff --git a/tests/auto/qgl/tst_qgl.cpp b/tests/auto/qgl/tst_qgl.cpp index e3a8500bda..e1c3462560 100644 --- a/tests/auto/qgl/tst_qgl.cpp +++ b/tests/auto/qgl/tst_qgl.cpp @@ -919,9 +919,7 @@ void tst_QGL::partialGLWidgetUpdates() widget.setFixedSize(150, 150); widget.setAutoFillBackground(autoFillBackground); widget.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&widget); -#endif + QTest::qWait(200); if (widget.format().doubleBuffer() != doubleBufferedContext) @@ -929,10 +927,7 @@ void tst_QGL::partialGLWidgetUpdates() widget.paintEventRegion = QRegion(); widget.repaint(50, 50, 50, 50); -#ifdef Q_WS_MAC - // repaint() is not immediate on the Mac; it has to go through the event loop. - QTest::qWait(200); -#endif + if (supportsPartialUpdates) QCOMPARE(widget.paintEventRegion, QRegion(50, 50, 50, 50)); else -- cgit v1.2.3