From f43bb980f9ce38b6ec4514c46102cf08610bf6e5 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 1 Apr 2011 17:10:46 +0200 Subject: [PATCH] Make it possible to create WaylandSurfaceItem from QML Rev-by: Samuel --- .../compositor_api/compositor_api.pri | 2 ++ .../compositor_api/waylandcompositor.cpp | 8 +++++++ .../compositor_api/waylandsurfaceitem.cpp | 25 ++++++++++++++++++++-- .../compositor_api/waylandsurfaceitem.h | 8 +++++++ 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/qt-compositor/compositor_api/compositor_api.pri b/src/qt-compositor/compositor_api/compositor_api.pri index d3378d8..e605c8c 100644 --- a/src/qt-compositor/compositor_api/compositor_api.pri +++ b/src/qt-compositor/compositor_api/compositor_api.pri @@ -11,4 +11,6 @@ SOURCES += \ contains(QT, declarative) { SOURCES += $$PWD/waylandsurfaceitem.cpp HEADERS += $$PWD/waylandsurfaceitem.h + + DEFINES += QT_COMPOSITOR_DECLARATIVE } diff --git a/src/qt-compositor/compositor_api/waylandcompositor.cpp b/src/qt-compositor/compositor_api/waylandcompositor.cpp index 29ec409..cbe49ff 100644 --- a/src/qt-compositor/compositor_api/waylandcompositor.cpp +++ b/src/qt-compositor/compositor_api/waylandcompositor.cpp @@ -43,11 +43,19 @@ #include "wayland_wrapper/wlcompositor.h" #include "wayland_wrapper/wlsurface.h" +#ifdef QT_COMPOSITOR_DECLARATIVE +#include "waylandsurfaceitem.h" +#endif + WaylandCompositor::WaylandCompositor(QWidget *topLevelWidget) : m_compositor(0) , m_toplevel_widget(topLevelWidget) { m_compositor = new Wayland::Compositor(this); +#ifdef QT_COMPOSITOR_DECLARATIVE + qmlRegisterType("WaylandCompositor", 1, 0, "WaylandSurfaceItem"); + qRegisterMetaType("WaylandSurface*"); +#endif } WaylandCompositor::~WaylandCompositor() diff --git a/src/qt-compositor/compositor_api/waylandsurfaceitem.cpp b/src/qt-compositor/compositor_api/waylandsurfaceitem.cpp index 66927a3..6966da2 100644 --- a/src/qt-compositor/compositor_api/waylandsurfaceitem.cpp +++ b/src/qt-compositor/compositor_api/waylandsurfaceitem.cpp @@ -99,11 +99,28 @@ void WaylandSurfaceTextureProvider::surfaceDamaged(const QRect &) emit textureChanged(); } +WaylandSurfaceItem::WaylandSurfaceItem(QSGItem *parent) + : QSGItem(parent) + , m_surface(0) + , m_textureProvider(0) +{ +} + WaylandSurfaceItem::WaylandSurfaceItem(WaylandSurface *surface, QSGItem *parent) : QSGItem(parent) - , m_surface(surface) - , m_textureProvider(new WaylandSurfaceTextureProvider(surface)) + , m_surface(0) + , m_textureProvider(0) +{ + init(surface); +} + +void WaylandSurfaceItem::init(WaylandSurface *surface) { + if (!surface) + return; + m_surface = surface; + m_textureProvider = new WaylandSurfaceTextureProvider(surface); + setWidth(surface->geometry().width()); setHeight(surface->geometry().height()); @@ -119,6 +136,10 @@ WaylandSurfaceItem::~WaylandSurfaceItem() delete m_textureProvider; } +void WaylandSurfaceItem::setSurface(WaylandSurface *surface) +{ + init(surface); +} QSGTextureProvider *WaylandSurfaceItem::textureProvider() const { diff --git a/src/qt-compositor/compositor_api/waylandsurfaceitem.h b/src/qt-compositor/compositor_api/waylandsurfaceitem.h index f335732..aa9b8a4 100644 --- a/src/qt-compositor/compositor_api/waylandsurfaceitem.h +++ b/src/qt-compositor/compositor_api/waylandsurfaceitem.h @@ -46,15 +46,22 @@ class WaylandSurface; class WaylandSurfaceTextureProvider; +Q_DECLARE_METATYPE(WaylandSurface*) class WaylandSurfaceItem : public QSGItem, public QSGTextureProviderInterface { Q_OBJECT Q_INTERFACES(QSGTextureProviderInterface) + Q_PROPERTY(WaylandSurface* surface READ surface WRITE setSurface) + public: + WaylandSurfaceItem(QSGItem *parent = 0); WaylandSurfaceItem(WaylandSurface *surface, QSGItem *parent = 0); ~WaylandSurfaceItem(); + void setSurface(WaylandSurface *surface); + WaylandSurface *surface() const {return m_surface; } + QSGTextureProvider *textureProvider() const; protected: @@ -76,6 +83,7 @@ protected: private: QPoint toSurface(const QPointF &pos) const; + void init(WaylandSurface *); WaylandSurface *m_surface; WaylandSurfaceTextureProvider *m_textureProvider; -- 2.7.4