Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: ee03689988d70b4813d7e3db8cea577682156027
      
https://github.com/WebKit/WebKit/commit/ee03689988d70b4813d7e3db8cea577682156027
  Author: Simon Fraser <[email protected]>
  Date:   2023-04-18 (Tue, 18 Apr 2023)

  Changed paths:
    A LayoutTests/css3/scroll-snap/resnap-after-layout-expected.txt
    A LayoutTests/css3/scroll-snap/resnap-after-layout.html
    M LayoutTests/platform/gtk/TestExpectations
    M LayoutTests/platform/ios-wk2/TestExpectations
    M LayoutTests/platform/wpe/TestExpectations
    M Source/WebCore/platform/ScrollSnapAnimatorState.cpp
    M Source/WebCore/platform/ScrollSnapAnimatorState.h
    M Source/WebCore/platform/ScrollableArea.cpp

  Log Message:
  -----------
  Scroll snap sometimes jumps back to the wrong place on stevejobsarchive.com
https://bugs.webkit.org/show_bug.cgi?id=255492
rdar://107885376

Reviewed by Wenson Hsieh.

259696@main added some logic that attempts to re-snap after layout when 
multiple boxes were snapped,
adding a `m_currentlySnappedBoxes` member to `ScrollSnapAnimatorState`.

However, `m_currentlySnappedBoxes` was only updated in the `resnapAfterLayout` 
code path, not when
scrolling moved you to a new snap point. That resulted in `resnapAfterLayout` 
sometimes returning
you to a stale location if you'd scrolled to a new snap point since the last 
time
`resnapAfterLayout` was run, especially when hitting the "multiple boxes were 
snapped" clause.

It's troublesome to have both `m_currentlySnappedBoxes` and a `snapTargetID` in 
each SnapOffset (a
future patch will clean this up). But for now, ensure that 
`m_currentlySnappedBoxes` is updated on
each scroll-related snap as well as resnapping after layout.

* LayoutTests/css3/scroll-snap/resnap-after-layout-expected.txt: Added.
* LayoutTests/css3/scroll-snap/resnap-after-layout.html: Added.
* LayoutTests/platform/gtk/TestExpectations:
* LayoutTests/platform/ios-wk2/TestExpectations:
* LayoutTests/platform/wpe/TestExpectations:
* Source/WebCore/platform/ScrollSnapAnimatorState.cpp:
(WebCore::ScrollSnapAnimatorState::setActiveSnapIndexForAxis):
(WebCore::ScrollSnapAnimatorState::updateCurrentlySnappedBoxes):
(WebCore::chooseBoxToResnapTo):
(WebCore::ScrollSnapAnimatorState::resnapAfterLayout):
(WebCore::ScrollSnapAnimatorState::setNearestScrollSnapIndexForAxisAndOffsetInternal):
(WebCore::ScrollSnapAnimatorState::setNearestScrollSnapIndexForOffset):
(WebCore::ScrollSnapAnimatorState::chooseBoxToResnapTo const): Deleted.
(WebCore::ScrollSnapAnimatorState::setNearestScrollSnapIndexForAxisAndOffset): 
Deleted.
* Source/WebCore/platform/ScrollSnapAnimatorState.h: Some functions can be 
private.
(WebCore::ScrollSnapAnimatorState::setActiveSnapIndexForAxisInternal): The 
"internal" implies that it doesn't update m_currentlySnappedBoxes.
(WebCore::ScrollSnapAnimatorState::setActiveSnapIndexForAxis): Deleted.
* Source/WebCore/platform/ScrollableArea.cpp:
(WebCore::ScrollableArea::resnapAfterLayout): Improved logging.
(WebCore::ScrollableArea::doPostThumbMoveSnapping): Improved logging.

Canonical link: https://commits.webkit.org/263097@main


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to