⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 283296 in webkit


Ignore:
Timestamp:
Sep 29, 2021, 7:33:01 PM (5 years ago)
Author:
Simon Fraser
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):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r283295 r283296  
     12021-09-29  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Minor cleanup of some rubber-banding code in ScrollingEffectsController
     4        https://bugs.webkit.org/show_bug.cgi?id=230981
     5
     6        Reviewed by Tim Horton.
     7
     8        As a precursor to unraveling some of the complexity of the rubber-banding code,
     9        tidy up naming and code in ScrollingEffectsController::handleWheelEvent(). No
     10        behavior change.
     11
     12        * platform/PlatformWheelEvent.h:
     13        (WebCore::PlatformWheelEvent::unacceleratedScrollingDelta const):
     14        (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaX const): Deleted.
     15        (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaY const): Deleted.
     16        * platform/ScrollingEffectsController.h:
     17        * platform/mac/ScrollingEffectsController.mm:
     18        (WebCore::convertToProminentAxisFavoringVertical):
     19        (WebCore::ScrollingEffectsController::handleWheelEvent):
     20        (WebCore::ScrollingEffectsController::wheelDeltaBiasingTowardsVertical):
     21
    1222021-09-29  Chris Dumez  <cdumez@apple.com>
    223
  • trunk/Source/WebCore/platform/PlatformWheelEvent.h

    r283068 r283296  
    151151#if PLATFORM(COCOA)
    152152    unsigned scrollCount() const { return m_scrollCount; }
    153     float unacceleratedScrollingDeltaX() const { return m_unacceleratedScrollingDeltaX; }
    154     float unacceleratedScrollingDeltaY() const { return m_unacceleratedScrollingDeltaY; }
     153    FloatSize unacceleratedScrollingDelta() const { return { m_unacceleratedScrollingDeltaX, m_unacceleratedScrollingDeltaY }; }
    155154#endif
    156155
  • trunk/Source/WebCore/platform/ScrollingEffectsController.h

    r283068 r283296  
    235235#if PLATFORM(MAC)
    236236    WallTime m_lastMomentumScrollTimestamp;
    237     FloatSize m_overflowScrollDelta;
     237    FloatSize m_unappliedOverscrollDelta;
    238238    FloatSize m_stretchScrollForce;
    239239    FloatSize m_momentumVelocity;
  • trunk/Source/WebCore/platform/mac/ScrollingEffectsController.mm

    r283072 r283296  
    8484}
    8585
     86
     87static FloatSize convertToProminentAxisFavoringVertical(FloatSize delta)
     88{
     89    if (fabsf(delta.height()) >= fabsf(delta.width()))
     90        return { 0, delta.height() };
     91
     92    return { delta.width(), 0 };
     93}
     94
    8695bool ScrollingEffectsController::handleWheelEvent(const PlatformWheelEvent& wheelEvent)
    8796{
     
    110119        m_stretchScrollForce.setWidth(reboundDeltaForElasticDelta(stretchAmount.width()));
    111120        m_stretchScrollForce.setHeight(reboundDeltaForElasticDelta(stretchAmount.height()));
    112         m_overflowScrollDelta = { };
     121        m_unappliedOverscrollDelta = { };
    113122
    114123        stopSnapRubberbandAnimation();
     
    137146    }
    138147
    139     float deltaX = m_overflowScrollDelta.width();
    140     float deltaY = m_overflowScrollDelta.height();
    141 
    142     // Reset overflow values because we may decide to remove delta at various points and put it into overflow.
    143     m_overflowScrollDelta = { };
     148    // Reset unapplied overscroll because we may decide to remove delta at various points and put it into this value.
     149    auto delta = std::exchange(m_unappliedOverscrollDelta, { });
    144150
    145151    IntSize stretchAmount = m_client.stretchAmount();
     
    147153    bool isHorizontallyStretched = stretchAmount.width();
    148154
    149     float eventCoalescedDeltaX;
    150     float eventCoalescedDeltaY;
    151 
    152     if (isVerticallyStretched || isHorizontallyStretched) {
    153         eventCoalescedDeltaX = -wheelEvent.unacceleratedScrollingDeltaX();
    154         eventCoalescedDeltaY = -wheelEvent.unacceleratedScrollingDeltaY();
    155     } else {
    156         eventCoalescedDeltaX = -wheelEvent.deltaX();
    157         eventCoalescedDeltaY = -wheelEvent.deltaY();
    158     }
    159 
    160     deltaX += eventCoalescedDeltaX;
    161     deltaY += eventCoalescedDeltaY;
    162 
    163     // Slightly prefer scrolling vertically by applying the = case to deltaY
    164     // FIXME: Use wheelDeltaBiasingTowardsVertical().
    165     if (fabsf(deltaY) >= fabsf(deltaX))
    166         deltaX = 0;
    167     else
    168         deltaY = 0;
     155    auto eventCoalescedDelta = (isVerticallyStretched || isHorizontallyStretched) ? -wheelEvent.unacceleratedScrollingDelta() : -wheelEvent.delta();
     156    delta += eventCoalescedDelta;
     157
     158    delta = convertToProminentAxisFavoringVertical(delta);
     159    float deltaX = delta.width();
     160    float deltaY = delta.height();
    169161
    170162    bool shouldStretch = false;
    171163
    172     PlatformWheelEventPhase momentumPhase = wheelEvent.momentumPhase();
    173 
    174     // If we are starting momentum scrolling then do some setup.
     164    auto momentumPhase = wheelEvent.momentumPhase();
     165
    175166    if (!m_momentumScrollInProgress && (momentumPhase == PlatformWheelEventPhase::Began || momentumPhase == PlatformWheelEventPhase::Changed))
    176167        m_momentumScrollInProgress = true;
     
    179170    if (m_inScrollGesture || m_momentumScrollInProgress) {
    180171        if (m_lastMomentumScrollTimestamp && timeDelta > 0_s && timeDelta < scrollVelocityZeroingTimeout) {
    181             m_momentumVelocity.setWidth(eventCoalescedDeltaX / timeDelta.seconds());
    182             m_momentumVelocity.setHeight(eventCoalescedDeltaY / timeDelta.seconds());
     172            m_momentumVelocity = eventCoalescedDelta / timeDelta.seconds();
    183173            m_lastMomentumScrollTimestamp = wheelEvent.timestamp();
    184174        } else {
    185175            m_lastMomentumScrollTimestamp = wheelEvent.timestamp();
    186             m_momentumVelocity = FloatSize();
     176            m_momentumVelocity = { };
    187177        }
    188178
     
    193183                    deltaX = 0;
    194184                else if (fabsf(deltaX) < rubberbandMinimumRequiredDeltaBeforeStretch) {
    195                     m_overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);
     185                    m_unappliedOverscrollDelta.expand(deltaX, 0);
    196186                    deltaX = 0;
    197187                } else
    198                     m_overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);
     188                    m_unappliedOverscrollDelta.expand(deltaX, 0);
    199189            }
    200190        } else if (isHorizontallyStretched) {
     
    204194                    deltaY = 0;
    205195                else if (fabsf(deltaY) < rubberbandMinimumRequiredDeltaBeforeStretch) {
    206                     m_overflowScrollDelta.setHeight(m_overflowScrollDelta.height() + deltaY);
     196                    m_unappliedOverscrollDelta.expand(0, deltaY);
    207197                    deltaY = 0;
    208198                } else
    209                     m_overflowScrollDelta.setHeight(m_overflowScrollDelta.height() + deltaY);
     199                    m_unappliedOverscrollDelta.expand(0, deltaY);
    210200            }
    211201        } else {
     
    214204                if (fabsf(deltaY) >= fabsf(deltaX)) {
    215205                    if (fabsf(deltaX) < rubberbandMinimumRequiredDeltaBeforeStretch) {
    216                         m_overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);
     206                        m_unappliedOverscrollDelta.expand(deltaX, 0);
    217207                        deltaX = 0;
    218208                    } else
    219                         m_overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);
     209                        m_unappliedOverscrollDelta.expand(deltaX, 0);
    220210                }
    221211
     
    247237                if (!m_client.allowsHorizontalStretching(wheelEvent)) {
    248238                    deltaX = 0;
    249                     eventCoalescedDeltaX = 0;
     239                    eventCoalescedDelta.setWidth(0);
    250240                    handled = false;
    251241                } else if (!isHorizontallyStretched && !m_client.isPinnedForScrollDelta(FloatSize(deltaX, 0))) {
     
    260250                if (!m_client.allowsVerticalStretching(wheelEvent)) {
    261251                    deltaY = 0;
    262                     eventCoalescedDeltaY = 0;
     252                    eventCoalescedDelta.setHeight(0);
    263253                    handled = false;
    264254                } else if (!isVerticallyStretched && !m_client.isPinnedForScrollDelta(FloatSize(0, deltaY))) {
     
    273263
    274264            if (m_momentumScrollInProgress) {
    275                 if ((m_client.isPinnedForScrollDelta(FloatSize(eventCoalescedDeltaX, eventCoalescedDeltaY)) || (fabsf(eventCoalescedDeltaX) + fabsf(eventCoalescedDeltaY) <= 0)) && m_lastMomentumScrollTimestamp) {
     265                if ((m_client.isPinnedForScrollDelta(eventCoalescedDelta) || eventCoalescedDelta.isZero()) && m_lastMomentumScrollTimestamp) {
    276266                    m_ignoreMomentumScrolls = true;
    277267                    m_momentumScrollInProgress = false;
     
    285275            FloatSize dampedDelta(ceilf(elasticDeltaForReboundDelta(m_stretchScrollForce.width())), ceilf(elasticDeltaForReboundDelta(m_stretchScrollForce.height())));
    286276
    287             LOG_WITH_STREAM(ScrollAnimations, stream << "ScrollingEffectsController::handleWheelEvent() - overscrolled by " << m_overflowScrollDelta << " stretchScrollForce " << m_stretchScrollForce << " move delta " << FloatSize(deltaX, deltaY) << " dampedDelta " << dampedDelta);
     277            LOG_WITH_STREAM(ScrollAnimations, stream << "ScrollingEffectsController::handleWheelEvent() - stretchScrollForce " << m_stretchScrollForce << " move delta " << FloatSize(deltaX, deltaY) << " dampedDelta " << dampedDelta);
    288278
    289279            m_client.immediateScrollByWithoutContentEdgeConstraints(dampedDelta - stretchAmount);
     
    304294FloatSize ScrollingEffectsController::wheelDeltaBiasingTowardsVertical(const PlatformWheelEvent& wheelEvent)
    305295{
    306     auto deltaX = wheelEvent.deltaX();
    307     auto deltaY = wheelEvent.deltaY();
    308 
    309     if (fabsf(deltaY) >= fabsf(deltaX))
    310         deltaX = 0;
    311     else
    312         deltaY = 0;
    313 
    314     return { deltaX, deltaY };
     296    return convertToProminentAxisFavoringVertical(wheelEvent.delta());
    315297}
    316298
Note: See TracChangeset for help on using the changeset viewer.