diff options
| author | Morten Sørvig <morten.sorvig@qt.io> | 2024-11-14 12:07:11 +0100 |
|---|---|---|
| committer | Morten Sørvig <morten.sorvig@qt.io> | 2024-12-04 11:53:39 +0100 |
| commit | 34349c6642b567706b5ab532be7c3ce1d15ecaa6 (patch) | |
| tree | 857261d3767bcd06e77ecdd5bd043bb7004c41d6 /src/plugins/platforms/wasm/qwasmwindowclientarea.cpp | |
| parent | c81f805817c82018e133ca140183f7ecee9d6130 (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.cpp | 31 |
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) |
