diff options
author | Anu Aliyas <anu.aliyas@qt.io> | 2023-05-08 15:28:58 +0200 |
---|---|---|
committer | Anu Aliyas <anu.aliyas@qt.io> | 2023-05-12 15:12:13 +0200 |
commit | 2d2e7bd6f13456acd217eb1b18c6dd6b48cf0c0c (patch) | |
tree | 10b2202d9431bc553698e9147e4feabdf2d911e1 | |
parent | 8bfe1c247dc6aa9a17f682932f38ca6773a3e909 (diff) | |
download | qtwebengine-2d2e7bd6f13456acd217eb1b18c6dd6b48cf0c0c.tar.gz |
Improve rubber-banding in QT WebEngine Pages
- Improved rubber-banding/elastic scroll behavior.
Fixes: QTBUG-67716
Change-Id: Ida0ca19df12f08b78328cf8d8ee5dbd3e492fb16
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
-rw-r--r-- | src/core/web_event_factory.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp index 508a4b557..986c2fe91 100644 --- a/src/core/web_event_factory.cpp +++ b/src/core/web_event_factory.cpp @@ -1562,6 +1562,22 @@ blink::WebMouseWheelEvent::Phase toBlinkPhase(QWheelEvent *ev) return blink::WebMouseWheelEvent::kPhaseNone; } +blink::WebMouseWheelEvent::Phase getMomentumPhase(QWheelEvent *ev) +{ + switch (ev->phase()) { + case Qt::ScrollMomentum: + return blink::WebMouseWheelEvent::kPhaseBegan; + case Qt::ScrollEnd: + return blink::WebMouseWheelEvent::kPhaseEnded; + case Qt::NoScrollPhase: + case Qt::ScrollBegin: + case Qt::ScrollUpdate: + return blink::WebMouseWheelEvent::kPhaseNone; + } + Q_UNREACHABLE(); + return blink::WebMouseWheelEvent::kPhaseNone; +} + blink::WebMouseWheelEvent WebEventFactory::toWebWheelEvent(QWheelEvent *ev) { WebMouseWheelEvent webEvent; @@ -1578,6 +1594,7 @@ blink::WebMouseWheelEvent WebEventFactory::toWebWheelEvent(QWheelEvent *ev) webEvent.phase = toBlinkPhase(ev); #if defined(Q_OS_DARWIN) // PrecisePixel is a macOS term meaning it is a system scroll gesture, see qnsview_mouse.mm + webEvent.momentum_phase = getMomentumPhase(ev); if (ev->source() == Qt::MouseEventSynthesizedBySystem) webEvent.delta_units = ui::ScrollGranularity::kScrollByPrecisePixel; #endif @@ -1596,6 +1613,9 @@ bool WebEventFactory::coalesceWebWheelEvent(blink::WebMouseWheelEvent &webEvent, if (toBlinkPhase(ev) != webEvent.phase) return false; #if defined(Q_OS_DARWIN) + if (getMomentumPhase(ev) != webEvent.momentum_phase) + return false; + if ((webEvent.delta_units == ui::ScrollGranularity::kScrollByPrecisePixel) != (ev->source() == Qt::MouseEventSynthesizedBySystem)) return false; |