diff options
| author | Mikolaj Boc <mikolaj.boc@qt.io> | 2022-09-09 15:47:40 +0200 |
|---|---|---|
| committer | Mikolaj Boc <mikolaj.boc@qt.io> | 2022-09-20 16:34:57 +0200 |
| commit | de560476208d43cf4dbfff45fcd8c6f6847e0631 (patch) | |
| tree | 5bc0be728fabbd778432d68ae2c8e80df8e4bf2b /src/plugins/platforms/wasm/qwasmcompositor.cpp | |
| parent | 4a338aa1804a4d812cf1b9bb20274e480e3c8e9c (diff) | |
Redirect resize from QSizeGrip to system resize in wasm compositor
Using two different resizing techniques (one in QSizeGrip, one in
QWasmCompositor) leads to strange behavior while resizing wasm windows.
Redirect the QSizeGrip's resize to wasm's compositor resize (which might
be considered system resize) to avoid that.
Change-Id: Idfc062643caac3ceee879bfb875d943aade28378
Reviewed-by: David Skoland <david.skoland@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmcompositor.cpp')
| -rw-r--r-- | src/plugins/platforms/wasm/qwasmcompositor.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/plugins/platforms/wasm/qwasmcompositor.cpp b/src/plugins/platforms/wasm/qwasmcompositor.cpp index 8ba67040a5b..8af49c5fc31 100644 --- a/src/plugins/platforms/wasm/qwasmcompositor.cpp +++ b/src/plugins/platforms/wasm/qwasmcompositor.cpp @@ -168,6 +168,11 @@ void QWasmCompositor::setEnabled(bool enabled) m_isEnabled = enabled; } +void QWasmCompositor::startResize(Qt::Edges edges) +{ + m_windowManipulation.startResize(edges); +} + void QWasmCompositor::addWindow(QWasmWindow *window) { m_windowVisibility.insert(window, false); @@ -788,6 +793,11 @@ void QWasmCompositor::WindowManipulation::onPointerDown( void QWasmCompositor::WindowManipulation::onPointerMove( const PointerEvent& event) { + m_systemDragInitData = { + .lastMouseMovePoint = m_screen->clipPoint(event.point), + .lastMousePointerId = event.pointerId, + }; + if (operation() == Operation::None || event.pointerId != m_state->pointerId) return; @@ -822,6 +832,34 @@ void QWasmCompositor::WindowManipulation::onPointerUp(const PointerEvent& event) m_state.reset(); } +void QWasmCompositor::WindowManipulation::startResize(Qt::Edges edges) +{ + Q_ASSERT_X(operation() == Operation::None, Q_FUNC_INFO, + "Resize must not start anew when one is in progress"); + + auto *window = m_screen->compositor()->windowAt(m_systemDragInitData.lastMouseMovePoint); + if (Q_UNLIKELY(!window)) + return; + + m_state.reset(new OperationState{ + .pointerId = m_systemDragInitData.lastMousePointerId, + .window = window, + .operationSpecific = + ResizeState{ + .m_resizeEdges = edges, + .m_originInScreenCoords = m_systemDragInitData.lastMouseMovePoint, + .m_initialWindowBounds = window->geometry(), + .m_minShrink = + QPoint(window->minimumWidth() - window->geometry().width(), + window->minimumHeight() - window->geometry().height()), + .m_maxGrow = + QPoint(window->maximumWidth() - window->geometry().width(), + window->maximumHeight() - window->geometry().height()), + }, + }); + m_screen->canvas().call<void>("setPointerCapture", m_systemDragInitData.lastMousePointerId); +} + bool QWasmCompositor::processKeyboard(int eventType, const EmscriptenKeyboardEvent *emKeyEvent) { constexpr bool ProceedToNativeEvent = false; |
