From 989e86074aeb339075c617ac788ec84d441db62f Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Fri, 29 Jun 2018 11:08:27 +1000 Subject: wasm: use config for natural scroll on safari MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Idc2ee096144194e3f0d9ca165a578ff9745ef13d Reviewed-by: Morten Johan Sørvig --- .../platforms/wasm/qwasmeventtranslator.cpp | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) 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 #include +#include #include 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 @@ -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); -- cgit v1.2.3