Title: [283296] trunk/Source/WebCore
Revision
283296
Author
[email protected]
Date
2021-09-29 19:33:01 -0700 (Wed, 29 Sep 2021)

Log Message

Minor cleanup of some rubber-banding code in ScrollingEffectsController
https://bugs.webkit.org/show_bug.cgi?id=230981

Reviewed by Tim Horton.

As a precursor to unraveling some of the complexity of the rubber-banding code,
tidy up naming and code in ScrollingEffectsController::handleWheelEvent(). No
behavior change.

* platform/PlatformWheelEvent.h:
(WebCore::PlatformWheelEvent::unacceleratedScrollingDelta const):
(WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaX const): Deleted.
(WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaY const): Deleted.
* platform/ScrollingEffectsController.h:
* platform/mac/ScrollingEffectsController.mm:
(WebCore::convertToProminentAxisFavoringVertical):
(WebCore::ScrollingEffectsController::handleWheelEvent):
(WebCore::ScrollingEffectsController::wheelDeltaBiasingTowardsVertical):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (283295 => 283296)


--- trunk/Source/WebCore/ChangeLog	2021-09-30 02:19:59 UTC (rev 283295)
+++ trunk/Source/WebCore/ChangeLog	2021-09-30 02:33:01 UTC (rev 283296)
@@ -1,3 +1,24 @@
+2021-09-29  Simon Fraser  <[email protected]>
+
+        Minor cleanup of some rubber-banding code in ScrollingEffectsController
+        https://bugs.webkit.org/show_bug.cgi?id=230981
+
+        Reviewed by Tim Horton.
+
+        As a precursor to unraveling some of the complexity of the rubber-banding code,
+        tidy up naming and code in ScrollingEffectsController::handleWheelEvent(). No
+        behavior change.
+
+        * platform/PlatformWheelEvent.h:
+        (WebCore::PlatformWheelEvent::unacceleratedScrollingDelta const):
+        (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaX const): Deleted.
+        (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaY const): Deleted.
+        * platform/ScrollingEffectsController.h:
+        * platform/mac/ScrollingEffectsController.mm:
+        (WebCore::convertToProminentAxisFavoringVertical):
+        (WebCore::ScrollingEffectsController::handleWheelEvent):
+        (WebCore::ScrollingEffectsController::wheelDeltaBiasingTowardsVertical):
+
 2021-09-29  Chris Dumez  <[email protected]>
 
         Add support for running service workers on the main thread

Modified: trunk/Source/WebCore/platform/PlatformWheelEvent.h (283295 => 283296)


--- trunk/Source/WebCore/platform/PlatformWheelEvent.h	2021-09-30 02:19:59 UTC (rev 283295)
+++ trunk/Source/WebCore/platform/PlatformWheelEvent.h	2021-09-30 02:33:01 UTC (rev 283296)
@@ -150,8 +150,7 @@
 
 #if PLATFORM(COCOA)
     unsigned scrollCount() const { return m_scrollCount; }
-    float unacceleratedScrollingDeltaX() const { return m_unacceleratedScrollingDeltaX; }
-    float unacceleratedScrollingDeltaY() const { return m_unacceleratedScrollingDeltaY; }
+    FloatSize unacceleratedScrollingDelta() const { return { m_unacceleratedScrollingDeltaX, m_unacceleratedScrollingDeltaY }; }
 #endif
 
 #if ENABLE(ASYNC_SCROLLING)

Modified: trunk/Source/WebCore/platform/ScrollingEffectsController.h (283295 => 283296)


--- trunk/Source/WebCore/platform/ScrollingEffectsController.h	2021-09-30 02:19:59 UTC (rev 283295)
+++ trunk/Source/WebCore/platform/ScrollingEffectsController.h	2021-09-30 02:33:01 UTC (rev 283296)
@@ -234,7 +234,7 @@
 
 #if PLATFORM(MAC)
     WallTime m_lastMomentumScrollTimestamp;
-    FloatSize m_overflowScrollDelta;
+    FloatSize m_unappliedOverscrollDelta;
     FloatSize m_stretchScrollForce;
     FloatSize m_momentumVelocity;
 

Modified: trunk/Source/WebCore/platform/mac/ScrollingEffectsController.mm (283295 => 283296)


--- trunk/Source/WebCore/platform/mac/ScrollingEffectsController.mm	2021-09-30 02:19:59 UTC (rev 283295)
+++ trunk/Source/WebCore/platform/mac/ScrollingEffectsController.mm	2021-09-30 02:33:01 UTC (rev 283296)
@@ -83,6 +83,15 @@
 #endif
 }
 
+
+static FloatSize convertToProminentAxisFavoringVertical(FloatSize delta)
+{
+    if (fabsf(delta.height()) >= fabsf(delta.width()))
+        return { 0, delta.height() };
+
+    return { delta.width(), 0 };
+}
+
 bool ScrollingEffectsController::handleWheelEvent(const PlatformWheelEvent& wheelEvent)
 {
     if (processWheelEventForScrollSnap(wheelEvent))
@@ -109,7 +118,7 @@
         IntSize stretchAmount = m_client.stretchAmount();
         m_stretchScrollForce.setWidth(reboundDeltaForElasticDelta(stretchAmount.width()));
         m_stretchScrollForce.setHeight(reboundDeltaForElasticDelta(stretchAmount.height()));
-        m_overflowScrollDelta = { };
+        m_unappliedOverscrollDelta = { };
 
         stopSnapRubberbandAnimation();
         updateRubberBandingState();
@@ -136,42 +145,24 @@
         return false;
     }
 
-    float deltaX = m_overflowScrollDelta.width();
-    float deltaY = m_overflowScrollDelta.height();
+    // Reset unapplied overscroll because we may decide to remove delta at various points and put it into this value.
+    auto delta = std::exchange(m_unappliedOverscrollDelta, { });
 
-    // Reset overflow values because we may decide to remove delta at various points and put it into overflow.
-    m_overflowScrollDelta = { };
-
     IntSize stretchAmount = m_client.stretchAmount();
     bool isVerticallyStretched = stretchAmount.height();
     bool isHorizontallyStretched = stretchAmount.width();
 
-    float eventCoalescedDeltaX;
-    float eventCoalescedDeltaY;
+    auto eventCoalescedDelta = (isVerticallyStretched || isHorizontallyStretched) ? -wheelEvent.unacceleratedScrollingDelta() : -wheelEvent.delta();
+    delta += eventCoalescedDelta;
 
-    if (isVerticallyStretched || isHorizontallyStretched) {
-        eventCoalescedDeltaX = -wheelEvent.unacceleratedScrollingDeltaX();
-        eventCoalescedDeltaY = -wheelEvent.unacceleratedScrollingDeltaY();
-    } else {
-        eventCoalescedDeltaX = -wheelEvent.deltaX();
-        eventCoalescedDeltaY = -wheelEvent.deltaY();
-    }
+    delta = convertToProminentAxisFavoringVertical(delta);
+    float deltaX = delta.width();
+    float deltaY = delta.height();
 
-    deltaX += eventCoalescedDeltaX;
-    deltaY += eventCoalescedDeltaY;
-
-    // Slightly prefer scrolling vertically by applying the = case to deltaY
-    // FIXME: Use wheelDeltaBiasingTowardsVertical().
-    if (fabsf(deltaY) >= fabsf(deltaX))
-        deltaX = 0;
-    else
-        deltaY = 0;
-
     bool shouldStretch = false;
 
-    PlatformWheelEventPhase momentumPhase = wheelEvent.momentumPhase();
+    auto momentumPhase = wheelEvent.momentumPhase();
 
-    // If we are starting momentum scrolling then do some setup.
     if (!m_momentumScrollInProgress && (momentumPhase == PlatformWheelEventPhase::Began || momentumPhase == PlatformWheelEventPhase::Changed))
         m_momentumScrollInProgress = true;
 
@@ -178,12 +169,11 @@
     auto timeDelta = wheelEvent.timestamp() - m_lastMomentumScrollTimestamp;
     if (m_inScrollGesture || m_momentumScrollInProgress) {
         if (m_lastMomentumScrollTimestamp && timeDelta > 0_s && timeDelta < scrollVelocityZeroingTimeout) {
-            m_momentumVelocity.setWidth(eventCoalescedDeltaX / timeDelta.seconds());
-            m_momentumVelocity.setHeight(eventCoalescedDeltaY / timeDelta.seconds());
+            m_momentumVelocity = eventCoalescedDelta / timeDelta.seconds();
             m_lastMomentumScrollTimestamp = wheelEvent.timestamp();
         } else {
             m_lastMomentumScrollTimestamp = wheelEvent.timestamp();
-            m_momentumVelocity = FloatSize();
+            m_momentumVelocity = { };
         }
 
         if (isVerticallyStretched) {
@@ -192,10 +182,10 @@
                 if (deltaY && (fabsf(deltaX / deltaY) < rubberbandDirectionLockStretchRatio))
                     deltaX = 0;
                 else if (fabsf(deltaX) < rubberbandMinimumRequiredDeltaBeforeStretch) {
-                    m_overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);
+                    m_unappliedOverscrollDelta.expand(deltaX, 0);
                     deltaX = 0;
                 } else
-                    m_overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);
+                    m_unappliedOverscrollDelta.expand(deltaX, 0);
             }
         } else if (isHorizontallyStretched) {
             // Stretching only in the horizontal.
@@ -203,10 +193,10 @@
                 if (deltaX && (fabsf(deltaY / deltaX) < rubberbandDirectionLockStretchRatio))
                     deltaY = 0;
                 else if (fabsf(deltaY) < rubberbandMinimumRequiredDeltaBeforeStretch) {
-                    m_overflowScrollDelta.setHeight(m_overflowScrollDelta.height() + deltaY);
+                    m_unappliedOverscrollDelta.expand(0, deltaY);
                     deltaY = 0;
                 } else
-                    m_overflowScrollDelta.setHeight(m_overflowScrollDelta.height() + deltaY);
+                    m_unappliedOverscrollDelta.expand(0, deltaY);
             }
         } else {
             // Not stretching at all yet.
@@ -213,10 +203,10 @@
             if (m_client.isPinnedForScrollDelta(FloatSize(deltaX, deltaY))) {
                 if (fabsf(deltaY) >= fabsf(deltaX)) {
                     if (fabsf(deltaX) < rubberbandMinimumRequiredDeltaBeforeStretch) {
-                        m_overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);
+                        m_unappliedOverscrollDelta.expand(deltaX, 0);
                         deltaX = 0;
                     } else
-                        m_overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);
+                        m_unappliedOverscrollDelta.expand(deltaX, 0);
                 }
 
                 if (!m_client.allowsHorizontalStretching(wheelEvent))
@@ -246,7 +236,7 @@
             if (deltaX) {
                 if (!m_client.allowsHorizontalStretching(wheelEvent)) {
                     deltaX = 0;
-                    eventCoalescedDeltaX = 0;
+                    eventCoalescedDelta.setWidth(0);
                     handled = false;
                 } else if (!isHorizontallyStretched && !m_client.isPinnedForScrollDelta(FloatSize(deltaX, 0))) {
                     deltaX *= scrollWheelMultiplier();
@@ -259,7 +249,7 @@
             if (deltaY) {
                 if (!m_client.allowsVerticalStretching(wheelEvent)) {
                     deltaY = 0;
-                    eventCoalescedDeltaY = 0;
+                    eventCoalescedDelta.setHeight(0);
                     handled = false;
                 } else if (!isVerticallyStretched && !m_client.isPinnedForScrollDelta(FloatSize(0, deltaY))) {
                     deltaY *= scrollWheelMultiplier();
@@ -272,7 +262,7 @@
             IntSize stretchAmount = m_client.stretchAmount();
 
             if (m_momentumScrollInProgress) {
-                if ((m_client.isPinnedForScrollDelta(FloatSize(eventCoalescedDeltaX, eventCoalescedDeltaY)) || (fabsf(eventCoalescedDeltaX) + fabsf(eventCoalescedDeltaY) <= 0)) && m_lastMomentumScrollTimestamp) {
+                if ((m_client.isPinnedForScrollDelta(eventCoalescedDelta) || eventCoalescedDelta.isZero()) && m_lastMomentumScrollTimestamp) {
                     m_ignoreMomentumScrolls = true;
                     m_momentumScrollInProgress = false;
                     snapRubberBand();
@@ -284,7 +274,7 @@
 
             FloatSize dampedDelta(ceilf(elasticDeltaForReboundDelta(m_stretchScrollForce.width())), ceilf(elasticDeltaForReboundDelta(m_stretchScrollForce.height())));
 
-            LOG_WITH_STREAM(ScrollAnimations, stream << "ScrollingEffectsController::handleWheelEvent() - overscrolled by " << m_overflowScrollDelta << " stretchScrollForce " << m_stretchScrollForce << " move delta " << FloatSize(deltaX, deltaY) << " dampedDelta " << dampedDelta);
+            LOG_WITH_STREAM(ScrollAnimations, stream << "ScrollingEffectsController::handleWheelEvent() - stretchScrollForce " << m_stretchScrollForce << " move delta " << FloatSize(deltaX, deltaY) << " dampedDelta " << dampedDelta);
 
             m_client.immediateScrollByWithoutContentEdgeConstraints(dampedDelta - stretchAmount);
         }
@@ -303,15 +293,7 @@
 
 FloatSize ScrollingEffectsController::wheelDeltaBiasingTowardsVertical(const PlatformWheelEvent& wheelEvent)
 {
-    auto deltaX = wheelEvent.deltaX();
-    auto deltaY = wheelEvent.deltaY();
-
-    if (fabsf(deltaY) >= fabsf(deltaX))
-        deltaX = 0;
-    else
-        deltaY = 0;
-
-    return { deltaX, deltaY };
+    return convertToProminentAxisFavoringVertical(wheelEvent.delta());
 }
 
 std::optional<ScrollDirection> ScrollingEffectsController::directionFromEvent(const PlatformWheelEvent& wheelEvent, std::optional<ScrollEventAxis> axis, WheelAxisBias bias)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to