diff options
author | Paul Olav Tvete <paul.tvete@qt.io> | 2017-10-25 14:06:54 +0200 |
---|---|---|
committer | Paul Olav Tvete <paul.tvete@qt.io> | 2017-10-25 14:06:54 +0200 |
commit | 523cf490b4c46916c6f5253c666a492f5cce2aad (patch) | |
tree | b4514f338b143ab430fe2b91ec7699cb176a147e /examples/wayland/custom-extension/compositor | |
parent | 8e3c71b2d1ec37222bf1648aa23eb033062b4ea6 (diff) | |
parent | f1407493d6d25f24a3c71fbcedc00598baa44b56 (diff) |
Merge remote-tracking branch 'qt/5.9' into 5.10v5.10.0-beta3
Change-Id: I6c283081669594b3e8c6b30194bb96e389319cb2
Diffstat (limited to 'examples/wayland/custom-extension/compositor')
3 files changed, 134 insertions, 0 deletions
diff --git a/examples/wayland/custom-extension/compositor/customextension.cpp b/examples/wayland/custom-extension/compositor/customextension.cpp index 8304e1afe..d9f637a12 100644 --- a/examples/wayland/custom-extension/compositor/customextension.cpp +++ b/examples/wayland/custom-extension/compositor/customextension.cpp @@ -123,3 +123,39 @@ void CustomExtension::example_extension_register_surface(QtWaylandServer::qt_exa qDebug() << "server received new surface" << surface; emit surfaceAdded(surface); } + + +void CustomExtension::example_extension_create_local_object(Resource *resource, uint32_t id, const QString &color, const QString &text) +{ + auto *obj = new CustomExtensionObject(color, text, resource->client(), id, 1); + qDebug() << "Object created" << text << color; + emit customObjectCreated(obj); +} + +CustomExtensionObject::CustomExtensionObject(const QString &color, const QString &text, wl_client *client, int id, int version) + : QtWaylandServer::qt_example_local_object(client, id, version) + , m_color(color) + , m_text(text) +{ + +} + +void CustomExtensionObject::sendClicked() +{ + send_clicked(); +} + +void CustomExtensionObject::example_local_object_destroy_resource(QtWaylandServer::qt_example_local_object::Resource *resource) +{ + Q_UNUSED(resource); + qDebug() << "Object destroyed" << m_text << m_color; + emit resourceDestroyed(); +} + + +void CustomExtensionObject::example_local_object_set_text(QtWaylandServer::qt_example_local_object::Resource *resource, const QString &text) +{ + Q_UNUSED(resource); + qDebug() << "Client changed text from" << m_text << "to" << text; + setText(text); +} diff --git a/examples/wayland/custom-extension/compositor/customextension.h b/examples/wayland/custom-extension/compositor/customextension.h index b8f05b17c..de7df6acb 100644 --- a/examples/wayland/custom-extension/compositor/customextension.h +++ b/examples/wayland/custom-extension/compositor/customextension.h @@ -58,6 +58,8 @@ #include <QtWaylandCompositor/QWaylandCompositor> #include "qwayland-server-custom.h" +class CustomExtensionObject; + class CustomExtension : public QWaylandCompositorExtensionTemplate<CustomExtension> , public QtWaylandServer::qt_example_extension { @@ -71,6 +73,8 @@ signals: void bounce(QWaylandSurface *surface, uint ms); void spin(QWaylandSurface *surface, uint ms); + void customObjectCreated(CustomExtensionObject *obj); + public slots: void setFontSize(QWaylandSurface *surface, uint pixelSize); void showDecorations(QWaylandClient *client, bool); @@ -80,6 +84,63 @@ protected: void example_extension_bounce(Resource *resource, wl_resource *surface, uint32_t duration) override; void example_extension_spin(Resource *resource, wl_resource *surface, uint32_t duration) override; void example_extension_register_surface(Resource *resource, wl_resource *surface) override; + + void example_extension_create_local_object(Resource *resource, uint32_t id, const QString &color, const QString &text) override; +}; + + +class CustomExtensionObject : public QWaylandCompositorExtensionTemplate<CustomExtensionObject> + , public QtWaylandServer::qt_example_local_object +{ + Q_OBJECT + Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged) + Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged) +public: + CustomExtensionObject(const QString &color, const QString &text, struct ::wl_client *client, int id, int version); + + QString color() const + { + return m_color; + } + + QString text() const + { + return m_text; + } + +public slots: + void setColor(const QString &color) + { + if (m_color == color) + return; + + m_color = color; + emit colorChanged(m_color); + } + + void setText(QString text) + { + if (m_text == text) + return; + + m_text = text; + emit textChanged(m_text); + } + void sendClicked(); + +signals: + void colorChanged(const QString &color); + void resourceDestroyed(); + + void textChanged(QString text); + +protected: + void example_local_object_destroy_resource(Resource *resource) override; + void example_local_object_set_text(Resource *resource, const QString &text) override; + +private: + QString m_color; + QString m_text; }; Q_COMPOSITOR_DECLARE_QUICK_EXTENSION_CLASS(CustomExtension) diff --git a/examples/wayland/custom-extension/compositor/qml/main.qml b/examples/wayland/custom-extension/compositor/qml/main.qml index 6739a5c9c..a7d762276 100644 --- a/examples/wayland/custom-extension/compositor/qml/main.qml +++ b/examples/wayland/custom-extension/compositor/qml/main.qml @@ -139,6 +139,40 @@ WaylandCompositor { } } + + Component { + id: customObjectComponent + Rectangle { + id: customItem + property QtObject obj + property alias text: label.text + + width: 100 + height: 100 + radius: width/2 + x: Math.random() * (defaultOutput.surfaceArea.width - 100) + y: Math.random() * (defaultOutput.surfaceArea.height - 100) + + Text { + id: label + anchors.centerIn: parent + text: "?" + } + + MouseArea { + anchors.fill: parent + onClicked: obj.sendClicked() + } + + Connections { + target: obj + onResourceDestroyed: { + customItem.destroy() + } + } + } + } + WlShell { id: defaultShell onWlShellSurfaceCreated: { @@ -168,6 +202,9 @@ WaylandCompositor { var item = itemForSurface(surface) item.doSpin(ms) } + onCustomObjectCreated: { + var item = customObjectComponent.createObject(defaultOutput.surfaceArea, { "color": obj.color, "text": obj.text, "obj": obj } ); + } } function setDecorations(shown) { |