summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wasm/qwasmwindowclientarea.cpp
diff options
context:
space:
mode:
authorMorten Sørvig <morten.sorvig@qt.io>2024-11-14 12:07:11 +0100
committerMorten Sørvig <morten.sorvig@qt.io>2024-12-04 11:53:39 +0100
commit34349c6642b567706b5ab532be7c3ce1d15ecaa6 (patch)
tree857261d3767bcd06e77ecdd5bd043bb7004c41d6 /src/plugins/platforms/wasm/qwasmwindowclientarea.cpp
parentc81f805817c82018e133ca140183f7ecee9d6130 (diff)
wasm: streamline pointer event handling
We know the type of pointer event based on the callback (down, move, up, etc), which means the code which determines the type based on the type string can be removed. This saves one string comparison per event, and also allows removing the runtime error case where we are unable to determine which type of pointer event we have. Remove PointerEvent::fromWeb(), and construct the pointer event directly in the event handler instead. Change-Id: I4fe566bf076dddd5bf39217f1d6671ba07e25912 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmwindowclientarea.cpp')
-rw-r--r--src/plugins/platforms/wasm/qwasmwindowclientarea.cpp31
1 files changed, 15 insertions, 16 deletions
diff --git a/src/plugins/platforms/wasm/qwasmwindowclientarea.cpp b/src/plugins/platforms/wasm/qwasmwindowclientarea.cpp
index 4a8d427e70b..04c3267bb65 100644
--- a/src/plugins/platforms/wasm/qwasmwindowclientarea.cpp
+++ b/src/plugins/platforms/wasm/qwasmwindowclientarea.cpp
@@ -19,19 +19,18 @@ QT_BEGIN_NAMESPACE
ClientArea::ClientArea(QWasmWindow *window, QWasmScreen *screen, emscripten::val element)
: m_screen(screen), m_window(window), m_element(element)
{
- const auto callback = std::function([this](emscripten::val event) {
- processPointer(*PointerEvent::fromWeb(event));
- event.call<void>("preventDefault");
- event.call<void>("stopPropagation");
- });
-
- m_pointerDownCallback =
- std::make_unique<qstdweb::EventCallback>(element, "pointerdown", callback);
- m_pointerMoveCallback =
- std::make_unique<qstdweb::EventCallback>(element, "pointermove", callback);
- m_pointerUpCallback = std::make_unique<qstdweb::EventCallback>(element, "pointerup", callback);
- m_pointerCancelCallback =
- std::make_unique<qstdweb::EventCallback>(element, "pointercancel", callback);
+ m_pointerDownCallback = std::make_unique<qstdweb::EventCallback>(element, "pointerdown",
+ [this](emscripten::val event){ processPointer(PointerEvent(EventType::PointerDown, event)); }
+ );
+ m_pointerMoveCallback = std::make_unique<qstdweb::EventCallback>(element, "pointermove",
+ [this](emscripten::val event){ processPointer(PointerEvent(EventType::PointerMove, event)); }
+ );
+ m_pointerUpCallback = std::make_unique<qstdweb::EventCallback>(element, "pointerup",
+ [this](emscripten::val event){ processPointer(PointerEvent(EventType::PointerUp, event)); }
+ );
+ m_pointerCancelCallback = std::make_unique<qstdweb::EventCallback>(element, "pointercancel",
+ [this](emscripten::val event){ processPointer(PointerEvent(EventType::PointerCancel, event)); }
+ );
element.call<void>("setAttribute", emscripten::val("draggable"), emscripten::val("true"));
@@ -69,9 +68,8 @@ ClientArea::ClientArea(QWasmWindow *window, QWasmScreen *screen, emscripten::val
}
-bool ClientArea::processPointer(const PointerEvent &event)
+void ClientArea::processPointer(const PointerEvent &event)
{
-
switch (event.type) {
case EventType::PointerDown:
m_element.call<void>("setPointerCapture", event.pointerId);
@@ -90,7 +88,8 @@ bool ClientArea::processPointer(const PointerEvent &event)
const bool eventAccepted = deliverEvent(event);
if (!eventAccepted && event.type == EventType::PointerDown)
QGuiApplicationPrivate::instance()->closeAllPopups();
- return eventAccepted;
+ event.webEvent.call<void>("preventDefault");
+ event.webEvent.call<void>("stopPropagation");
}
bool ClientArea::deliverEvent(const PointerEvent &event)