From 3767fc495f3b04fb4b669667d43f0185d9b239d3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Samuel=20R=C3=B8dal?= Date: Fri, 1 Apr 2011 14:07:54 +0200 Subject: [PATCH] Properly handle surface resizes in QML compositor. --- examples/qml-compositor/main.cpp | 9 ++++++++- examples/qml-compositor/qml/QmlCompositor/main.qml | 8 ++++++++ src/qt-compositor/compositor_api/waylandsurfaceitem.cpp | 2 -- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/examples/qml-compositor/main.cpp b/examples/qml-compositor/main.cpp index 6b7985a..c406d58 100644 --- a/examples/qml-compositor/main.cpp +++ b/examples/qml-compositor/main.cpp @@ -69,6 +69,7 @@ public: signals: void windowAdded(QVariant window); void windowDestroyed(QVariant window); + void windowResized(QVariant window); public slots: void destroyWindow(QVariant window) { @@ -80,7 +81,12 @@ private slots: WaylandSurface *surface = qobject_cast(sender()); surface->setGeometry(rect); - if (!m_windowMap.contains(surface)) { + if (m_windowMap.contains(surface)) { + WaylandSurfaceItem *item = m_windowMap.value(surface); + item->setWidth(rect.width()); + item->setHeight(rect.height()); + emit windowResized(QVariant::fromValue(static_cast(item))); + } else { WaylandSurfaceItem *item = new WaylandSurfaceItem(surface, rootObject()); connect(surface, SIGNAL(destroyed(QObject *)), this, SLOT(surfaceDestroyed(QObject *))); emit windowAdded(QVariant::fromValue(static_cast(item))); @@ -122,6 +128,7 @@ int main(int argc, char *argv[]) QObject::connect(&compositor, SIGNAL(windowAdded(QVariant)), compositor.rootObject(), SLOT(windowAdded(QVariant))); QObject::connect(&compositor, SIGNAL(windowDestroyed(QVariant)), compositor.rootObject(), SLOT(windowDestroyed(QVariant))); + QObject::connect(&compositor, SIGNAL(windowResized(QVariant)), compositor.rootObject(), SLOT(windowResized(QVariant))); return app.exec(); diff --git a/examples/qml-compositor/qml/QmlCompositor/main.qml b/examples/qml-compositor/qml/QmlCompositor/main.qml index 8024a6e..b65d712 100644 --- a/examples/qml-compositor/qml/QmlCompositor/main.qml +++ b/examples/qml-compositor/qml/QmlCompositor/main.qml @@ -75,6 +75,14 @@ Item { windowContainer.chrome = windowChrome; } + function windowResized(window) { + var windowContainer = window.parent; + windowContainer.width = window.width; + windowContainer.height = window.height; + + CompositorLogic.relayout(); + } + function windowDestroyed(window) { var windowContainer = window.parent; windowContainer.runDestroyAnimation(); diff --git a/src/qt-compositor/compositor_api/waylandsurfaceitem.cpp b/src/qt-compositor/compositor_api/waylandsurfaceitem.cpp index 90985f1..66927a3 100644 --- a/src/qt-compositor/compositor_api/waylandsurfaceitem.cpp +++ b/src/qt-compositor/compositor_api/waylandsurfaceitem.cpp @@ -167,8 +167,6 @@ void WaylandSurfaceItem::surfaceMapped(const QRect &rect) { setWidth(rect.width()); setHeight(rect.height()); - - update(); } QSGNode *WaylandSurfaceItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) -- 2.7.4