Title: [243701] trunk/Source/WebCore
Revision
243701
Author
[email protected]
Date
2019-04-01 11:33:04 -0700 (Mon, 01 Apr 2019)

Log Message

Plumb through a ScrollType value that indicates whether a scroll was a user or programmatic scroll
https://bugs.webkit.org/show_bug.cgi?id=196424

Reviewed by Zalan Bujtas.

In preparation for fixing webkit.org/b/195584, we need to know if an overflow scroll
is programmatic, so plumb through an enum value. The functions touched by this patch are
only ever called for programmatic scrolls.

* dom/Element.cpp:
(WebCore::Element::scrollTo):
(WebCore::Element::setScrollLeft):
(WebCore::Element::setScrollTop):
* platform/ScrollTypes.h:
* rendering/RenderBox.cpp:
(WebCore::RenderBox::setScrollLeft):
(WebCore::RenderBox::setScrollTop):
* rendering/RenderBox.h:
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::scrollToXPosition):
(WebCore::RenderLayer::scrollToYPosition):
* rendering/RenderLayer.h:
* rendering/RenderListBox.cpp:
(WebCore::RenderListBox::setScrollLeft):
(WebCore::RenderListBox::setScrollTop):
* rendering/RenderListBox.h:
* rendering/RenderTextControlSingleLine.cpp:
(WebCore::RenderTextControlSingleLine::setScrollLeft):
(WebCore::RenderTextControlSingleLine::setScrollTop):
* rendering/RenderTextControlSingleLine.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (243700 => 243701)


--- trunk/Source/WebCore/ChangeLog	2019-04-01 18:25:11 UTC (rev 243700)
+++ trunk/Source/WebCore/ChangeLog	2019-04-01 18:33:04 UTC (rev 243701)
@@ -1,3 +1,36 @@
+2019-04-01  Simon Fraser  <[email protected]>
+
+        Plumb through a ScrollType value that indicates whether a scroll was a user or programmatic scroll
+        https://bugs.webkit.org/show_bug.cgi?id=196424
+
+        Reviewed by Zalan Bujtas.
+
+        In preparation for fixing webkit.org/b/195584, we need to know if an overflow scroll
+        is programmatic, so plumb through an enum value. The functions touched by this patch are
+        only ever called for programmatic scrolls.
+
+        * dom/Element.cpp:
+        (WebCore::Element::scrollTo):
+        (WebCore::Element::setScrollLeft):
+        (WebCore::Element::setScrollTop):
+        * platform/ScrollTypes.h:
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::setScrollLeft):
+        (WebCore::RenderBox::setScrollTop):
+        * rendering/RenderBox.h:
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::scrollToXPosition):
+        (WebCore::RenderLayer::scrollToYPosition):
+        * rendering/RenderLayer.h:
+        * rendering/RenderListBox.cpp:
+        (WebCore::RenderListBox::setScrollLeft):
+        (WebCore::RenderListBox::setScrollTop):
+        * rendering/RenderListBox.h:
+        * rendering/RenderTextControlSingleLine.cpp:
+        (WebCore::RenderTextControlSingleLine::setScrollLeft):
+        (WebCore::RenderTextControlSingleLine::setScrollTop):
+        * rendering/RenderTextControlSingleLine.h:
+
 2019-04-01  Wenson Hsieh  <[email protected]>
 
         [iOS] Refactor some logic for inserting pasted or dropped virtual card files as attachment elements

Modified: trunk/Source/WebCore/dom/Element.cpp (243700 => 243701)


--- trunk/Source/WebCore/dom/Element.cpp	2019-04-01 18:25:11 UTC (rev 243700)
+++ trunk/Source/WebCore/dom/Element.cpp	2019-04-01 18:33:04 UTC (rev 243701)
@@ -822,8 +822,8 @@
         adjustForAbsoluteZoom(renderer->scrollLeft(), *renderer),
         adjustForAbsoluteZoom(renderer->scrollTop(), *renderer)
     );
-    renderer->setScrollLeft(clampToInteger(scrollToOptions.left.value() * renderer->style().effectiveZoom()), clamping);
-    renderer->setScrollTop(clampToInteger(scrollToOptions.top.value() * renderer->style().effectiveZoom()), clamping);
+    renderer->setScrollLeft(clampToInteger(scrollToOptions.left.value() * renderer->style().effectiveZoom()), ScrollType::Programmatic, clamping);
+    renderer->setScrollTop(clampToInteger(scrollToOptions.top.value() * renderer->style().effectiveZoom()), ScrollType::Programmatic, clamping);
 }
 
 void Element::scrollTo(double x, double y)
@@ -1144,7 +1144,7 @@
     }
 
     if (auto* renderer = renderBox()) {
-        renderer->setScrollLeft(static_cast<int>(newLeft * renderer->style().effectiveZoom()));
+        renderer->setScrollLeft(static_cast<int>(newLeft * renderer->style().effectiveZoom()), ScrollType::Programmatic);
         if (auto* scrollableArea = renderer->layer())
             scrollableArea->setScrolledProgrammatically(true);
     }
@@ -1161,7 +1161,7 @@
     }
 
     if (auto* renderer = renderBox()) {
-        renderer->setScrollTop(static_cast<int>(newTop * renderer->style().effectiveZoom()));
+        renderer->setScrollTop(static_cast<int>(newTop * renderer->style().effectiveZoom()), ScrollType::Programmatic);
         if (auto* scrollableArea = renderer->layer())
             scrollableArea->setScrolledProgrammatically(true);
     }

Modified: trunk/Source/WebCore/platform/ScrollTypes.h (243700 => 243701)


--- trunk/Source/WebCore/platform/ScrollTypes.h	2019-04-01 18:25:11 UTC (rev 243700)
+++ trunk/Source/WebCore/platform/ScrollTypes.h	2019-04-01 18:33:04 UTC (rev 243701)
@@ -30,6 +30,11 @@
 
 namespace WebCore {
 
+enum class ScrollType : uint8_t {
+    User,
+    Programmatic
+};
+
 enum ScrollDirection : uint8_t {
     ScrollUp,
     ScrollDown,

Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (243700 => 243701)


--- trunk/Source/WebCore/rendering/RenderBox.cpp	2019-04-01 18:25:11 UTC (rev 243700)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp	2019-04-01 18:33:04 UTC (rev 243701)
@@ -575,20 +575,20 @@
     layer.scrollAnimator().setWheelEventTestTrigger(page.testTrigger());
 }
 
-void RenderBox::setScrollLeft(int newLeft, ScrollClamping clamping)
+void RenderBox::setScrollLeft(int newLeft, ScrollType scrollType, ScrollClamping clamping)
 {
     if (!hasOverflowClip() || !layer())
         return;
     setupWheelEventTestTrigger(*layer());
-    layer()->scrollToXPosition(newLeft, clamping);
+    layer()->scrollToXPosition(newLeft, scrollType, clamping);
 }
 
-void RenderBox::setScrollTop(int newTop, ScrollClamping clamping)
+void RenderBox::setScrollTop(int newTop, ScrollType scrollType, ScrollClamping clamping)
 {
     if (!hasOverflowClip() || !layer())
         return;
     setupWheelEventTestTrigger(*layer());
-    layer()->scrollToYPosition(newTop, clamping);
+    layer()->scrollToYPosition(newTop, scrollType, clamping);
 }
 
 void RenderBox::absoluteRects(Vector<IntRect>& rects, const LayoutPoint& accumulatedOffset) const

Modified: trunk/Source/WebCore/rendering/RenderBox.h (243700 => 243701)


--- trunk/Source/WebCore/rendering/RenderBox.h	2019-04-01 18:25:11 UTC (rev 243700)
+++ trunk/Source/WebCore/rendering/RenderBox.h	2019-04-01 18:33:04 UTC (rev 243701)
@@ -247,8 +247,8 @@
     virtual int scrollTop() const;
     virtual int scrollWidth() const;
     virtual int scrollHeight() const;
-    virtual void setScrollLeft(int, ScrollClamping = ScrollClamping::Clamped);
-    virtual void setScrollTop(int, ScrollClamping = ScrollClamping::Clamped);
+    virtual void setScrollLeft(int, ScrollType, ScrollClamping = ScrollClamping::Clamped);
+    virtual void setScrollTop(int, ScrollType, ScrollClamping = ScrollClamping::Clamped);
 
     LayoutUnit marginTop() const override { return m_marginBox.top(); }
     LayoutUnit marginBottom() const override { return m_marginBox.bottom(); }

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (243700 => 243701)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2019-04-01 18:25:11 UTC (rev 243700)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2019-04-01 18:33:04 UTC (rev 243701)
@@ -2321,13 +2321,13 @@
     m_postLayoutScrollPosition = WTF::nullopt;
 }
 
-void RenderLayer::scrollToXPosition(int x, ScrollClamping clamping)
+void RenderLayer::scrollToXPosition(int x, ScrollType, ScrollClamping clamping)
 {
     ScrollPosition position(x, m_scrollPosition.y());
     scrollToOffset(scrollOffsetFromPosition(position), clamping);
 }
 
-void RenderLayer::scrollToYPosition(int y, ScrollClamping clamping)
+void RenderLayer::scrollToYPosition(int y, ScrollType, ScrollClamping clamping)
 {
     ScrollPosition position(m_scrollPosition.x(), y);
     scrollToOffset(scrollOffsetFromPosition(position), clamping);

Modified: trunk/Source/WebCore/rendering/RenderLayer.h (243700 => 243701)


--- trunk/Source/WebCore/rendering/RenderLayer.h	2019-04-01 18:25:11 UTC (rev 243700)
+++ trunk/Source/WebCore/rendering/RenderLayer.h	2019-04-01 18:33:04 UTC (rev 243701)
@@ -414,8 +414,8 @@
     void scrollToXOffset(int x, ScrollClamping clamping = ScrollClamping::Clamped) { scrollToOffset(ScrollOffset(x, scrollOffset().y()), clamping); }
     void scrollToYOffset(int y, ScrollClamping clamping = ScrollClamping::Clamped) { scrollToOffset(ScrollOffset(scrollOffset().x(), y), clamping); }
 
-    void scrollToXPosition(int x, ScrollClamping = ScrollClamping::Clamped);
-    void scrollToYPosition(int y, ScrollClamping = ScrollClamping::Clamped);
+    void scrollToXPosition(int x, ScrollType, ScrollClamping = ScrollClamping::Clamped);
+    void scrollToYPosition(int y, ScrollType, ScrollClamping = ScrollClamping::Clamped);
 
     void setPostLayoutScrollPosition(Optional<ScrollPosition>);
     void applyPostLayoutScrollPositionIfNeeded();

Modified: trunk/Source/WebCore/rendering/RenderListBox.cpp (243700 => 243701)


--- trunk/Source/WebCore/rendering/RenderListBox.cpp	2019-04-01 18:25:11 UTC (rev 243700)
+++ trunk/Source/WebCore/rendering/RenderListBox.cpp	2019-04-01 18:33:04 UTC (rev 243701)
@@ -749,7 +749,7 @@
     return 0;
 }
 
-void RenderListBox::setScrollLeft(int, ScrollClamping)
+void RenderListBox::setScrollLeft(int, ScrollType, ScrollClamping)
 {
 }
 
@@ -766,7 +766,7 @@
     renderer.scrollAnimator().setWheelEventTestTrigger(renderer.page().testTrigger());
 }
 
-void RenderListBox::setScrollTop(int newTop, ScrollClamping)
+void RenderListBox::setScrollTop(int newTop, ScrollType, ScrollClamping)
 {
     // Determine an index and scroll to it.    
     int index = newTop / itemHeight();

Modified: trunk/Source/WebCore/rendering/RenderListBox.h (243700 => 243701)


--- trunk/Source/WebCore/rendering/RenderListBox.h	2019-04-01 18:25:11 UTC (rev 243700)
+++ trunk/Source/WebCore/rendering/RenderListBox.h	2019-04-01 18:33:04 UTC (rev 243701)
@@ -106,8 +106,8 @@
     int scrollTop() const override;
     int scrollWidth() const override;
     int scrollHeight() const override;
-    void setScrollLeft(int, ScrollClamping) override;
-    void setScrollTop(int, ScrollClamping) override;
+    void setScrollLeft(int, ScrollType, ScrollClamping) override;
+    void setScrollTop(int, ScrollType, ScrollClamping) override;
 
     bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) override;
 

Modified: trunk/Source/WebCore/rendering/RenderTextControlSingleLine.cpp (243700 => 243701)


--- trunk/Source/WebCore/rendering/RenderTextControlSingleLine.cpp	2019-04-01 18:25:11 UTC (rev 243700)
+++ trunk/Source/WebCore/rendering/RenderTextControlSingleLine.cpp	2019-04-01 18:33:04 UTC (rev 243701)
@@ -376,13 +376,13 @@
     return RenderBlockFlow::scrollTop();
 }
 
-void RenderTextControlSingleLine::setScrollLeft(int newLeft, ScrollClamping)
+void RenderTextControlSingleLine::setScrollLeft(int newLeft, ScrollType, ScrollClamping)
 {
     if (innerTextElement())
         innerTextElement()->setScrollLeft(newLeft);
 }
 
-void RenderTextControlSingleLine::setScrollTop(int newTop, ScrollClamping)
+void RenderTextControlSingleLine::setScrollTop(int newTop, ScrollType, ScrollClamping)
 {
     if (innerTextElement())
         innerTextElement()->setScrollTop(newTop);

Modified: trunk/Source/WebCore/rendering/RenderTextControlSingleLine.h (243700 => 243701)


--- trunk/Source/WebCore/rendering/RenderTextControlSingleLine.h	2019-04-01 18:25:11 UTC (rev 243700)
+++ trunk/Source/WebCore/rendering/RenderTextControlSingleLine.h	2019-04-01 18:33:04 UTC (rev 243701)
@@ -57,8 +57,8 @@
     int scrollTop() const override;
     int scrollWidth() const override;
     int scrollHeight() const override;
-    void setScrollLeft(int, ScrollClamping) override;
-    void setScrollTop(int, ScrollClamping) override;
+    void setScrollLeft(int, ScrollType, ScrollClamping) override;
+    void setScrollTop(int, ScrollType, ScrollClamping) override;
     bool scroll(ScrollDirection, ScrollGranularity, float multiplier = 1, Element** stopElement = nullptr, RenderBox* startBox = nullptr, const IntPoint& wheelEventAbsolutePoint = IntPoint()) final;
     bool logicalScroll(ScrollLogicalDirection, ScrollGranularity, float multiplier = 1, Element** stopElement = 0) final;
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to