diff options
author | Jørgen Lind <jorgen.lind@nokia.com> | 2011-03-23 08:04:40 (GMT) |
---|---|---|
committer | Jørgen Lind <jorgen.lind@nokia.com> | 2011-03-23 16:00:22 (GMT) |
commit | 11d327e3d2b90a8f1f68675cf1c93a67e26b273b (patch) | |
tree | 396b990e478edbef8ae4e950bddac8ff35a07431 /src/plugins | |
parent | 9ca3f9c6b6ae50c6b8a19d5e4b26bff15d5421e6 (diff) | |
download | Qt-11d327e3d2b90a8f1f68675cf1c93a67e26b273b.zip Qt-11d327e3d2b90a8f1f68675cf1c93a67e26b273b.tar.gz Qt-11d327e3d2b90a8f1f68675cf1c93a67e26b273b.tar.bz2 |
Lighthouse: Wayland: Move the frame throttling into the platform window
This is only for the shm case
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/platforms/wayland/qwaylandshmsurface.cpp | 19 | ||||
-rw-r--r-- | src/plugins/platforms/wayland/qwaylandshmwindow.cpp | 19 | ||||
-rw-r--r-- | src/plugins/platforms/wayland/qwaylandshmwindow.h | 5 |
3 files changed, 24 insertions, 19 deletions
diff --git a/src/plugins/platforms/wayland/qwaylandshmsurface.cpp b/src/plugins/platforms/wayland/qwaylandshmsurface.cpp index 54da9a1..cc6b2a1 100644 --- a/src/plugins/platforms/wayland/qwaylandshmsurface.cpp +++ b/src/plugins/platforms/wayland/qwaylandshmsurface.cpp @@ -95,7 +95,6 @@ QWaylandShmWindowSurface::QWaylandShmWindowSurface(QWidget *window) : QWindowSurface(window) , mBuffer(0) , mDisplay(QWaylandScreen::waylandScreenFromWidget(window)->display()) - , mWaitingForFrameSync(false) { } @@ -110,30 +109,20 @@ QPaintDevice *QWaylandShmWindowSurface::paintDevice() void QWaylandShmWindowSurface::beginPaint(const QRegion &) { - while (mWaitingForFrameSync) { + QWaylandShmWindow *waylandWindow = static_cast<QWaylandShmWindow *>(window()->platformWindow()); + Q_ASSERT(waylandWindow->windowType() == QWaylandWindow::Shm); + while (waylandWindow->waitingForFrameSync()) { mDisplay->iterate(); } } -void QWaylandShmWindowSurface::frameCallback(void *data, uint32_t time) -{ - QWaylandShmWindowSurface *self = static_cast<QWaylandShmWindowSurface*>(data); - self->mWaitingForFrameSync = false; -} - void QWaylandShmWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) { Q_UNUSED(widget); Q_UNUSED(offset); QWaylandShmWindow *waylandWindow = static_cast<QWaylandShmWindow *>(window()->platformWindow()); Q_ASSERT(waylandWindow->windowType() == QWaylandWindow::Shm); - - QVector<QRect> rects = region.rects(); - for (int i = 0; i < rects.size(); i++) { - waylandWindow->damage(rects.at(i)); - } - mWaitingForFrameSync = true; - mDisplay->frameCallback(QWaylandShmWindowSurface::frameCallback, this); + waylandWindow->damage(region); } void QWaylandShmWindowSurface::resize(const QSize &size) diff --git a/src/plugins/platforms/wayland/qwaylandshmwindow.cpp b/src/plugins/platforms/wayland/qwaylandshmwindow.cpp index cafd2d0..d7c44a4 100644 --- a/src/plugins/platforms/wayland/qwaylandshmwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandshmwindow.cpp @@ -46,6 +46,7 @@ QWaylandShmWindow::QWaylandShmWindow(QWidget *widget) : QWaylandWindow(widget) , mBuffer(0) + , mWaitingForFrameSync(false) { newSurfaceCreated(); } @@ -75,10 +76,16 @@ void QWaylandShmWindow::attach(QWaylandBuffer *buffer) } -void QWaylandShmWindow::damage(const QRect &rect) +void QWaylandShmWindow::damage(const QRegion ®ion) { - wl_surface_damage(mSurface, - rect.x(), rect.y(), rect.width(), rect.height()); + QVector<QRect> rects = region.rects(); + for (int i = 0; i < rects.size(); i++) { + const QRect rect = rects.at(i); + wl_surface_damage(mSurface, + rect.x(), rect.y(), rect.width(), rect.height()); + } + mWaitingForFrameSync = true; + mDisplay->frameCallback(QWaylandShmWindow::frameCallback, this); } void QWaylandShmWindow::newSurfaceCreated() @@ -87,3 +94,9 @@ void QWaylandShmWindow::newSurfaceCreated() wl_surface_attach(mSurface,mBuffer->buffer(),0,0); } } + +void QWaylandShmWindow::frameCallback(void *data, uint32_t time) +{ + QWaylandShmWindow *self = static_cast<QWaylandShmWindow*>(data); + self->mWaitingForFrameSync = false; +} diff --git a/src/plugins/platforms/wayland/qwaylandshmwindow.h b/src/plugins/platforms/wayland/qwaylandshmwindow.h index 14a29d2..669533c 100644 --- a/src/plugins/platforms/wayland/qwaylandshmwindow.h +++ b/src/plugins/platforms/wayland/qwaylandshmwindow.h @@ -53,11 +53,14 @@ public: WindowType windowType() const; QPlatformGLContext *glContext() const; void attach(QWaylandBuffer *buffer); - void damage(const QRect &rect); + void damage(const QRegion ®ion); + bool waitingForFrameSync() const { return mWaitingForFrameSync; } protected: void newSurfaceCreated(); private: + static void frameCallback(void *data, uint32_t time); QWaylandBuffer *mBuffer; + bool mWaitingForFrameSync; }; #endif // QWAYLANDSHMWINDOW_H |