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

Changeset 285893 in webkit


Ignore:
Timestamp:
Nov 16, 2021, 3:53:48 PM (5 years ago)
Author:
Nikos Mouchtaris
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:
Location:
trunk/Source
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r285885 r285893  
     12021-11-16  Nikolaos Mouchtaris  <nmouchtaris@apple.com>
     2
     3        Add overscroll behavior to ScrollableAreaParameters
     4        https://bugs.webkit.org/show_bug.cgi?id=233159
     5
     6        Reviewed by Simon Fraser.
     7
     8        Split patch by Cathie Chen and Frederic Wang. This patch lands the addition of
     9        horizontalOverscrollBehavior and verticalOverscrollBehavior to ScrollableAreaParameters
     10        to track value of over scroll behavior for particular scroll node. Patches for synchronous/
     11        asynchronous scrolling on Mac and on iOS to come.
     12
     13        * page/scrolling/AsyncScrollingCoordinator.cpp:
     14        (WebCore::AsyncScrollingCoordinator::setScrollingNodeScrollableAreaGeometry):
     15        * page/scrolling/ScrollingCoordinatorTypes.h:
     16        (WebCore::ScrollableAreaParameters::operator== const):
     17        * page/scrolling/ScrollingTreeScrollingNode.h:
     18        * platform/ScrollableArea.h:
     19        (WebCore::ScrollableArea::horizontalOverscrollBehavior const):
     20        (WebCore::ScrollableArea::verticalOverscrollBehavior const):
     21        * rendering/RenderLayerScrollableArea.cpp:
     22        (WebCore::RenderLayerScrollableArea::horizontalOverscrollBehavior const):
     23        (WebCore::RenderLayerScrollableArea::verticalOverscrollBehavior const):
     24        * rendering/RenderLayerScrollableArea.h:
     25
    1262021-11-16  Rob Buis  <rbuis@igalia.com>
    227
  • trunk/Source/WebCore/page/FrameView.cpp

    r285885 r285893  
    57405740    }
    57415741}
     5742
     5743OverscrollBehavior FrameView::horizontalOverscrollBehavior() const
     5744{
     5745    auto* document = frame().document();
     5746    auto scrollingObject = document && document->documentElement() ? document->documentElement()->renderer() : nullptr;
     5747    if (scrollingObject && renderView() && renderView()->canBeScrolledAndHasScrollableArea())
     5748        return scrollingObject->style().overscrollBehaviorX();
     5749    return OverscrollBehavior::Auto;
     5750}
     5751
     5752OverscrollBehavior FrameView::verticalOverscrollBehavior()  const
     5753{
     5754    auto* document = frame().document();
     5755    auto scrollingObject = document && document->documentElement() ? document->documentElement()->renderer() : nullptr;
     5756    if (scrollingObject && renderView() && renderView()->canBeScrolledAndHasScrollableArea())
     5757        return scrollingObject->style().overscrollBehaviorY();
     5758    return OverscrollBehavior::Auto;
     5759}
    57425760} // namespace WebCore
    57435761
  • trunk/Source/WebCore/page/FrameView.h

    r285345 r285893  
    700700    // ScrollView
    701701    void updateScrollbarSteps() override;
     702   
     703    OverscrollBehavior horizontalOverscrollBehavior() const final;
     704    OverscrollBehavior verticalOverscrollBehavior() const final;
    702705
    703706private:
  • trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp

    r285526 r285893  
    793793    scrollParameters.allowsHorizontalScrolling = scrollableArea.allowsHorizontalScrolling();
    794794    scrollParameters.allowsVerticalScrolling = scrollableArea.allowsVerticalScrolling();
     795    scrollParameters.horizontalOverscrollBehavior = scrollableArea.horizontalOverscrollBehavior();
     796    scrollParameters.verticalOverscrollBehavior = scrollableArea.verticalOverscrollBehavior();
    795797    scrollParameters.horizontalScrollbarMode = scrollableArea.horizontalScrollbarMode();
    796798    scrollParameters.verticalScrollbarMode = scrollableArea.verticalScrollbarMode();
  • trunk/Source/WebCore/page/scrolling/ScrollingCoordinatorTypes.h

    r285357 r285893  
    7777    ScrollbarMode horizontalScrollbarMode { ScrollbarMode::Auto };
    7878    ScrollbarMode verticalScrollbarMode { ScrollbarMode::Auto };
     79   
     80    OverscrollBehavior horizontalOverscrollBehavior { OverscrollBehavior::Auto };
     81    OverscrollBehavior verticalOverscrollBehavior { OverscrollBehavior::Auto };
    7982
    8083    bool allowsHorizontalScrolling { false };
     
    9295            && horizontalScrollbarMode == other.horizontalScrollbarMode
    9396            && verticalScrollbarMode == other.verticalScrollbarMode
     97            && horizontalOverscrollBehavior == other.horizontalOverscrollBehavior
     98            && verticalOverscrollBehavior == other.verticalOverscrollBehavior
    9499            && allowsHorizontalScrolling == other.allowsHorizontalScrolling
    95100            && allowsVerticalScrolling == other.allowsVerticalScrolling
  • trunk/Source/WebCore/platform/ScrollableArea.h

    r285357 r285893  
    128128    virtual bool horizontalScrollbarHiddenByStyle() const { return false; }
    129129    virtual bool verticalScrollbarHiddenByStyle() const { return false; }
     130   
     131    virtual OverscrollBehavior horizontalOverscrollBehavior() const { return OverscrollBehavior::Auto; }
     132    virtual OverscrollBehavior verticalOverscrollBehavior() const { return OverscrollBehavior::Auto; }
    130133
    131134    bool allowsHorizontalScrolling() const;
  • trunk/Source/WebCore/rendering/RenderLayerScrollableArea.cpp

    r285347 r285893  
    948948}
    949949
     950OverscrollBehavior RenderLayerScrollableArea::horizontalOverscrollBehavior() const
     951{
     952    if (m_layer.renderBox() && m_layer.renderBox()->canBeScrolledAndHasScrollableArea())
     953        return m_layer.renderer().style().overscrollBehaviorX();
     954    return OverscrollBehavior::Auto;
     955}
     956
     957OverscrollBehavior RenderLayerScrollableArea::verticalOverscrollBehavior() const
     958{
     959    if (m_layer.renderBox() && m_layer.renderBox()->canBeScrolledAndHasScrollableArea())
     960        return m_layer.renderer().style().overscrollBehaviorY();
     961    return OverscrollBehavior::Auto;
     962}
     963
    950964bool RenderLayerScrollableArea::hasOverflowControls() const
    951965{
  • trunk/Source/WebCore/rendering/RenderLayerScrollableArea.h

    r285205 r285893  
    104104    void setHasHorizontalScrollbar(bool);
    105105    void setHasVerticalScrollbar(bool);
     106   
     107    OverscrollBehavior horizontalOverscrollBehavior() const final;
     108    OverscrollBehavior verticalOverscrollBehavior() const final;
    106109
    107110    bool requiresScrollPositionReconciliation() const { return m_requiresScrollPositionReconciliation; }
  • trunk/Source/WebKit/ChangeLog

    r285889 r285893  
     12021-11-16  Nikolaos Mouchtaris  <nmouchtaris@apple.com>
     2
     3        Add overscroll behavior to ScrollableAreaParameters
     4        https://bugs.webkit.org/show_bug.cgi?id=233159
     5
     6        Reviewed by Simon Fraser.
     7
     8        * Shared/WebCoreArgumentCoders.cpp:
     9        (IPC::ArgumentCoder<ScrollableAreaParameters>::encode):
     10        (IPC::ArgumentCoder<ScrollableAreaParameters>::decode):
     11        * Shared/WebCoreArgumentCoders.h:
     12
    1132021-11-16  Per Arne Vollan  <pvollan@apple.com>
    214
  • trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp

    r285709 r285893  
    20222022    encoder << parameters.horizontalScrollbarMode;
    20232023    encoder << parameters.verticalScrollbarMode;
     2024   
     2025    encoder << parameters.horizontalOverscrollBehavior;
     2026    encoder << parameters.verticalOverscrollBehavior;
    20242027
    20252028    encoder << parameters.allowsHorizontalScrolling;
     
    20422045        return false;
    20432046    if (!decoder.decode(params.verticalScrollbarMode))
     2047        return false;
     2048   
     2049    if (!decoder.decode(params.horizontalOverscrollBehavior))
     2050        return false;
     2051    if (!decoder.decode(params.verticalOverscrollBehavior))
    20442052        return false;
    20452053
  • trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h

    r284075 r285893  
    5353#include <WebCore/RenderingMode.h>
    5454#include <WebCore/ScrollSnapOffsetsInfo.h>
     55#include <WebCore/ScrollTypes.h>
    5556#include <WebCore/SerializedPlatformDataCueValue.h>
    5657#include <WebCore/ServiceWorkerTypes.h>
     
    10281029};
    10291030
     1031template<> struct EnumTraits<WebCore::OverscrollBehavior> {
     1032    using values = EnumValues<
     1033        WebCore::OverscrollBehavior,
     1034        WebCore::OverscrollBehavior::Auto,
     1035        WebCore::OverscrollBehavior::Contain,
     1036        WebCore::OverscrollBehavior::None
     1037    >;
     1038};
     1039
    10301040} // namespace WTF
Note: See TracChangeset for help on using the changeset viewer.