Title: [194466] trunk/Source/WebCore
Revision
194466
Author
simon.fra...@apple.com
Date
2015-12-31 12:07:15 -0800 (Thu, 31 Dec 2015)

Log Message

More scrollOffset/scrollPosition disambiguation, in RenderLayer
https://bugs.webkit.org/show_bug.cgi?id=152617

Reviewed by Zalan Bujtas.

Change RenderLayer's m_scrollOffset to be m_scrollPosition, since it stores
scroll positions (negative in RTL overflow). scrollOffset() was accurately
named already, but fix the return type, and remove the unnecessary scrollXOffset()/
scrollYOffset() variants, fixing callers to use .x() and .y().

scrollToOffset() was also accurately named, but fix its argument.

Fix functions related to saving scroll positions on Element to refer to scroll positions.

No behavior change.

* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::scrollTo):
* dom/Element.cpp:
(WebCore::Element::removedFrom):
(WebCore::Element::savedLayerScrollPosition):
(WebCore::Element::setSavedLayerScrollPosition):
(WebCore::Element::savedLayerScrollOffset): Deleted.
(WebCore::Element::setSavedLayerScrollOffset): Deleted.
* dom/Element.h:
* dom/ElementRareData.h:
(WebCore::ElementRareData::savedLayerScrollPosition):
(WebCore::ElementRareData::setSavedLayerScrollPosition):
(WebCore::ElementRareData::savedLayerScrollOffset): Deleted.
(WebCore::ElementRareData::setSavedLayerScrollOffset): Deleted.
* html/TextFieldInputType.cpp:
(WebCore::TextFieldInputType::forwardEvent):
* platform/graphics/IntPoint.h:
(WebCore::IntPoint::isZero):
* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::baselinePosition):
* rendering/RenderBox.cpp:
(WebCore::RenderBox::styleDidChange):
(WebCore::RenderBox::scrollLeft):
(WebCore::RenderBox::scrollTop):
(WebCore::RenderBox::scrolledContentOffset):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::RenderLayer):
(WebCore::RenderLayer::~RenderLayer):
(WebCore::RenderLayer::scrollByRecursively):
(WebCore::RenderLayer::clampScrollOffset):
(WebCore::RenderLayer::scrollToOffset):
(WebCore::RenderLayer::scrollTo):
(WebCore::RenderLayer::scrollRectToVisible):
(WebCore::RenderLayer::scrollPosition):
(WebCore::RenderLayer::maximumScrollPosition):
(WebCore::RenderLayer::updateScrollInfoAfterLayout):
* rendering/RenderLayer.h:
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateGeometry):
* rendering/RenderMarquee.cpp:
(WebCore::RenderMarquee::start):
(WebCore::RenderMarquee::timerFired):
* rendering/RenderTreeAsText.cpp:
(WebCore::write):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (194465 => 194466)


--- trunk/Source/WebCore/ChangeLog	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/ChangeLog	2015-12-31 20:07:15 UTC (rev 194466)
@@ -1,3 +1,66 @@
+2015-12-31  Simon Fraser  <simon.fra...@apple.com>
+
+        More scrollOffset/scrollPosition disambiguation, in RenderLayer
+        https://bugs.webkit.org/show_bug.cgi?id=152617
+
+        Reviewed by Zalan Bujtas.
+        
+        Change RenderLayer's m_scrollOffset to be m_scrollPosition, since it stores
+        scroll positions (negative in RTL overflow). scrollOffset() was accurately
+        named already, but fix the return type, and remove the unnecessary scrollXOffset()/
+        scrollYOffset() variants, fixing callers to use .x() and .y().
+        
+        scrollToOffset() was also accurately named, but fix its argument.
+        
+        Fix functions related to saving scroll positions on Element to refer to scroll positions.
+
+        No behavior change.
+
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::scrollTo):
+        * dom/Element.cpp:
+        (WebCore::Element::removedFrom):
+        (WebCore::Element::savedLayerScrollPosition):
+        (WebCore::Element::setSavedLayerScrollPosition):
+        (WebCore::Element::savedLayerScrollOffset): Deleted.
+        (WebCore::Element::setSavedLayerScrollOffset): Deleted.
+        * dom/Element.h:
+        * dom/ElementRareData.h:
+        (WebCore::ElementRareData::savedLayerScrollPosition):
+        (WebCore::ElementRareData::setSavedLayerScrollPosition):
+        (WebCore::ElementRareData::savedLayerScrollOffset): Deleted.
+        (WebCore::ElementRareData::setSavedLayerScrollOffset): Deleted.
+        * html/TextFieldInputType.cpp:
+        (WebCore::TextFieldInputType::forwardEvent):
+        * platform/graphics/IntPoint.h:
+        (WebCore::IntPoint::isZero):
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::baselinePosition):
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::styleDidChange):
+        (WebCore::RenderBox::scrollLeft):
+        (WebCore::RenderBox::scrollTop):
+        (WebCore::RenderBox::scrolledContentOffset):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::RenderLayer):
+        (WebCore::RenderLayer::~RenderLayer):
+        (WebCore::RenderLayer::scrollByRecursively):
+        (WebCore::RenderLayer::clampScrollOffset):
+        (WebCore::RenderLayer::scrollToOffset):
+        (WebCore::RenderLayer::scrollTo):
+        (WebCore::RenderLayer::scrollRectToVisible):
+        (WebCore::RenderLayer::scrollPosition):
+        (WebCore::RenderLayer::maximumScrollPosition):
+        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
+        * rendering/RenderLayer.h:
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::updateGeometry):
+        * rendering/RenderMarquee.cpp:
+        (WebCore::RenderMarquee::start):
+        (WebCore::RenderMarquee::timerFired):
+        * rendering/RenderTreeAsText.cpp:
+        (WebCore::write):
+
 2015-12-31  Zalan Bujtas  <za...@apple.com>
 
         text-decoration: line-through is mispositioned when text has overline/underline too.

Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (194465 => 194466)


--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2015-12-31 20:07:15 UTC (rev 194466)
@@ -3577,7 +3577,8 @@
     if (!box.canBeScrolledAndHasScrollableArea())
         return;
 
-    box.layer()->scrollToOffset(toIntSize(point), RenderLayer::ScrollOffsetClamped);
+    // FIXME: is point a ScrollOffset or ScrollPosition? Test in RTL overflow.
+    box.layer()->scrollToOffset(point, RenderLayer::ScrollOffsetClamped);
 }
 
 #if ENABLE(MATHML)

Modified: trunk/Source/WebCore/bindings/objc/DOMHTML.mm (194465 => 194466)


--- trunk/Source/WebCore/bindings/objc/DOMHTML.mm	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/bindings/objc/DOMHTML.mm	2015-12-31 20:07:15 UTC (rev 194466)
@@ -77,7 +77,7 @@
     if (!is<RenderBox>(*renderer) || !renderer->hasOverflowClip())
         return 0;
 
-    return downcast<RenderBox>(*renderer).layer()->scrollXOffset();
+    return downcast<RenderBox>(*renderer).layer()->scrollOffset().x();
 }
 
 - (int)scrollYOffset
@@ -91,7 +91,7 @@
     if (!is<RenderBox>(*renderer) || !renderer->hasOverflowClip())
         return 0;
 
-    return downcast<RenderBox>(*renderer).layer()->scrollYOffset();
+    return downcast<RenderBox>(*renderer).layer()->scrollOffset().y();
 }
 
 - (void)setScrollXOffset:(int)x scrollYOffset:(int)y
@@ -113,12 +113,13 @@
     RenderLayer* layer = downcast<RenderBox>(*renderer).layer();
     if (adjustForIOSCaret)
         layer->setAdjustForIOSCaretWhenScrolling(true);
-    layer->scrollToOffset(IntSize(x, y));
+    layer->scrollToOffset(ScrollOffset(x, y));
     if (adjustForIOSCaret)
         layer->setAdjustForIOSCaretWhenScrolling(false);
 }
 
-- (void)absolutePosition:(int *)x :(int *)y :(int *)w :(int *)h {
+- (void)absolutePosition:(int *)x :(int *)y :(int *)w :(int *)h
+{
     RenderBox *renderer = core(self)->renderBox();
     if (renderer) {
         if (w)

Modified: trunk/Source/WebCore/dom/Element.cpp (194465 => 194466)


--- trunk/Source/WebCore/dom/Element.cpp	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/dom/Element.cpp	2015-12-31 20:07:15 UTC (rev 194466)
@@ -1575,7 +1575,7 @@
         document().page()->pointerLockController().elementRemoved(this);
 #endif
 
-    setSavedLayerScrollOffset(IntSize());
+    setSavedLayerScrollPosition(ScrollPosition());
 
     if (insertionPoint.isInTreeScope()) {
         TreeScope* oldScope = &insertionPoint.treeScope();
@@ -3152,16 +3152,16 @@
     dispatchSubtreeModifiedEvent();
 }
 
-IntSize Element::savedLayerScrollOffset() const
+IntPoint Element::savedLayerScrollPosition() const
 {
-    return hasRareData() ? elementRareData()->savedLayerScrollOffset() : IntSize();
+    return hasRareData() ? elementRareData()->savedLayerScrollPosition() : IntPoint();
 }
 
-void Element::setSavedLayerScrollOffset(const IntSize& size)
+void Element::setSavedLayerScrollPosition(const IntPoint& position)
 {
-    if (size.isZero() && !hasRareData())
+    if (position.isZero() && !hasRareData())
         return;
-    ensureElementRareData().setSavedLayerScrollOffset(size);
+    ensureElementRareData().setSavedLayerScrollPosition(position);
 }
 
 RefPtr<Attr> Element::attrIfExists(const AtomicString& localName, bool shouldIgnoreAttributeCase)

Modified: trunk/Source/WebCore/dom/Element.h (194465 => 194466)


--- trunk/Source/WebCore/dom/Element.h	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/dom/Element.h	2015-12-31 20:07:15 UTC (rev 194466)
@@ -452,8 +452,8 @@
     bool hasName() const;
     const SpaceSplitString& classNames() const;
 
-    IntSize savedLayerScrollOffset() const;
-    void setSavedLayerScrollOffset(const IntSize&);
+    IntPoint savedLayerScrollPosition() const;
+    void setSavedLayerScrollPosition(const IntPoint&);
 
     bool dispatchMouseEvent(const PlatformMouseEvent&, const AtomicString& eventType, int clickCount = 0, Element* relatedTarget = nullptr);
     bool dispatchWheelEvent(const PlatformWheelEvent&);

Modified: trunk/Source/WebCore/dom/ElementRareData.h (194465 => 194466)


--- trunk/Source/WebCore/dom/ElementRareData.h	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/dom/ElementRareData.h	2015-12-31 20:07:15 UTC (rev 194466)
@@ -101,8 +101,8 @@
     LayoutSize minimumSizeForResizing() const { return m_minimumSizeForResizing; }
     void setMinimumSizeForResizing(LayoutSize size) { m_minimumSizeForResizing = size; }
 
-    IntSize savedLayerScrollOffset() const { return m_savedLayerScrollOffset; }
-    void setSavedLayerScrollOffset(IntSize size) { m_savedLayerScrollOffset = size; }
+    IntPoint savedLayerScrollPosition() const { return m_savedLayerScrollPosition; }
+    void setSavedLayerScrollPosition(IntPoint position) { m_savedLayerScrollPosition = position; }
 
     bool hasPendingResources() const { return m_hasPendingResources; }
     void setHasPendingResources(bool has) { m_hasPendingResources = has; }
@@ -130,7 +130,7 @@
     RegionOversetState m_regionOversetState;
 
     LayoutSize m_minimumSizeForResizing;
-    IntSize m_savedLayerScrollOffset;
+    IntPoint m_savedLayerScrollPosition;
     RefPtr<RenderStyle> m_computedStyle;
 
     std::unique_ptr<DatasetDOMStringMap> m_dataset;

Modified: trunk/Source/WebCore/html/TextFieldInputType.cpp (194465 => 194466)


--- trunk/Source/WebCore/html/TextFieldInputType.cpp	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/html/TextFieldInputType.cpp	2015-12-31 20:07:15 UTC (rev 194466)
@@ -197,7 +197,7 @@
             if (event->type() == eventNames().blurEvent) {
                 if (RenderTextControlInnerBlock* innerTextRenderer = innerTextElement()->renderer()) {
                     if (RenderLayer* innerLayer = innerTextRenderer->layer()) {
-                        IntSize scrollOffset(!renderTextControl.style().isLeftToRightDirection() ? innerLayer->scrollWidth() : 0, 0);
+                        ScrollOffset scrollOffset(!renderTextControl.style().isLeftToRightDirection() ? innerLayer->scrollWidth() : 0, 0);
                         innerLayer->scrollToOffset(scrollOffset, RenderLayer::ScrollOffsetClamped);
                     }
                 }

Modified: trunk/Source/WebCore/page/Frame.cpp (194465 => 194466)


--- trunk/Source/WebCore/page/Frame.cpp	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/page/Frame.cpp	2015-12-31 20:07:15 UTC (rev 194466)
@@ -490,25 +490,25 @@
     if (visibleRect.intersects(exposeRect))
         return;
 
-    int x = layer->scrollXOffset();
+    // FIXME: Why isn't this just calling RenderLayer::scrollRectToVisible()?
+    ScrollOffset scrollOffset = layer->scrollOffset();
     int exposeLeft = exposeRect.x();
     int exposeRight = exposeLeft + exposeRect.width();
     int clientWidth = roundToInt(box->clientWidth());
     if (exposeLeft <= 0)
-        x = std::max(0, x + exposeLeft - clientWidth / 2);
+        scrollOffset.setX(std::max(0, scrollOffset.x() + exposeLeft - clientWidth / 2));
     else if (exposeRight >= clientWidth)
-        x = std::min(box->scrollWidth() - clientWidth, x + clientWidth / 2);
+        scrollOffset.setX(std::min(box->scrollWidth() - clientWidth, scrollOffset.x() + clientWidth / 2));
 
-    int y = layer->scrollYOffset();
     int exposeTop = exposeRect.y();
     int exposeBottom = exposeTop + exposeRect.height();
     int clientHeight = roundToInt(box->clientHeight());
     if (exposeTop <= 0)
-        y = std::max(0, y + exposeTop - clientHeight / 2);
+        scrollOffset.setY(std::max(0, scrollOffset.y() + exposeTop - clientHeight / 2));
     else if (exposeBottom >= clientHeight)
-        y = std::min(box->scrollHeight() - clientHeight, y + clientHeight / 2);
+        scrollOffset.setY(std::min(box->scrollHeight() - clientHeight, scrollOffset.y() + clientHeight / 2));
 
-    layer->scrollToOffset(IntSize(x, y));
+    layer->scrollToOffset(scrollOffset);
     selection().setCaretRectNeedsUpdate();
     selection().updateAppearance();
 }
@@ -602,7 +602,7 @@
     }
 
     if (action == PerformOverflowScroll && (deltaX || deltaY)) {
-        layer->scrollToOffset(IntSize(layer->scrollXOffset() + deltaX, layer->scrollYOffset() + deltaY));
+        layer->scrollToOffset(layer->scrollOffset() + IntSize(deltaX, deltaY));
 
         // Handle making selection.
         VisiblePosition visiblePosition(renderer->positionForPoint(selectionPosition, nullptr));

Modified: trunk/Source/WebCore/platform/graphics/IntPoint.h (194465 => 194466)


--- trunk/Source/WebCore/platform/graphics/IntPoint.h	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/platform/graphics/IntPoint.h	2015-12-31 20:07:15 UTC (rev 194466)
@@ -66,6 +66,7 @@
     explicit IntPoint(const FloatPoint&); // don't do this implicitly since it's lossy
 
     static IntPoint zero() { return IntPoint(); }
+    bool isZero() const { return !m_x && !m_y; }
 
     int x() const { return m_x; }
     int y() const { return m_y; }

Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (194465 => 194466)


--- trunk/Source/WebCore/rendering/RenderBlock.cpp	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp	2015-12-31 20:07:15 UTC (rev 194466)
@@ -2874,8 +2874,8 @@
         // (the content inside them moves).  This matches WinIE as well, which just bottom-aligns them.
         // We also give up on finding a baseline if we have a vertical scrollbar, or if we are scrolled
         // vertically (e.g., an overflow:hidden block that has had scrollTop moved).
-        bool ignoreBaseline = (layer() && (layer()->marquee() || (direction == HorizontalLine ? (layer()->verticalScrollbar() || layer()->scrollYOffset() != 0)
-            : (layer()->horizontalScrollbar() || layer()->scrollXOffset() != 0)))) || (isWritingModeRoot() && !isRubyRun());
+        bool ignoreBaseline = (layer() && (layer()->marquee() || (direction == HorizontalLine ? (layer()->verticalScrollbar() || layer()->scrollOffset().y() != 0)
+            : (layer()->horizontalScrollbar() || layer()->scrollOffset().x() != 0)))) || (isWritingModeRoot() && !isRubyRun());
         
         Optional<int> baselinePos = ignoreBaseline ? Optional<int>() : inlineBlockBaseline(direction);
         

Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (194465 => 194466)


--- trunk/Source/WebCore/rendering/RenderBox.cpp	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp	2015-12-31 20:07:15 UTC (rev 194466)
@@ -356,11 +356,11 @@
     // If our zoom factor changes and we have a defined scrollLeft/Top, we need to adjust that value into the
     // new zoomed coordinate space.
     if (hasOverflowClip() && layer() && oldStyle && oldStyle->effectiveZoom() != newStyle.effectiveZoom()) {
-        if (int left = layer()->scrollXOffset()) {
+        if (int left = layer()->scrollOffset().x()) {
             left = (left / oldStyle->effectiveZoom()) * newStyle.effectiveZoom();
             layer()->scrollToXOffset(left);
         }
-        if (int top = layer()->scrollYOffset()) {
+        if (int top = layer()->scrollOffset().y()) {
             top = (top / oldStyle->effectiveZoom()) * newStyle.effectiveZoom();
             layer()->scrollToYOffset(top);
         }
@@ -578,12 +578,12 @@
 
 int RenderBox::scrollLeft() const
 {
-    return hasOverflowClip() && layer() ? layer()->scrollXOffset() : 0;
+    return hasOverflowClip() && layer() ? layer()->scrollOffset().x() : 0;
 }
 
 int RenderBox::scrollTop() const
 {
-    return hasOverflowClip() && layer() ? layer()->scrollYOffset() : 0;
+    return hasOverflowClip() && layer() ? layer()->scrollOffset().y() : 0;
 }
 
 static void setupWheelEventTestTrigger(RenderLayer& layer, Frame* frame)
@@ -978,6 +978,7 @@
         return IntSize();
 
     ASSERT(hasLayer());
+    // FIXME: Renderer code needs scrollOffset/scrollPosition disambiguation.
     return layer()->scrolledContentOffset();
 }
 

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (194465 => 194466)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2015-12-31 20:07:15 UTC (rev 194466)
@@ -333,10 +333,10 @@
 
     if (Element* element = renderer().element()) {
         // We save and restore only the scrollOffset as the other scroll values are recalculated.
-        m_scrollOffset = element->savedLayerScrollOffset();
-        if (!m_scrollOffset.isZero())
-            scrollAnimator().setCurrentPosition(FloatPoint(m_scrollOffset.width(), m_scrollOffset.height()));
-        element->setSavedLayerScrollOffset(IntSize());
+        m_scrollPosition = element->savedLayerScrollPosition();
+        if (!m_scrollPosition.isZero())
+            scrollAnimator().setCurrentPosition(m_scrollPosition);
+        element->setSavedLayerScrollPosition(IntPoint());
     }
 }
 
@@ -352,7 +352,7 @@
         unregisterAsTouchEventListenerForScrolling();
 #endif
         if (Element* element = renderer().element())
-            element->setSavedLayerScrollOffset(m_scrollOffset);
+            element->setSavedLayerScrollPosition(m_scrollPosition);
     }
 
     destroyScrollbar(HorizontalScrollbar);
@@ -2289,7 +2289,7 @@
         restrictedByLineClamp = !renderer().parent()->style().lineClamp().isNone();
 
     if (renderer().hasOverflowClip() && !restrictedByLineClamp) {
-        IntSize newScrollOffset = scrollOffset() + delta;
+        ScrollOffset newScrollOffset = scrollOffset() + delta;
         scrollToOffset(newScrollOffset, clamp);
         if (scrolledArea)
             *scrolledArea = this;
@@ -2314,26 +2314,20 @@
     }
 }
 
-IntSize RenderLayer::clampScrollOffset(const IntSize& scrollOffset) const
+ScrollOffset RenderLayer::clampScrollOffset(const ScrollOffset& scrollOffset) const
 {
-    RenderBox* box = renderBox();
-    ASSERT(box);
-
-    int maxX = scrollWidth() - roundToInt(box->clientWidth());
-    int maxY = scrollHeight() - roundToInt(box->clientHeight());
-
-    int x = std::max(std::min(scrollOffset.width(), maxX), 0);
-    int y = std::max(std::min(scrollOffset.height(), maxY), 0);
-    return IntSize(x, y);
+    return scrollOffset.constrainedBetween(IntPoint(), maximumScrollOffset());
 }
 
-void RenderLayer::scrollToOffset(const IntSize& scrollOffset, ScrollOffsetClamping clamp)
+void RenderLayer::scrollToOffset(const ScrollOffset& scrollOffset, ScrollOffsetClamping clamp)
 {
-    IntSize newScrollOffset = clamp == ScrollOffsetClamped ? clampScrollOffset(scrollOffset) : scrollOffset;
+    ScrollOffset newScrollOffset = clamp == ScrollOffsetClamped ? clampScrollOffset(scrollOffset) : scrollOffset;
     if (newScrollOffset != this->scrollOffset())
-        scrollToOffsetWithoutAnimation(IntPoint(newScrollOffset));
+        scrollToOffsetWithoutAnimation(newScrollOffset);
 }
 
+// x and y are scroll offset values
+// FIXME: use a ScrollOffset, or change this to take a ScrollPosition.
 void RenderLayer::scrollTo(int x, int y)
 {
     RenderBox* box = renderBox();
@@ -2351,7 +2345,7 @@
                 x += caretWidth;
                 if (x <= caretWidth)
                     x = 0;
-            } else if (x < m_scrollOffset.width() - caretWidth)
+            } else if (x < m_scrollPosition.x() - caretWidth)
                 x -= caretWidth;
         }
 #endif
@@ -2362,8 +2356,8 @@
     // complicated (since it will involve testing whether our layer
     // is either occluded by another layer or clipped by an enclosing
     // layer or contains fixed backgrounds, etc.).
-    IntSize newScrollOffset = IntSize(x - scrollOrigin().x(), y - scrollOrigin().y());
-    if (m_scrollOffset == newScrollOffset) {
+    ScrollPosition newScrollPosition = scrollPositionFromOffset(ScrollOffset(x, y));
+    if (m_scrollPosition == newScrollPosition) {
 #if PLATFORM(IOS)
         if (m_requiresScrollBoundsOriginUpdate)
             updateCompositingLayersAfterScroll();
@@ -2371,8 +2365,8 @@
         return;
     }
     
-    IntPoint oldPosition = IntPoint(m_scrollOffset);
-    m_scrollOffset = newScrollOffset;
+    ScrollPosition oldPosition = IntPoint(m_scrollPosition);
+    m_scrollPosition = newScrollPosition;
 
     RenderView& view = renderer().view();
 
@@ -2423,7 +2417,7 @@
     // Schedule the scroll and scroll-related DOM events.
     if (Element* element = renderer().element()) {
         element->document().eventQueue().enqueueOrDispatchScrollEvent(*element);
-        element->document().sendWillRevealEdgeEventsIfNeeded(oldPosition, IntPoint(newScrollOffset), visibleContentRect(), contentsSize(), element);
+        element->document().sendWillRevealEdgeEventsIfNeeded(oldPosition, newScrollPosition, visibleContentRect(), contentsSize(), element);
     }
 
     if (scrollsOverflow())
@@ -2493,9 +2487,9 @@
         LayoutRect layerBounds(0, 0, box->clientWidth(), box->clientHeight());
         LayoutRect r = getRectToExpose(layerBounds, layerBounds, localExposeRect, alignX, alignY);
 
-        IntSize clampedScrollOffset = clampScrollOffset(scrollOffset() + toIntSize(roundedIntRect(r).location()));
+        ScrollOffset clampedScrollOffset = clampScrollOffset(scrollOffset() + toIntSize(roundedIntRect(r).location()));
         if (clampedScrollOffset != scrollOffset()) {
-            IntSize oldScrollOffset = scrollOffset();
+            ScrollOffset oldScrollOffset = scrollOffset();
             scrollToOffset(clampedScrollOffset);
             IntSize scrollOffsetDifference = scrollOffset() - oldScrollOffset;
             localExposeRect.move(-scrollOffsetDifference);
@@ -2734,21 +2728,16 @@
 int RenderLayer::scrollPosition(Scrollbar* scrollbar) const
 {
     if (scrollbar->orientation() == HorizontalScrollbar)
-        return scrollXOffset();
+        return scrollOffset().x();
     if (scrollbar->orientation() == VerticalScrollbar)
-        return scrollYOffset();
+        return scrollOffset().y();
     return 0;
 }
 
-ScrollPosition RenderLayer::scrollPosition() const
-{
-    // FIXME: This needs scrollOffset/scrollPosition disambiguation.
-    return ScrollPosition(m_scrollOffset);
-}
-
 ScrollPosition RenderLayer::maximumScrollPosition() const
 {
     // FIXME: m_scrollSize may not be up-to-date if m_scrollDimensionsDirty is true.
+    // FIXME: should be able to use the ScrollableArea implementation.
     return scrollPositionFromOffset(roundedIntPoint(m_scrollSize) - visibleContentRectIncludingScrollbars(ContentsVisibleRect).size());
 }
 
@@ -3476,7 +3465,7 @@
         return;
 
     m_scrollDimensionsDirty = true;
-    IntSize originalScrollOffset = scrollOffset();
+    ScrollOffset originalScrollOffset = scrollOffset();
 
     computeScrollDimensions();
 
@@ -3489,7 +3478,7 @@
     if (box->style().overflowX() != OMARQUEE && !isRubberBandInProgress()) {
         // Layout may cause us to be at an invalid scroll position. In this case we need
         // to pull our scroll offsets back to the max (or push them up to the min).
-        IntSize clampedScrollOffset = clampScrollOffset(scrollOffset());
+        ScrollOffset clampedScrollOffset = clampScrollOffset(scrollOffset());
 #if PLATFORM(IOS)
         // FIXME: This looks wrong. The caret adjust mode should only be enabled on editing related entry points.
         // This code was added to fix an issue where the text insertion point would always be drawn on the right edge

Modified: trunk/Source/WebCore/rendering/RenderLayer.h (194465 => 194466)


--- trunk/Source/WebCore/rendering/RenderLayer.h	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/rendering/RenderLayer.h	2015-12-31 20:07:15 UTC (rev 194466)
@@ -191,14 +191,13 @@
     };
 
     // Scrolling methods for layers that can scroll their overflow.
-    void scrollByRecursively(const IntSize&, ScrollOffsetClamping = ScrollOffsetUnclamped, ScrollableArea** scrolledArea = nullptr);
-    void scrollToOffset(const IntSize&, ScrollOffsetClamping = ScrollOffsetUnclamped);
-    void scrollToXOffset(int x, ScrollOffsetClamping clamp = ScrollOffsetUnclamped) { scrollToOffset(IntSize(x, scrollYOffset()), clamp); }
-    void scrollToYOffset(int y, ScrollOffsetClamping clamp = ScrollOffsetUnclamped) { scrollToOffset(IntSize(scrollXOffset(), y), clamp); }
+    void scrollByRecursively(const IntSize& delta, ScrollOffsetClamping = ScrollOffsetUnclamped, ScrollableArea** scrolledArea = nullptr);
 
-    int scrollXOffset() const { return m_scrollOffset.width() + scrollOrigin().x(); }
-    int scrollYOffset() const { return m_scrollOffset.height() + scrollOrigin().y(); }
-    IntSize scrollOffset() const { return IntSize(scrollXOffset(), scrollYOffset()); }
+    void scrollToOffset(const ScrollOffset&, ScrollOffsetClamping = ScrollOffsetUnclamped);
+    void scrollToXOffset(int x, ScrollOffsetClamping clamp = ScrollOffsetUnclamped) { scrollToOffset(ScrollOffset(x, scrollOffset().y()), clamp); }
+    void scrollToYOffset(int y, ScrollOffsetClamping clamp = ScrollOffsetUnclamped) { scrollToOffset(ScrollOffset(scrollOffset().x(), y), clamp); }
+
+    ScrollOffset scrollOffset() const { return scrollOffsetFromPosition(m_scrollPosition); }
     IntSize scrollableContentsSize() const;
 
     void scrollRectToVisible(const LayoutRect&, const ScrollAlignment& alignX, const ScrollAlignment& alignY);
@@ -751,9 +750,10 @@
     void updateLayerPositionsAfterScroll(RenderGeometryMap*, UpdateLayerPositionsAfterScrollFlags = NoFlag);
 
     friend IntSize RenderBox::scrolledContentOffset() const;
-    IntSize scrolledContentOffset() const { return m_scrollOffset; }
+    // FIXME: rename this toscrolledContentPosition(), or remove it.
+    IntSize scrolledContentOffset() const { return toIntSize(m_scrollPosition); }
 
-    IntSize clampScrollOffset(const IntSize&) const;
+    ScrollOffset clampScrollOffset(const ScrollOffset&) const;
 
     RenderLayer* enclosingPaginationLayerInSubtree(const RenderLayer* rootLayer, PaginationInclusionMode) const;
 
@@ -865,7 +865,7 @@
     virtual int scrollSize(ScrollbarOrientation) const override;
     virtual void setScrollOffset(const IntPoint&) override;
 
-    virtual ScrollPosition scrollPosition() const override;
+    virtual ScrollPosition scrollPosition() const override { return m_scrollPosition; }
     virtual ScrollPosition maximumScrollPosition() const override;
 
     virtual IntRect visibleContentRectInternal(VisibleContentRectIncludesScrollbars, VisibleContentRectBehavior) const override;
@@ -1093,8 +1093,7 @@
     // The layer's width/height
     IntSize m_layerSize;
 
-    // This is the (scroll) offset from scrollOrigin().
-    IntSize m_scrollOffset;
+    ScrollPosition m_scrollPosition;
 
     // The width/height of our scrolled area.
     LayoutSize m_scrollSize;

Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (194465 => 194466)


--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2015-12-31 20:07:15 UTC (rev 194466)
@@ -947,7 +947,7 @@
         ASSERT(m_scrollingContentsLayer);
         auto& renderBox = downcast<RenderBox>(renderer());
         LayoutRect paddingBox(renderBox.borderLeft(), renderBox.borderTop(), renderBox.width() - renderBox.borderLeft() - renderBox.borderRight(), renderBox.height() - renderBox.borderTop() - renderBox.borderBottom());
-        LayoutSize scrollOffset = m_owningLayer.scrollOffset();
+        ScrollOffset scrollOffset = m_owningLayer.scrollOffset();
 
         // FIXME: need to do some pixel snapping here.
         m_scrollingLayer->setPosition(FloatPoint(paddingBox.location() - localCompositingBounds.location()));
@@ -960,11 +960,11 @@
 
         if (m_owningLayer.isInUserScroll()) {
             // If scrolling is happening externally, we don't want to touch the layer bounds origin here because that will cause jitter.
-            m_scrollingLayer->syncBoundsOrigin(FloatPoint(scrollOffset.width(), scrollOffset.height()));
+            m_scrollingLayer->syncBoundsOrigin(scrollOffset);
             m_owningLayer.setRequiresScrollBoundsOriginUpdate(true);
         } else {
             // Note that we implement the contents offset via the bounds origin on this layer, rather than a position on the sublayer.
-            m_scrollingLayer->setBoundsOrigin(FloatPoint(scrollOffset.width(), scrollOffset.height()));
+            m_scrollingLayer->setBoundsOrigin(scrollOffset);
             m_owningLayer.setRequiresScrollBoundsOriginUpdate(false);
         }
         
@@ -978,9 +978,10 @@
         m_scrollingContentsLayer->setSize(scrollSize);
         // Scrolling the content layer does not need to trigger a repaint. The offset will be compensated away during painting.
         // FIXME: The paint offset and the scroll offset should really be separate concepts.
-        m_scrollingContentsLayer->setOffsetFromRenderer(paddingBox.location() - IntPoint() - scrollOffset, GraphicsLayer::DontSetNeedsDisplay);
+        LayoutSize scrollingContentsOffset = toLayoutSize(paddingBox.location() - toLayoutSize(scrollOffset));
+        m_scrollingContentsLayer->setOffsetFromRenderer(scrollingContentsOffset, GraphicsLayer::DontSetNeedsDisplay);
 #else
-        m_scrollingContentsLayer->setPosition(FloatPoint(-scrollOffset.width(), -scrollOffset.height()));
+        m_scrollingContentsLayer->setPosition(-scrollOffset);
 
         FloatSize oldScrollingLayerOffset = m_scrollingLayer->offsetFromRenderer();
         m_scrollingLayer->setOffsetFromRenderer(-toFloatSize(paddingBox.location()));
@@ -997,7 +998,7 @@
         if (scrollSize != m_scrollingContentsLayer->size() || paddingBoxOffsetChanged)
             m_scrollingContentsLayer->setNeedsDisplay();
 
-        LayoutSize scrollingContentsOffset = toLayoutSize(paddingBox.location() - scrollOffset);
+        LayoutSize scrollingContentsOffset = toLayoutSize(paddingBox.location() - toLayoutSize(scrollOffset));
         if (scrollingContentsOffset != m_scrollingContentsLayer->offsetFromRenderer() || scrollSize != m_scrollingContentsLayer->size())
             compositor().scrollingLayerDidChange(m_owningLayer);
 
@@ -2249,7 +2250,7 @@
         layerDirtyRect.move(-m_scrollingContentsLayer->offsetFromRenderer() + m_devicePixelFractionFromRenderer);
 #if PLATFORM(IOS)
         // Account for the fact that RenderLayerBacking::updateGeometry() bakes scrollOffset into offsetFromRenderer on iOS.
-        layerDirtyRect.move(-m_owningLayer.scrollOffset() + m_devicePixelFractionFromRenderer);
+        layerDirtyRect.moveBy(-m_owningLayer.scrollOffset() + m_devicePixelFractionFromRenderer);
 #endif
         m_scrollingContentsLayer->setNeedsDisplayInRect(layerDirtyRect, shouldClip);
     }

Modified: trunk/Source/WebCore/rendering/RenderMarquee.cpp (194465 => 194466)


--- trunk/Source/WebCore/rendering/RenderMarquee.cpp	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/rendering/RenderMarquee.cpp	2015-12-31 20:07:15 UTC (rev 194466)
@@ -159,9 +159,9 @@
 
     if (!m_suspended && !m_stopped) {
         if (isHorizontal())
-            m_layer->scrollToOffset(IntSize(m_start, 0));
+            m_layer->scrollToOffset(ScrollOffset(m_start, 0));
         else
-            m_layer->scrollToOffset(IntSize(0, m_start));
+            m_layer->scrollToOffset(ScrollOffset(0, m_start));
     }
     else {
         m_suspended = false;
@@ -274,7 +274,7 @@
         bool positive = range > 0;
         int clientSize = (isHorizontal() ? roundToInt(m_layer->renderBox()->clientWidth()) : roundToInt(m_layer->renderBox()->clientHeight()));
         int increment = abs(intValueForLength(m_layer->renderer().style().marqueeIncrement(), clientSize));
-        int currentPos = (isHorizontal() ? m_layer->scrollXOffset() : m_layer->scrollYOffset());
+        int currentPos = (isHorizontal() ? m_layer->scrollOffset().x() : m_layer->scrollOffset().y());
         newPos =  currentPos + (addIncrement ? increment : -increment);
         if (positive)
             newPos = std::min(newPos, endPoint);

Modified: trunk/Source/WebCore/rendering/RenderTreeAsText.cpp (194465 => 194466)


--- trunk/Source/WebCore/rendering/RenderTreeAsText.cpp	2015-12-31 19:57:25 UTC (rev 194465)
+++ trunk/Source/WebCore/rendering/RenderTreeAsText.cpp	2015-12-31 20:07:15 UTC (rev 194466)
@@ -617,10 +617,10 @@
     }
 
     if (l.renderer().hasOverflowClip()) {
-        if (l.scrollXOffset())
-            ts << " scrollX " << l.scrollXOffset();
-        if (l.scrollYOffset())
-            ts << " scrollY " << l.scrollYOffset();
+        if (l.scrollOffset().x())
+            ts << " scrollX " << l.scrollOffset().x();
+        if (l.scrollOffset().y())
+            ts << " scrollY " << l.scrollOffset().y();
         if (l.renderBox() && roundToInt(l.renderBox()->clientWidth()) != l.scrollWidth())
             ts << " scrollWidth " << l.scrollWidth();
         if (l.renderBox() && roundToInt(l.renderBox()->clientHeight()) != l.scrollHeight())
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to