From 29bee1f95757c6ae6f86c13e6d47275941d14bcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 2 Jan 2015 15:23:55 +0100 Subject: Add qml plugin for conveniently creating compositors in qml Change-Id: I76229c38489d6c72dfad9eace38cd8b6fd03dcae --- src/imports/compositor/compositor.pro | 12 +++ src/imports/compositor/qmldir | 4 + .../compositor/qwaylandquickcompositorplugin.cpp | 118 +++++++++++++++++++++ src/imports/imports.pro | 3 + src/src.pro | 5 + 5 files changed, 142 insertions(+) create mode 100644 src/imports/compositor/compositor.pro create mode 100644 src/imports/compositor/qmldir create mode 100644 src/imports/compositor/qwaylandquickcompositorplugin.cpp create mode 100644 src/imports/imports.pro diff --git a/src/imports/compositor/compositor.pro b/src/imports/compositor/compositor.pro new file mode 100644 index 000000000..3c6d5b46f --- /dev/null +++ b/src/imports/compositor/compositor.pro @@ -0,0 +1,12 @@ +CXX_MODULE = qml +TARGET = qwaylandcompositorplugin +TARGETPATH = QtWayland/Compositor +IMPORT_VERSION = 1.0 + +SOURCES += \ + qwaylandquickcompositorplugin.cpp + +DEFINES += QT_COMPOSITOR_QUICK +QT += quick-private qml-private compositor compositor-private + +load(qml_plugin) diff --git a/src/imports/compositor/qmldir b/src/imports/compositor/qmldir new file mode 100644 index 000000000..0a9a719e1 --- /dev/null +++ b/src/imports/compositor/qmldir @@ -0,0 +1,4 @@ +module QtWayland.Compositor +plugin qwaylandcompositorplugin +classname QWaylandCompositorPlugin +typeinfo plugins.qmltypes diff --git a/src/imports/compositor/qwaylandquickcompositorplugin.cpp b/src/imports/compositor/qwaylandquickcompositorplugin.cpp new file mode 100644 index 000000000..b6b31fffd --- /dev/null +++ b/src/imports/compositor/qwaylandquickcompositorplugin.cpp @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include + +#include +#include +#include +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +class QWaylandQuickCompositorImpl : public QWaylandQuickCompositor +{ + Q_OBJECT +public: + QWaylandQuickCompositorImpl(QObject *parent = 0) + : QWaylandQuickCompositor(parent) + { + setInitializeLegazyQmlNames(false); + } + +protected: + void classBegin() Q_DECL_OVERRIDE + { + QWaylandQuickCompositor::classBegin(); + } + + void componentComplete() Q_DECL_OVERRIDE + { + create(); + QWaylandQuickCompositor::componentComplete(); + } +}; + +/*! + \qmlmodule QtWayland.Compositor 1.0 + \title Qt Wayland Compositor QML Types + \ingroup qmlmodules + \brief Provides QML types for creating Wayland compositors + + This QML module contains types for creating Wayland compositors. + + To use the types in this module, import the module with the following line: + + \code + import QtWayland.Compositor 1.0 + \endcode +*/ + + + +//![class decl] +class QWaylandCompositorPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface/1.0") +public: + virtual void registerTypes(const char *uri) + { + Q_ASSERT(QLatin1String(uri) == QLatin1String("QtWayland.Compositor")); + Q_UNUSED(uri); + defineModule(); + } + + static void defineModule() + { + const char uri[] = "QtWayland.Compositor"; + qmlRegisterType(uri, 1, 0, "WaylandCompositor"); + qmlRegisterUncreatableType(uri, 1, 0, "WaylandSurfaceItem", QObject::tr("Cannot create instance of WaylandSurfaceItem")); + qmlRegisterUncreatableType(uri, 1, 0, "WaylandQuickSurface", QObject::tr("Cannot create instance of WaylandQuickSurface")); + qmlRegisterUncreatableType(uri, 1, 0, "WaylandClient", QObject::tr("Cannot create instance of WaylandClient")); + qmlRegisterUncreatableType(uri, 1, 0, "WaylandOutput", QObject::tr("Cannot create instance of WaylandOutput")); + } +}; +//![class decl] + +QT_END_NAMESPACE + +#include "qwaylandquickcompositorplugin.moc" diff --git a/src/imports/imports.pro b/src/imports/imports.pro new file mode 100644 index 000000000..42228475c --- /dev/null +++ b/src/imports/imports.pro @@ -0,0 +1,3 @@ +TEMPLATE = subdirs + +SUBDIRS += compositor diff --git a/src/src.pro b/src/src.pro index 332d0dfdb..6dc62e8ef 100644 --- a/src/src.pro +++ b/src/src.pro @@ -10,6 +10,11 @@ contains(CONFIG, wayland-compositor) { sub_compositor.depends = sub-qtwaylandscanner sub_compositor.target = sub-compositor SUBDIRS += sub_compositor + + sub_imports.subdir = imports + sub_imports.depends += sub-client + sub_imports.target = sub-imports + SUBDIRS += sub_imports } sub_client.subdir = client -- cgit v1.2.3