summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wasm/qwasmcompositor.cpp
diff options
context:
space:
mode:
authorMikolaj Boc <mikolaj.boc@qt.io>2022-12-23 12:48:13 +0100
committerMikolaj Boc <mikolaj.boc@qt.io>2023-01-22 23:24:01 +0100
commitc54416a06ce25a97de463803a489762c44926cef (patch)
treebdbe65934d530bdb6a6ef491134b6c57780f6f91 /src/plugins/platforms/wasm/qwasmcompositor.cpp
parent5d356ae2bd57a92fbe041944849627ee511efc5a (diff)
Handle the wheel event in the wasm window
Align the wheel event handling with other events - move the handler to wasm window and create a C++ wrapper class for the js wheel event. Fixes: QTBUG-109622 Change-Id: I915e502de7c0784ec9a6745a90ddcda062e91b2b Reviewed-by: Mikołaj Boc <Mikolaj.Boc@qt.io> Reviewed-by: Lorn Potter <lorn.potter@gmail.com> 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.cpp76
1 files changed, 0 insertions, 76 deletions
diff --git a/src/plugins/platforms/wasm/qwasmcompositor.cpp b/src/plugins/platforms/wasm/qwasmcompositor.cpp
index 0700d66a559..a66c5f5beb1 100644
--- a/src/plugins/platforms/wasm/qwasmcompositor.cpp
+++ b/src/plugins/platforms/wasm/qwasmcompositor.cpp
@@ -29,19 +29,6 @@ using namespace emscripten;
Q_GUI_EXPORT int qt_defaultDpiX();
-bool g_scrollingInvertedFromDevice = false;
-
-static void mouseWheelEvent(emscripten::val event)
-{
- emscripten::val wheelInverted = event["webkitDirectionInvertedFromDevice"];
- if (wheelInverted.as<bool>())
- g_scrollingInvertedFromDevice = true;
-}
-
-EMSCRIPTEN_BINDINGS(qtMouseModule) {
- function("qtMouseWheelEvent", &mouseWheelEvent);
-}
-
QWasmCompositor::QWasmCompositor(QWasmScreen *screen)
: QObject(screen),
m_windowStack(std::bind(&QWasmCompositor::onTopWindowChanged, this)),
@@ -77,8 +64,6 @@ void QWasmCompositor::deregisterEventHandlers()
emscripten_set_keydown_callback(screenElementSelector.constData(), 0, 0, NULL);
emscripten_set_keyup_callback(screenElementSelector.constData(), 0, 0, NULL);
- emscripten_set_wheel_callback(screenElementSelector.constData(), 0, 0, NULL);
-
emscripten_set_touchstart_callback(screenElementSelector.constData(), 0, 0, NULL);
emscripten_set_touchend_callback(screenElementSelector.constData(), 0, 0, NULL);
emscripten_set_touchmove_callback(screenElementSelector.constData(), 0, 0, NULL);
@@ -94,13 +79,6 @@ void QWasmCompositor::destroy()
void QWasmCompositor::initEventHandlers()
{
- if (platform() == Platform::MacOS) {
- if (!emscripten::val::global("window")["safari"].isUndefined()) {
- screen()->element().call<void>("addEventListener", val("wheel"),
- val::module_property("qtMouseWheelEvent"));
- }
- }
-
constexpr EM_BOOL UseCapture = 1;
const QByteArray screenElementSelector = screen()->eventTargetId().toUtf8();
@@ -109,9 +87,6 @@ void QWasmCompositor::initEventHandlers()
emscripten_set_keyup_callback(screenElementSelector.constData(), (void *)this, UseCapture,
&keyboard_cb);
- emscripten_set_wheel_callback(screenElementSelector.constData(), (void *)this, UseCapture,
- &wheel_cb);
-
emscripten_set_touchstart_callback(screenElementSelector.constData(), (void *)this, UseCapture,
&touchCallback);
emscripten_set_touchend_callback(screenElementSelector.constData(), (void *)this, UseCapture,
@@ -314,12 +289,6 @@ int QWasmCompositor::keyboard_cb(int eventType, const EmscriptenKeyboardEvent *k
return static_cast<int>(wasmCompositor->processKeyboard(eventType, keyEvent));
}
-int QWasmCompositor::wheel_cb(int eventType, const EmscriptenWheelEvent *wheelEvent, void *userData)
-{
- QWasmCompositor *compositor = (QWasmCompositor *) userData;
- return static_cast<int>(compositor->processWheel(eventType, wheelEvent));
-}
-
int QWasmCompositor::touchCallback(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData)
{
auto compositor = reinterpret_cast<QWasmCompositor*>(userData);
@@ -354,51 +323,6 @@ bool QWasmCompositor::processKeyboard(int eventType, const EmscriptenKeyboardEve
: result;
}
-bool QWasmCompositor::processWheel(int eventType, const EmscriptenWheelEvent *wheelEvent)
-{
- Q_UNUSED(eventType);
-
- const EmscriptenMouseEvent* mouseEvent = &wheelEvent->mouse;
-
- int scrollFactor = 0;
- switch (wheelEvent->deltaMode) {
- case DOM_DELTA_PIXEL:
- scrollFactor = 1;
- break;
- case DOM_DELTA_LINE:
- scrollFactor = 12;
- break;
- case DOM_DELTA_PAGE:
- scrollFactor = 20;
- break;
- };
-
- scrollFactor = -scrollFactor; // Web scroll deltas are inverted from Qt deltas.
-
- Qt::KeyboardModifiers modifiers = KeyboardModifier::getForEvent(*mouseEvent);
- QPoint targetPointInScreenCoords =
- screen()->mapFromLocal(QPoint(mouseEvent->targetX, mouseEvent->targetY));
-
- QWindow *targetWindow = screen()->compositor()->windowAt(targetPointInScreenCoords, 5);
- if (!targetWindow)
- return 0;
- QPoint pointInTargetWindowCoords = targetWindow->mapFromGlobal(targetPointInScreenCoords);
-
- QPoint pixelDelta;
-
- if (wheelEvent->deltaY != 0) pixelDelta.setY(wheelEvent->deltaY * scrollFactor);
- if (wheelEvent->deltaX != 0) pixelDelta.setX(wheelEvent->deltaX * scrollFactor);
-
- QPoint angleDelta = pixelDelta; // FIXME: convert from pixels?
-
- bool accepted = QWindowSystemInterface::handleWheelEvent(
- targetWindow, QWasmIntegration::getTimestamp(), pointInTargetWindowCoords,
- targetPointInScreenCoords, pixelDelta, angleDelta, modifiers,
- Qt::NoScrollPhase, Qt::MouseEventNotSynthesized,
- g_scrollingInvertedFromDevice);
- return accepted;
-}
-
bool QWasmCompositor::processTouch(int eventType, const EmscriptenTouchEvent *touchEvent)
{
QList<QWindowSystemInterface::TouchPoint> touchPointList;