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;