summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/wasm/qwasmcompositor.cpp26
-rw-r--r--src/plugins/platforms/wasm/qwasmevent.cpp5
-rw-r--r--src/plugins/platforms/wasm/qwasmevent.h3
-rw-r--r--src/plugins/platforms/wasm/qwasmscreen.cpp5
-rw-r--r--src/plugins/platforms/wasm/qwasmscreen.h1
-rw-r--r--src/plugins/platforms/wasm/qwasmwindow.cpp4
6 files changed, 29 insertions, 15 deletions
diff --git a/src/plugins/platforms/wasm/qwasmcompositor.cpp b/src/plugins/platforms/wasm/qwasmcompositor.cpp
index b84e05e1c95..0f082543ff4 100644
--- a/src/plugins/platforms/wasm/qwasmcompositor.cpp
+++ b/src/plugins/platforms/wasm/qwasmcompositor.cpp
@@ -369,10 +369,12 @@ bool QWasmCompositor::processPointer(const PointerEvent& event)
if (event.pointerType != PointerType::Mouse)
return false;
- QWindow *const targetWindow = ([this, &event]() -> QWindow * {
+ const auto pointInScreen = screen()->mapFromLocal(event.localPoint);
+
+ QWindow *const targetWindow = ([this, pointInScreen]() -> QWindow * {
auto *targetWindow = m_mouseCaptureWindow != nullptr ? m_mouseCaptureWindow.get()
: m_windowManipulation.operation() == WindowManipulation::Operation::None
- ? screen()->compositor()->windowAt(event.point, 5)
+ ? screen()->compositor()->windowAt(pointInScreen, 5)
: nullptr;
return targetWindow ? targetWindow : m_lastMouseTargetWindow.get();
@@ -381,13 +383,13 @@ bool QWasmCompositor::processPointer(const PointerEvent& event)
return false;
m_lastMouseTargetWindow = targetWindow;
- const QPoint pointInTargetWindowCoords = targetWindow->mapFromGlobal(event.point);
- const bool pointerIsWithinTargetWindowBounds = targetWindow->geometry().contains(event.point);
+ const QPoint pointInTargetWindowCoords = targetWindow->mapFromGlobal(pointInScreen);
+ const bool pointerIsWithinTargetWindowBounds = targetWindow->geometry().contains(pointInScreen);
if (m_mouseInScreen && m_windowUnderMouse != targetWindow
&& pointerIsWithinTargetWindowBounds) {
// delayed mouse enter
- enterWindow(targetWindow, pointInTargetWindowCoords, event.point);
+ enterWindow(targetWindow, pointInTargetWindowCoords, pointInScreen);
m_windowUnderMouse = targetWindow;
}
@@ -439,11 +441,13 @@ bool QWasmCompositor::deliverEventToTarget(const PointerEvent &event, QWindow *e
{
Q_ASSERT(!m_mouseCaptureWindow || m_mouseCaptureWindow.get() == eventTarget);
+ const auto pointInScreen = screen()->mapFromLocal(event.localPoint);
+
const QPoint targetPointClippedToScreen(
std::max(screen()->geometry().left(),
- std::min(screen()->geometry().right(), event.point.x())),
+ std::min(screen()->geometry().right(), pointInScreen.x())),
std::max(screen()->geometry().top(),
- std::min(screen()->geometry().bottom(), event.point.y())));
+ std::min(screen()->geometry().bottom(), pointInScreen.y())));
bool deliveringToPreviouslyClickedWindow = false;
@@ -509,12 +513,13 @@ void QWasmCompositor::WindowManipulation::onPointerDown(
if (isTargetWindowBlocked)
return;
- if (!asWasmWindow(windowAtPoint)->isPointOnTitle(event.point))
+ if (!asWasmWindow(windowAtPoint)->isPointOnTitle(event.pointInViewport))
return;
m_state.reset(new OperationState{ .pointerId = event.pointerId,
.window = windowAtPoint,
- .lastPointInScreenCoords = event.point });
+ .lastPointInScreenCoords =
+ m_screen->mapFromLocal(event.localPoint) });
}
void QWasmCompositor::WindowManipulation::onPointerMove(
@@ -525,7 +530,8 @@ void QWasmCompositor::WindowManipulation::onPointerMove(
switch (operation()) {
case Operation::Move: {
- const QPoint targetPointClippedToScreen = m_screen->clipPoint(event.point);
+ const QPoint targetPointClippedToScreen =
+ m_screen->clipPoint(m_screen->mapFromLocal(event.localPoint));
const QPoint difference = targetPointClippedToScreen - m_state->lastPointInScreenCoords;
m_state->lastPointInScreenCoords = targetPointClippedToScreen;
diff --git a/src/plugins/platforms/wasm/qwasmevent.cpp b/src/plugins/platforms/wasm/qwasmevent.cpp
index 452a22ad5c8..0e43a381bf3 100644
--- a/src/plugins/platforms/wasm/qwasmevent.cpp
+++ b/src/plugins/platforms/wasm/qwasmevent.cpp
@@ -43,8 +43,9 @@ std::optional<PointerEvent> PointerEvent::fromWeb(emscripten::val event)
PointerType::Mouse : PointerType::Other;
ret.mouseButton = MouseEvent::buttonFromWeb(event["button"].as<int>());
ret.mouseButtons = MouseEvent::buttonsFromWeb(event["buttons"].as<unsigned short>());
- ret.point = QPoint(event["offsetX"].as<int>(), event["offsetY"].as<int>());
- ret.pointInViewport = QPoint(event["x"].as<int>(), event["y"].as<int>());
+ ret.localPoint = QPoint(event["offsetX"].as<int>(), event["offsetY"].as<int>());
+ ret.pointInPage = QPoint(event["pageX"].as<int>(), event["pageY"].as<int>());
+ ret.pointInViewport = QPoint(event["clientX"].as<int>(), event["clientY"].as<int>());
ret.pointerId = event["pointerId"].as<int>();
ret.modifiers = KeyboardModifier::getForEvent(event);
diff --git a/src/plugins/platforms/wasm/qwasmevent.h b/src/plugins/platforms/wasm/qwasmevent.h
index 9f43b6a85f1..26b6b5f22aa 100644
--- a/src/plugins/platforms/wasm/qwasmevent.h
+++ b/src/plugins/platforms/wasm/qwasmevent.h
@@ -114,7 +114,8 @@ struct Q_CORE_EXPORT Event
struct Q_CORE_EXPORT MouseEvent : public Event
{
- QPoint point;
+ QPoint localPoint;
+ QPoint pointInPage;
QPoint pointInViewport;
Qt::MouseButton mouseButton;
Qt::MouseButtons mouseButtons;
diff --git a/src/plugins/platforms/wasm/qwasmscreen.cpp b/src/plugins/platforms/wasm/qwasmscreen.cpp
index 0e7d3e10a76..366d4950897 100644
--- a/src/plugins/platforms/wasm/qwasmscreen.cpp
+++ b/src/plugins/platforms/wasm/qwasmscreen.cpp
@@ -223,6 +223,11 @@ QWindow *QWasmScreen::topLevelAt(const QPoint &p) const
return m_compositor->windowAt(p);
}
+QPoint QWasmScreen::mapFromLocal(const QPoint &p) const
+{
+ return geometry().topLeft() + p;
+}
+
QPoint QWasmScreen::clipPoint(const QPoint &p) const
{
return QPoint(
diff --git a/src/plugins/platforms/wasm/qwasmscreen.h b/src/plugins/platforms/wasm/qwasmscreen.h
index fd573059e65..a87fa9156de 100644
--- a/src/plugins/platforms/wasm/qwasmscreen.h
+++ b/src/plugins/platforms/wasm/qwasmscreen.h
@@ -52,6 +52,7 @@ public:
QWindow *topWindow() const;
QWindow *topLevelAt(const QPoint &p) const override;
+ QPoint mapFromLocal(const QPoint &p) const;
QPoint clipPoint(const QPoint &p) const;
void invalidateSize();
diff --git a/src/plugins/platforms/wasm/qwasmwindow.cpp b/src/plugins/platforms/wasm/qwasmwindow.cpp
index c85142882ec..e38335f81c9 100644
--- a/src/plugins/platforms/wasm/qwasmwindow.cpp
+++ b/src/plugins/platforms/wasm/qwasmwindow.cpp
@@ -133,7 +133,7 @@ public:
m_element.call<void>("setPointerCapture", event.pointerId);
m_capturedPointerId = event.pointerId;
- m_resizer->startResize(m_edges, event.pointInViewport);
+ m_resizer->startResize(m_edges, event.pointInPage);
return true;
}
@@ -142,7 +142,7 @@ public:
if (m_capturedPointerId != event.pointerId)
return false;
- m_resizer->continueResize(event.pointInViewport);
+ m_resizer->continueResize(event.pointInPage);
return true;
}