diff options
Diffstat (limited to 'src/compositor/compositor_api/qwaylandquickoutput.cpp')
-rw-r--r-- | src/compositor/compositor_api/qwaylandquickoutput.cpp | 97 |
1 files changed, 75 insertions, 22 deletions
diff --git a/src/compositor/compositor_api/qwaylandquickoutput.cpp b/src/compositor/compositor_api/qwaylandquickoutput.cpp index 9199ff84a..8abf6cbb1 100644 --- a/src/compositor/compositor_api/qwaylandquickoutput.cpp +++ b/src/compositor/compositor_api/qwaylandquickoutput.cpp @@ -4,9 +4,9 @@ ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** -** This file is part of the plugins of the Qt Toolkit. +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL21$ +** $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 @@ -17,16 +17,19 @@ ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** 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. ** -** As a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** 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$ ** @@ -37,34 +40,84 @@ QT_BEGIN_NAMESPACE -QWaylandQuickOutput::QWaylandQuickOutput(QWaylandCompositor *compositor, QQuickWindow *window, - const QString &manufacturer, const QString &model) - : QWaylandOutput(compositor, window, manufacturer, model) +QWaylandQuickOutput::QWaylandQuickOutput() + : QWaylandOutput() , m_updateScheduled(false) + , m_automaticFrameCallback(true) +{ +} + +QWaylandQuickOutput::QWaylandQuickOutput(QWaylandCompositor *compositor, QWindow *window) + : QWaylandOutput(compositor, window) + , m_updateScheduled(false) + , m_automaticFrameCallback(true) { - connect(window, &QQuickWindow::beforeSynchronizing, - this, &QWaylandQuickOutput::updateStarted, - Qt::DirectConnection); } -QQuickWindow *QWaylandQuickOutput::quickWindow() const +void QWaylandQuickOutput::initialize() { - return static_cast<QQuickWindow *>(window()); + QWaylandOutput::initialize(); + + QQuickWindow *quickWindow = qobject_cast<QQuickWindow *>(window()); + if (!quickWindow) { + qWarning("Initialization error: Could not locate QQuickWindow on initializing QWaylandQuickOutput %p.\n", this); + return; + } + connect(quickWindow, &QQuickWindow::beforeSynchronizing, + this, &QWaylandQuickOutput::updateStarted, + Qt::DirectConnection); + + connect(quickWindow, &QQuickWindow::beforeRendering, + this, &QWaylandQuickOutput::doFrameCallbacks); } void QWaylandQuickOutput::update() { if (!m_updateScheduled) { - quickWindow()->update(); + //don't qobject_cast since we have verified the type in initialize + static_cast<QQuickWindow *>(window())->update(); m_updateScheduled = true; } } +/*! + * \qmlproperty bool QtWaylandCompositor::WaylandOutput::automaticFrameCallback + * + * This property holds whether the WaylandOutput automatically sends frame + * callbacks when rendering. + * + * The default is true. + */ +bool QWaylandQuickOutput::automaticFrameCallback() const +{ + return m_automaticFrameCallback; +} + +void QWaylandQuickOutput::setAutomaticFrameCallback(bool automatic) +{ + if (m_automaticFrameCallback == automatic) + return; + + m_automaticFrameCallback = automatic; + automaticFrameCallbackChanged(); +} + +/*! + * \internal + */ void QWaylandQuickOutput::updateStarted() { m_updateScheduled = false; - compositor()->frameStarted(); - compositor()->cleanupGraphicsResources(); + + if (!compositor()) + return; + + frameStarted(); } +void QWaylandQuickOutput::doFrameCallbacks() +{ + if (m_automaticFrameCallback) + sendFrameCallbacks(); +} QT_END_NAMESPACE |