From: Jørgen Lind Date: Thu, 14 Apr 2011 06:57:36 +0000 (+0200) Subject: Make Qt-Compositor conform to Wayland api changes X-Git-Tag: qt-v5.0.0-alpha1~305^2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c94eaf59753d2c917bb7bd9f4e4b1e1ea52dab60;p=profile%2Fivi%2Fqtwayland.git Make Qt-Compositor conform to Wayland api changes Frame callback needs a surface --- diff --git a/src/qt-compositor/compositor_api/waylandsurface.cpp b/src/qt-compositor/compositor_api/waylandsurface.cpp index 5a37459..9cbbe7b 100644 --- a/src/qt-compositor/compositor_api/waylandsurface.cpp +++ b/src/qt-compositor/compositor_api/waylandsurface.cpp @@ -47,7 +47,7 @@ QImage WaylandSurface::image() const GLuint WaylandSurface::texture() const { Q_D(const WaylandSurface); - return d->surface->textureId(); + return d->surface->texture(); } #else //QT_COMPOSITOR_WAYLAND_GL uint WaylandSurface::texture() const diff --git a/src/qt-compositor/wayland_wrapper/wlcompositor.cpp b/src/qt-compositor/wayland_wrapper/wlcompositor.cpp index 352156a..9fb9ce7 100644 --- a/src/qt-compositor/wayland_wrapper/wlcompositor.cpp +++ b/src/qt-compositor/wayland_wrapper/wlcompositor.cpp @@ -210,7 +210,11 @@ Compositor::~Compositor() void Compositor::frameFinished() { - wl_display_post_frame(m_display->handle(), currentTimeMsecs()); + QSet::iterator i; + for (i = m_dirty_surfaces.begin(); i != m_dirty_surfaces.end(); i++) { + wl_display_post_frame(m_display->handle(), (*i)->base(), currentTimeMsecs()); + } + m_dirty_surfaces.clear(); } void Compositor::createSurface(struct wl_client *client, int id) @@ -284,6 +288,11 @@ void Compositor::surfaceDestroyed(Surface *surface) setPointerFocus(0); } +void Compositor::markSurfaceAsDirty(Wayland::Surface *surface) +{ + m_dirty_surfaces.insert(surface); +} + void Compositor::destroyClientForSurface(Surface *surface) { wl_client *client = surface->base()->client; diff --git a/src/qt-compositor/wayland_wrapper/wlcompositor.h b/src/qt-compositor/wayland_wrapper/wlcompositor.h index 29ad455..b2bf6ac 100644 --- a/src/qt-compositor/wayland_wrapper/wlcompositor.h +++ b/src/qt-compositor/wayland_wrapper/wlcompositor.h @@ -41,6 +41,8 @@ #ifndef WL_COMPOSITOR_H #define WL_COMPOSITOR_H +#include + #include "wloutput.h" #include "wldisplay.h" #include "wlshmbuffer.h" @@ -77,6 +79,7 @@ public: void createSurface(struct wl_client *client, int id); void surfaceDestroyed(Surface *surface); + void markSurfaceAsDirty(Surface *surface); void destroyClientForSurface(Surface *surface); @@ -105,6 +108,7 @@ private: /* shm/*/ ShmHandler m_shm; QList m_surfaces; + QSet m_dirty_surfaces; /* Render state */ uint32_t m_current_frame; diff --git a/src/qt-compositor/wayland_wrapper/wlsurface.cpp b/src/qt-compositor/wayland_wrapper/wlsurface.cpp index b0acccb..689a78d 100644 --- a/src/qt-compositor/wayland_wrapper/wlsurface.cpp +++ b/src/qt-compositor/wayland_wrapper/wlsurface.cpp @@ -174,6 +174,7 @@ WaylandSurface::Type Surface::type() const void Surface::damage(const QRect &rect) { Q_D(Surface); + d->compositor->markSurfaceAsDirty(this); emit d->qtSurface->damaged(rect); } @@ -209,7 +210,7 @@ void Surface::attachHWBuffer(struct wl_buffer *buffer) } } -GLuint Surface::textureId() const +GLuint Surface::texture() const { Q_D(const Surface); return d->texture_id; diff --git a/src/qt-compositor/wayland_wrapper/wlsurface.h b/src/qt-compositor/wayland_wrapper/wlsurface.h index 1d4e590..29cd75e 100644 --- a/src/qt-compositor/wayland_wrapper/wlsurface.h +++ b/src/qt-compositor/wayland_wrapper/wlsurface.h @@ -85,7 +85,7 @@ public: QImage image() const; #ifdef QT_COMPOSITOR_WAYLAND_GL - GLuint textureId() const; + GLuint texture() const; #endif void sendMousePressEvent(int x, int y, Qt::MouseButton button);