Commit 97a82c97 authored by Vlad Zahorodnii's avatar Vlad Zahorodnii
Browse files

effects: Fix QQuickItem::mapToGlobal() in qtquick effects on wayland

On Wayland, we create a dummy window to fix HiDPI issues. At the moment,
the QQuickRenderControl::renderWindow() returns a fixed offset 0,0.

As it turns out, QQuickItem::mapToGlobal() will poke the
QQuickRenderControl::renderWindow() function to map the specified point
to the global coordinate space.

Since the renderWindow() function returns hardcoded offset, the
mapToGlobal() function is sort of broken in fullscreen effects.

In order to fix mapToGlobal() on Wayland, this change makes the
EffectQuickRenderControl return the position of the associated
parent f86f159f
Pipeline #181548 passed with stage
in 26 minutes and 27 seconds
......@@ -40,8 +40,9 @@ class EffectQuickRenderControl : public QQuickRenderControl
explicit EffectQuickRenderControl(QWindow *renderWindow, QObject *parent = nullptr)
: QQuickRenderControl(parent)
explicit EffectQuickRenderControl(OffscreenQuickView *view, QWindow *renderWindow)
: QQuickRenderControl(view)
, m_view(view)
, m_renderWindow(renderWindow)
......@@ -49,12 +50,17 @@ public:
QWindow *renderWindow(QPoint *offset) override
if (offset) {
*offset = QPoint(0, 0);
if (m_renderWindow) {
*offset = m_renderWindow->mapFromGlobal(m_view->geometry().topLeft());
} else {
*offset = QPoint(0, 0);
return m_renderWindow;
OffscreenQuickView *m_view;
QPointer<QWindow> m_renderWindow;
......@@ -125,7 +131,7 @@ OffscreenQuickView::OffscreenQuickView(QObject *parent, QWindow *renderWindow, E
: QObject(parent)
, d(new OffscreenQuickView::Private)
d->m_renderControl = new EffectQuickRenderControl(renderWindow, this);
d->m_renderControl = new EffectQuickRenderControl(this, renderWindow);
d->m_view = new QQuickWindow(d->m_renderControl);
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment