summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wasm/qwasmcompositor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmcompositor.cpp')
-rw-r--r--src/plugins/platforms/wasm/qwasmcompositor.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/plugins/platforms/wasm/qwasmcompositor.cpp b/src/plugins/platforms/wasm/qwasmcompositor.cpp
index 8ba67040a5..8af49c5fc3 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;