Make Qt-Compositor conform to Wayland api changes
authorJørgen Lind <jorgen.lind@nokia.com>
Thu, 14 Apr 2011 06:57:36 +0000 (08:57 +0200)
committerJørgen Lind <jorgen.lind@nokia.com>
Thu, 14 Apr 2011 07:32:41 +0000 (09:32 +0200)
Frame callback needs a surface

src/qt-compositor/compositor_api/waylandsurface.cpp
src/qt-compositor/wayland_wrapper/wlcompositor.cpp
src/qt-compositor/wayland_wrapper/wlcompositor.h
src/qt-compositor/wayland_wrapper/wlsurface.cpp
src/qt-compositor/wayland_wrapper/wlsurface.h

index 5a37459..9cbbe7b 100644 (file)
@@ -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
index 352156a..9fb9ce7 100644 (file)
@@ -210,7 +210,11 @@ Compositor::~Compositor()
 
 void Compositor::frameFinished()
 {
-    wl_display_post_frame(m_display->handle(), currentTimeMsecs());
+    QSet<Surface *>::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;
index 29ad455..b2bf6ac 100644 (file)
@@ -41,6 +41,8 @@
 #ifndef WL_COMPOSITOR_H
 #define WL_COMPOSITOR_H
 
+#include <QtCore/QSet>
+
 #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<Surface *> m_surfaces;
+    QSet<Surface *> m_dirty_surfaces;
 
     /* Render state */
     uint32_t m_current_frame;
index b0acccb..689a78d 100644 (file)
@@ -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;
index 1d4e590..29cd75e 100644 (file)
@@ -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);