summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnu Aliyas <anu.aliyas@qt.io>2023-05-08 15:28:58 +0200
committerAnu Aliyas <anu.aliyas@qt.io>2023-05-12 15:12:13 +0200
commit2d2e7bd6f13456acd217eb1b18c6dd6b48cf0c0c (patch)
tree10b2202d9431bc553698e9147e4feabdf2d911e1
parent8bfe1c247dc6aa9a17f682932f38ca6773a3e909 (diff)
downloadqtwebengine-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.cpp20
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;