summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@gmail.com>2018-06-29 11:08:27 +1000
committerLorn Potter <lorn.potter@gmail.com>2018-10-01 23:20:22 +0000
commit989e86074aeb339075c617ac788ec84d441db62f (patch)
tree66cdc3beb1e9fac5b863f50527a9ad163cda6414
parentd2ca87066004c48764cb56e70f5fcdb6681513b1 (diff)
wasm: use config for natural scroll on safari
Change-Id: Idc2ee096144194e3f0d9ca165a578ff9745ef13d Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
-rw-r--r--src/plugins/platforms/wasm/qwasmeventtranslator.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp
index 95bedf701c..cc48c15b64 100644
--- a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp
+++ b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp
@@ -39,15 +39,27 @@
#include <QtCore/qobject.h>
#include <QtCore/qdeadlinetimer.h>
+#include <emscripten/bind.h>
#include <iostream>
QT_BEGIN_NAMESPACE
+using namespace emscripten;
// macOS CTRL <-> META switching. We most likely want to enable
// the existing switching code in QtGui, but for now do it here.
static bool g_usePlatformMacCtrlMetaSwitching = false;
+bool g_useNaturalScrolling = false;
+
+void setNaturalScrolling(bool use) {
+ g_useNaturalScrolling = use;
+}
+
+EMSCRIPTEN_BINDINGS(mouse_module) {
+ function("setNaturalScrolling", &setNaturalScrolling);
+}
+
QWasmEventTranslator::QWasmEventTranslator(QObject *parent)
: QObject(parent)
, draggedWindow(nullptr)
@@ -84,6 +96,20 @@ QWasmEventTranslator::QWasmEventTranslator(QObject *parent)
Platform(EM_ASM_INT("if (navigator.platform.includes(\"Mac\")) return 1; return 0;"));
g_usePlatformMacCtrlMetaSwitching = (platform == MacOSPlatform);
+
+ if (platform == MacOSPlatform) {
+ g_useNaturalScrolling = true; //make this default on macOS
+ EM_ASM(
+ if (window.safari !== undefined) {//this only works on safari
+ Module["canvas"].addEventListener('wheel', mouseWheelEvent);
+ function mouseWheelEvent(e) {
+ if (event.webkitDirectionInvertedFromDevice) {
+ Module.setNaturalScrolling(event.webkitDirectionInvertedFromDevice);
+ }
+ }
+ }
+ );
+ }
}
template <typename Event>
@@ -449,6 +475,9 @@ int QWasmEventTranslator::wheel_cb(int eventType, const EmscriptenWheelEvent *wh
break;
};
+ if (g_useNaturalScrolling) //macOS platform has document oriented scrolling
+ scrollFactor = -scrollFactor;
+
Qt::KeyboardModifiers modifiers = translateMouseEventModifier(&mouseEvent);
auto timestamp = mouseEvent.timestamp;
QPoint globalPoint(mouseEvent.canvasX, mouseEvent.canvasY);