diff options
author | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-09-03 12:40:19 +0200 |
---|---|---|
committer | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-09-04 16:12:47 +0200 |
commit | 4c5a796e96a66c18afbde0577d8b912a618fe710 (patch) | |
tree | e9b3aa53541f67d58dbf1599ae3181ac2cdae2ae /src/compositor/compositor_api/qwaylandquickoutput.cpp | |
parent | a814616ff34bf5901fc299c6ba91c80cad39922d (diff) |
Make it possible to construct QWaylandOutput
This requires QWaylandOutput to be initialized. This will happend when
the QWaylandCompositor of the QWaylandOutputSpace that is set on the
QWaylandOutput is created. QWaylandCompositor will send or post a Polish
event to the QWaylandOutput which again will call
QWaylandOutput::initialize. This function will create the global that
will be put on the wl_displays registry
This makes it possible to Create WaylandOutputs in QML (see the pure-qml
example) and also gives a
better programming model in C++
Change-Id: Iaf907ae18a283678eda6d04390dc9790ae0bced8
Diffstat (limited to 'src/compositor/compositor_api/qwaylandquickoutput.cpp')
-rw-r--r-- | src/compositor/compositor_api/qwaylandquickoutput.cpp | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/src/compositor/compositor_api/qwaylandquickoutput.cpp b/src/compositor/compositor_api/qwaylandquickoutput.cpp index 463901572..a32689225 100644 --- a/src/compositor/compositor_api/qwaylandquickoutput.cpp +++ b/src/compositor/compositor_api/qwaylandquickoutput.cpp @@ -40,28 +40,42 @@ QT_BEGIN_NAMESPACE -QWaylandQuickOutput::QWaylandQuickOutput(QWaylandOutputSpace *outputSpace, QQuickWindow *window) +QWaylandQuickOutput::QWaylandQuickOutput() + : QWaylandOutput() + , m_updateScheduled(false) + , m_automaticFrameCallback(true) +{ +} + +QWaylandQuickOutput::QWaylandQuickOutput(QWaylandOutputSpace *outputSpace, QWindow *window) : QWaylandOutput(outputSpace, window) , m_updateScheduled(false) , m_automaticFrameCallback(true) { - connect(window, &QQuickWindow::beforeSynchronizing, +} + +void QWaylandQuickOutput::initialize() +{ + QWaylandOutput::initialize(); + + QQuickWindow *quickWindow = qobject_cast<QQuickWindow *>(window()); + if (!quickWindow) { + qWarning("Initialization error: Could not locate QQuickWindow on initializing QWaylandQucikOutput %p.\n", this); + return; + } + connect(quickWindow, &QQuickWindow::beforeSynchronizing, this, &QWaylandQuickOutput::updateStarted, Qt::DirectConnection); - connect(window, &QQuickWindow::beforeRendering, + connect(quickWindow, &QQuickWindow::beforeRendering, this, &QWaylandQuickOutput::doFrameCallbacks); } -QQuickWindow *QWaylandQuickOutput::quickWindow() const -{ - return static_cast<QQuickWindow *>(window()); -} - 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; } } @@ -83,6 +97,10 @@ void QWaylandQuickOutput::setAutomaticFrameCallback(bool automatic) void QWaylandQuickOutput::updateStarted() { m_updateScheduled = false; + + if (!compositor()) + return; + frameStarted(); compositor()->cleanupGraphicsResources(); } |