Title: [285893] trunk/Source
Revision
285893
Author
nmouchta...@apple.com
Date
2021-11-16 15:53:48 -0800 (Tue, 16 Nov 2021)

Log Message

Add overscroll behavior to ScrollableAreaParameters
https://bugs.webkit.org/show_bug.cgi?id=233159

Reviewed by Simon Fraser.

Source/WebCore:

Split patch by Cathie Chen and Frederic Wang. This patch lands the addition of
horizontalOverscrollBehavior and verticalOverscrollBehavior to ScrollableAreaParameters
to track value of over scroll behavior for particular scroll node. Patches for synchronous/
asynchronous scrolling on Mac and on iOS to come.

* page/scrolling/AsyncScrollingCoordinator.cpp:
(WebCore::AsyncScrollingCoordinator::setScrollingNodeScrollableAreaGeometry):
* page/scrolling/ScrollingCoordinatorTypes.h:
(WebCore::ScrollableAreaParameters::operator== const):
* page/scrolling/ScrollingTreeScrollingNode.h:
* platform/ScrollableArea.h:
(WebCore::ScrollableArea::horizontalOverscrollBehavior const):
(WebCore::ScrollableArea::verticalOverscrollBehavior const):
* rendering/RenderLayerScrollableArea.cpp:
(WebCore::RenderLayerScrollableArea::horizontalOverscrollBehavior const):
(WebCore::RenderLayerScrollableArea::verticalOverscrollBehavior const):
* rendering/RenderLayerScrollableArea.h:

Source/WebKit:

* Shared/WebCoreArgumentCoders.cpp:
(IPC::ArgumentCoder<ScrollableAreaParameters>::encode):
(IPC::ArgumentCoder<ScrollableAreaParameters>::decode):
* Shared/WebCoreArgumentCoders.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (285892 => 285893)


--- trunk/Source/WebCore/ChangeLog	2021-11-16 22:58:57 UTC (rev 285892)
+++ trunk/Source/WebCore/ChangeLog	2021-11-16 23:53:48 UTC (rev 285893)
@@ -1,3 +1,28 @@
+2021-11-16  Nikolaos Mouchtaris  <nmouchta...@apple.com>
+
+        Add overscroll behavior to ScrollableAreaParameters
+        https://bugs.webkit.org/show_bug.cgi?id=233159
+
+        Reviewed by Simon Fraser.
+
+        Split patch by Cathie Chen and Frederic Wang. This patch lands the addition of 
+        horizontalOverscrollBehavior and verticalOverscrollBehavior to ScrollableAreaParameters
+        to track value of over scroll behavior for particular scroll node. Patches for synchronous/
+        asynchronous scrolling on Mac and on iOS to come.
+
+        * page/scrolling/AsyncScrollingCoordinator.cpp:
+        (WebCore::AsyncScrollingCoordinator::setScrollingNodeScrollableAreaGeometry):
+        * page/scrolling/ScrollingCoordinatorTypes.h:
+        (WebCore::ScrollableAreaParameters::operator== const):
+        * page/scrolling/ScrollingTreeScrollingNode.h:
+        * platform/ScrollableArea.h:
+        (WebCore::ScrollableArea::horizontalOverscrollBehavior const):
+        (WebCore::ScrollableArea::verticalOverscrollBehavior const):
+        * rendering/RenderLayerScrollableArea.cpp:
+        (WebCore::RenderLayerScrollableArea::horizontalOverscrollBehavior const):
+        (WebCore::RenderLayerScrollableArea::verticalOverscrollBehavior const):
+        * rendering/RenderLayerScrollableArea.h:
+
 2021-11-16  Rob Buis  <rb...@igalia.com>
 
         [css-contain] Support contain:paint

Modified: trunk/Source/WebCore/page/FrameView.cpp (285892 => 285893)


--- trunk/Source/WebCore/page/FrameView.cpp	2021-11-16 22:58:57 UTC (rev 285892)
+++ trunk/Source/WebCore/page/FrameView.cpp	2021-11-16 23:53:48 UTC (rev 285893)
@@ -5739,6 +5739,24 @@
         verticalScrollbar()->setSteps(Scrollbar::pixelsPerLineStep(), pageStep);
     }
 }
+
+OverscrollBehavior FrameView::horizontalOverscrollBehavior() const
+{
+    auto* document = frame().document();
+    auto scrollingObject = document && document->documentElement() ? document->documentElement()->renderer() : nullptr;
+    if (scrollingObject && renderView() && renderView()->canBeScrolledAndHasScrollableArea())
+        return scrollingObject->style().overscrollBehaviorX();
+    return OverscrollBehavior::Auto;
+}
+
+OverscrollBehavior FrameView::verticalOverscrollBehavior()  const
+{
+    auto* document = frame().document();
+    auto scrollingObject = document && document->documentElement() ? document->documentElement()->renderer() : nullptr;
+    if (scrollingObject && renderView() && renderView()->canBeScrolledAndHasScrollableArea())
+        return scrollingObject->style().overscrollBehaviorY();
+    return OverscrollBehavior::Auto;
+}
 } // namespace WebCore
 
 #undef PAGE_ID

Modified: trunk/Source/WebCore/page/FrameView.h (285892 => 285893)


--- trunk/Source/WebCore/page/FrameView.h	2021-11-16 22:58:57 UTC (rev 285892)
+++ trunk/Source/WebCore/page/FrameView.h	2021-11-16 23:53:48 UTC (rev 285893)
@@ -699,6 +699,9 @@
 
     // ScrollView
     void updateScrollbarSteps() override;
+    
+    OverscrollBehavior horizontalOverscrollBehavior() const final;
+    OverscrollBehavior verticalOverscrollBehavior() const final;
 
 private:
     explicit FrameView(Frame&);

Modified: trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp (285892 => 285893)


--- trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp	2021-11-16 22:58:57 UTC (rev 285892)
+++ trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp	2021-11-16 23:53:48 UTC (rev 285893)
@@ -792,6 +792,8 @@
     scrollParameters.verticalScrollElasticity = scrollableArea.verticalScrollElasticity();
     scrollParameters.allowsHorizontalScrolling = scrollableArea.allowsHorizontalScrolling();
     scrollParameters.allowsVerticalScrolling = scrollableArea.allowsVerticalScrolling();
+    scrollParameters.horizontalOverscrollBehavior = scrollableArea.horizontalOverscrollBehavior();
+    scrollParameters.verticalOverscrollBehavior = scrollableArea.verticalOverscrollBehavior();
     scrollParameters.horizontalScrollbarMode = scrollableArea.horizontalScrollbarMode();
     scrollParameters.verticalScrollbarMode = scrollableArea.verticalScrollbarMode();
     scrollParameters.horizontalScrollbarHiddenByStyle = scrollableArea.horizontalScrollbarHiddenByStyle();

Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinatorTypes.h (285892 => 285893)


--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinatorTypes.h	2021-11-16 22:58:57 UTC (rev 285892)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinatorTypes.h	2021-11-16 23:53:48 UTC (rev 285893)
@@ -76,6 +76,9 @@
 
     ScrollbarMode horizontalScrollbarMode { ScrollbarMode::Auto };
     ScrollbarMode verticalScrollbarMode { ScrollbarMode::Auto };
+    
+    OverscrollBehavior horizontalOverscrollBehavior { OverscrollBehavior::Auto };
+    OverscrollBehavior verticalOverscrollBehavior { OverscrollBehavior::Auto };
 
     bool allowsHorizontalScrolling { false };
     bool allowsVerticalScrolling { false };
@@ -91,6 +94,8 @@
             && verticalScrollElasticity == other.verticalScrollElasticity
             && horizontalScrollbarMode == other.horizontalScrollbarMode
             && verticalScrollbarMode == other.verticalScrollbarMode
+            && horizontalOverscrollBehavior == other.horizontalOverscrollBehavior
+            && verticalOverscrollBehavior == other.verticalOverscrollBehavior
             && allowsHorizontalScrolling == other.allowsHorizontalScrolling
             && allowsVerticalScrolling == other.allowsVerticalScrolling
             && horizontalScrollbarHiddenByStyle == other.horizontalScrollbarHiddenByStyle

Modified: trunk/Source/WebCore/platform/ScrollableArea.h (285892 => 285893)


--- trunk/Source/WebCore/platform/ScrollableArea.h	2021-11-16 22:58:57 UTC (rev 285892)
+++ trunk/Source/WebCore/platform/ScrollableArea.h	2021-11-16 23:53:48 UTC (rev 285893)
@@ -127,6 +127,9 @@
 
     virtual bool horizontalScrollbarHiddenByStyle() const { return false; }
     virtual bool verticalScrollbarHiddenByStyle() const { return false; }
+    
+    virtual OverscrollBehavior horizontalOverscrollBehavior() const { return OverscrollBehavior::Auto; }
+    virtual OverscrollBehavior verticalOverscrollBehavior() const { return OverscrollBehavior::Auto; }
 
     bool allowsHorizontalScrolling() const;
     bool allowsVerticalScrolling() const;

Modified: trunk/Source/WebCore/rendering/RenderLayerScrollableArea.cpp (285892 => 285893)


--- trunk/Source/WebCore/rendering/RenderLayerScrollableArea.cpp	2021-11-16 22:58:57 UTC (rev 285892)
+++ trunk/Source/WebCore/rendering/RenderLayerScrollableArea.cpp	2021-11-16 23:53:48 UTC (rev 285893)
@@ -947,6 +947,20 @@
     return m_hBar->height();
 }
 
+OverscrollBehavior RenderLayerScrollableArea::horizontalOverscrollBehavior() const
+{
+    if (m_layer.renderBox() && m_layer.renderBox()->canBeScrolledAndHasScrollableArea())
+        return m_layer.renderer().style().overscrollBehaviorX();
+    return OverscrollBehavior::Auto;
+}
+
+OverscrollBehavior RenderLayerScrollableArea::verticalOverscrollBehavior() const
+{
+    if (m_layer.renderBox() && m_layer.renderBox()->canBeScrolledAndHasScrollableArea())
+        return m_layer.renderer().style().overscrollBehaviorY();
+    return OverscrollBehavior::Auto;
+}
+
 bool RenderLayerScrollableArea::hasOverflowControls() const
 {
     return m_hBar || m_vBar || m_scrollCorner || m_layer.renderer().style().resize() != Resize::None;

Modified: trunk/Source/WebCore/rendering/RenderLayerScrollableArea.h (285892 => 285893)


--- trunk/Source/WebCore/rendering/RenderLayerScrollableArea.h	2021-11-16 22:58:57 UTC (rev 285892)
+++ trunk/Source/WebCore/rendering/RenderLayerScrollableArea.h	2021-11-16 23:53:48 UTC (rev 285893)
@@ -103,6 +103,9 @@
     bool hasVerticalScrollbar() const { return verticalScrollbar(); }
     void setHasHorizontalScrollbar(bool);
     void setHasVerticalScrollbar(bool);
+    
+    OverscrollBehavior horizontalOverscrollBehavior() const final;
+    OverscrollBehavior verticalOverscrollBehavior() const final;
 
     bool requiresScrollPositionReconciliation() const { return m_requiresScrollPositionReconciliation; }
     void setRequiresScrollPositionReconciliation(bool requiresReconciliation = true) { m_requiresScrollPositionReconciliation = requiresReconciliation; }

Modified: trunk/Source/WebKit/ChangeLog (285892 => 285893)


--- trunk/Source/WebKit/ChangeLog	2021-11-16 22:58:57 UTC (rev 285892)
+++ trunk/Source/WebKit/ChangeLog	2021-11-16 23:53:48 UTC (rev 285893)
@@ -1,3 +1,15 @@
+2021-11-16  Nikolaos Mouchtaris  <nmouchta...@apple.com>
+
+        Add overscroll behavior to ScrollableAreaParameters
+        https://bugs.webkit.org/show_bug.cgi?id=233159
+
+        Reviewed by Simon Fraser.
+
+        * Shared/WebCoreArgumentCoders.cpp:
+        (IPC::ArgumentCoder<ScrollableAreaParameters>::encode):
+        (IPC::ArgumentCoder<ScrollableAreaParameters>::decode):
+        * Shared/WebCoreArgumentCoders.h:
+
 2021-11-16  Per Arne Vollan  <pvol...@apple.com>
 
         Adjust graphics related message filter

Modified: trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp (285892 => 285893)


--- trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp	2021-11-16 22:58:57 UTC (rev 285892)
+++ trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp	2021-11-16 23:53:48 UTC (rev 285893)
@@ -2021,6 +2021,9 @@
 
     encoder << parameters.horizontalScrollbarMode;
     encoder << parameters.verticalScrollbarMode;
+    
+    encoder << parameters.horizontalOverscrollBehavior;
+    encoder << parameters.verticalOverscrollBehavior;
 
     encoder << parameters.allowsHorizontalScrolling;
     encoder << parameters.allowsVerticalScrolling;
@@ -2042,6 +2045,11 @@
         return false;
     if (!decoder.decode(params.verticalScrollbarMode))
         return false;
+    
+    if (!decoder.decode(params.horizontalOverscrollBehavior))
+        return false;
+    if (!decoder.decode(params.verticalOverscrollBehavior))
+        return false;
 
     if (!decoder.decode(params.allowsHorizontalScrolling))
         return false;

Modified: trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h (285892 => 285893)


--- trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h	2021-11-16 22:58:57 UTC (rev 285892)
+++ trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h	2021-11-16 23:53:48 UTC (rev 285893)
@@ -52,6 +52,7 @@
 #include <WebCore/RealtimeMediaSource.h>
 #include <WebCore/RenderingMode.h>
 #include <WebCore/ScrollSnapOffsetsInfo.h>
+#include <WebCore/ScrollTypes.h>
 #include <WebCore/SerializedPlatformDataCueValue.h>
 #include <WebCore/ServiceWorkerTypes.h>
 #include <WebCore/StoredCredentialsPolicy.h>
@@ -1027,4 +1028,13 @@
     >;
 };
 
+template<> struct EnumTraits<WebCore::OverscrollBehavior> {
+    using values = EnumValues<
+        WebCore::OverscrollBehavior,
+        WebCore::OverscrollBehavior::Auto,
+        WebCore::OverscrollBehavior::Contain,
+        WebCore::OverscrollBehavior::None
+    >;
+};
+
 } // namespace WTF
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to