Title: [274726] trunk
Revision
274726
Author
[email protected]
Date
2021-03-19 10:48:11 -0700 (Fri, 19 Mar 2021)

Log Message

scroll-snap-stop: always not respected during momentum scrolling
https://bugs.webkit.org/show_bug.cgi?id=223406

Patch by Martin Robinson <[email protected]> on 2021-03-19
Reviewed by Simon Fraser.

Source/WebCore:

Test: tiled-drawing/scrolling/scroll-snap/scroll-snap-stop-momentum-scroll.html

* platform/ScrollSnapAnimatorState.cpp:
(WebCore::ScrollSnapAnimatorState::targetOffsetForStartOffset const): Enable directional scroll
snapping when handling momentum scrolling. This turns on scroll-snap-stop as well as a few other
features.

LayoutTests:

* tiled-drawing/scrolling/scroll-snap/scroll-snap-stop-momentum-scroll-expected.txt: Added.
* tiled-drawing/scrolling/scroll-snap/scroll-snap-stop-momentum-scroll.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (274725 => 274726)


--- trunk/LayoutTests/ChangeLog	2021-03-19 17:40:06 UTC (rev 274725)
+++ trunk/LayoutTests/ChangeLog	2021-03-19 17:48:11 UTC (rev 274726)
@@ -1,3 +1,13 @@
+2021-03-19  Martin Robinson  <[email protected]>
+
+        scroll-snap-stop: always not respected during momentum scrolling
+        https://bugs.webkit.org/show_bug.cgi?id=223406
+
+        Reviewed by Simon Fraser.
+
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-stop-momentum-scroll-expected.txt: Added.
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-stop-momentum-scroll.html: Added.
+
 2021-03-19  Sergio Villar Senin  <[email protected]>
 
         [css-flexbox] Another WPT import

Added: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-stop-momentum-scroll-expected.txt (0 => 274726)


--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-stop-momentum-scroll-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-stop-momentum-scroll-expected.txt	2021-03-19 17:48:11 UTC (rev 274726)
@@ -0,0 +1,6 @@
+PASS did not glide past first scroll snap stop.
+PASS did not glide past second scroll snap stop.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-stop-momentum-scroll.html (0 => 274726)


--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-stop-momentum-scroll.html	                        (rev 0)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-stop-momentum-scroll.html	2021-03-19 17:48:11 UTC (rev 274726)
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML>
+<html>
+    <head>
+        <style>
+            html {
+                scroll-snap-type: y mandatory;
+            }
+            .verticalGallery {
+                width: 100vw;
+                height: 600vh;
+                margin: 0;
+                padding: 0;
+            }
+            .colorBox {
+                height: 200px;
+                width: 100vw;
+                float: left;
+                scroll-snap-align: start;
+                scroll-snap-stop: always;
+            }
+            .color0 { background-color: red; }
+            .color1 { background-color: green; }
+            .color2 { background-color: blue; }
+            .color3 { background-color: aqua; }
+            .color4 { background-color: yellow; }
+            .color5 { background-color: fuchsia; }
+        </style>
+        <script src=""
+        <script src=""
+        <script src=""
+        <script>
+        window.jsTestIsAsync = true;
+
+        async function runTests()
+        {
+            try {
+                let scrollMotionsForLargeScrollGlide = [
+                    [-1, -1, 'began', 'none'],
+                    [-1, -1, 'changed', 'none'],
+                    [-1, -1, 'changed', 'none'],
+                    [-1, -1, 'changed', 'none'],
+                    [-1, -1, 'changed', 'none'],
+                    [-1, -1, 'changed', 'none'],
+                    [-1, -1, 'changed', 'none'],
+                    [-1, -1, 'changed', 'none'],
+                    [-1, -1, 'changed', 'none'],
+                    [-1, -1, 'changed', 'none'],
+                    [-1, -1, 'changed', 'none'],
+                    [-1, -1, 'changed', 'none'],
+                    [-1, -1, 'changed', 'none'],
+                    [0, 0, 'ended', 'none'],
+                    [-1, -1, 'none', 'begin'],
+                    [-1, -1, 'none', 'continue'],
+                    [0, 0, 'none', 'end'],
+                ];
+
+                await UIHelper.delayFor(0);
+                await doScrollGlide(document.scrollingElement, VERTICAL);
+                expectTrue(document.scrollingElement.scrollTop == 200, "did not glide past first scroll snap stop.");
+
+                await UIHelper.delayFor(0);
+                await doScrollGlide(document.scrollingElement, VERTICAL);
+                expectTrue(document.scrollingElement.scrollTop == 400, "did not glide past second scroll snap stop.");
+            } catch (e) {
+                console.log(e);
+            } finally {
+                finishJSTest();
+            }
+        }
+
+        function onLoad()
+        {
+            if (window.eventSender) {
+                internals.setPlatformMomentumScrollingPredictionEnabled(false);
+                runTests();
+            } else {
+                var messageLocation = document.getElementById('console');
+                messageLocation.innerHTML = "<p>To run this test manually do a fast vertical momentum scroll. "
+                    + "Scroling should snap to each block, regardless of how fast the scroll is.<p>";
+            }
+        }
+        </script>
+    </head>
+    <body _onload_="onLoad();" class="verticalGallery">
+        <div class="color0 colorBox"><div id="console"></div></div>
+        <div class="color1 colorBox"></div>
+        <div class="color2 colorBox"></div>
+        <div class="color3 colorBox"></div>
+        <div class="color4 colorBox"></div>
+        <div class="color5 colorBox"></div>
+        <div class="color0 colorBox"></div>
+        <div class="color1 colorBox"></div>
+        <div class="color2 colorBox"></div>
+        <div class="color3 colorBox"></div>
+        <div class="color4 colorBox"></div>
+        <div class="color5 colorBox"></div>
+    </body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (274725 => 274726)


--- trunk/Source/WebCore/ChangeLog	2021-03-19 17:40:06 UTC (rev 274725)
+++ trunk/Source/WebCore/ChangeLog	2021-03-19 17:48:11 UTC (rev 274726)
@@ -1,3 +1,17 @@
+2021-03-19  Martin Robinson  <[email protected]>
+
+        scroll-snap-stop: always not respected during momentum scrolling
+        https://bugs.webkit.org/show_bug.cgi?id=223406
+
+        Reviewed by Simon Fraser.
+
+        Test: tiled-drawing/scrolling/scroll-snap/scroll-snap-stop-momentum-scroll.html
+
+        * platform/ScrollSnapAnimatorState.cpp:
+        (WebCore::ScrollSnapAnimatorState::targetOffsetForStartOffset const): Enable directional scroll
+        snapping when handling momentum scrolling. This turns on scroll-snap-stop as well as a few other
+        features.
+
 2021-03-19  Simon Fraser  <[email protected]>
 
         https://bugs.webkit.org/show_bug.cgi?id=223141

Modified: trunk/Source/WebCore/platform/ScrollSnapAnimatorState.cpp (274725 => 274726)


--- trunk/Source/WebCore/platform/ScrollSnapAnimatorState.cpp	2021-03-19 17:40:06 UTC (rev 274725)
+++ trunk/Source/WebCore/platform/ScrollSnapAnimatorState.cpp	2021-03-19 17:48:11 UTC (rev 274726)
@@ -99,7 +99,7 @@
         return clampTo<float>(startOffset, 0, maxScrollOffset);
     }
 
-    float targetOffset = m_snapOffsetsInfo.closestSnapOffset(axis, LayoutUnit(predictedOffset / pageScale), initialDelta).first;
+    float targetOffset = m_snapOffsetsInfo.closestSnapOffset(axis, LayoutUnit(predictedOffset / pageScale), initialDelta, LayoutUnit(startOffset / pageScale)).first;
     float minimumTargetOffset = std::max<float>(0, snapOffsets.first().offset);
     float maximumTargetOffset = std::min<float>(maxScrollOffset, snapOffsets.last().offset);
     targetOffset = clampTo<float>(targetOffset, minimumTargetOffset, maximumTargetOffset);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to