| Index: third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
|
| diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
|
| index 3f89d3f1e5672e1be5a266bccba3a61b653a58b0..32054fb3d7af13061465e7b559e9ec93b3931750 100644
|
| --- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
|
| @@ -114,10 +114,9 @@
|
| // We save and restore only the scrollOffset as the other scroll values are recalculated.
|
| Element* element = toElement(node);
|
| m_scrollOffset = element->savedLayerScrollOffset();
|
| - if (!m_scrollOffset.isZero()) {
|
| + if (!m_scrollOffset.isZero())
|
| scrollAnimator().setCurrentPosition(
|
| FloatPoint(m_scrollOffset.width(), m_scrollOffset.height()));
|
| - }
|
| element->setSavedLayerScrollOffset(IntSize());
|
| }
|
| updateResizerAreaSet();
|
| @@ -149,10 +148,9 @@
|
| if (!box().documentBeingDestroyed()) {
|
| Node* node = box().node();
|
| // FIXME: Make setSavedLayerScrollOffset take DoubleSize. crbug.com/414283.
|
| - if (node && node->isElementNode()) {
|
| + if (node && node->isElementNode())
|
| toElement(node)->setSavedLayerScrollOffset(
|
| flooredIntSize(m_scrollOffset));
|
| - }
|
| }
|
|
|
| if (LocalFrame* frame = box().frame()) {
|
| @@ -500,9 +498,8 @@
|
| : 0;
|
| }
|
|
|
| - // TODO(szager): Handle fractional scroll offsets correctly.
|
| return IntRect(
|
| - IntPoint(flooredIntSize(adjustedScrollOffset())),
|
| + IntPoint(scrollXOffset(), scrollYOffset()),
|
| IntSize(max(0, layer()->size().width() - verticalScrollbarWidth),
|
| max(0, layer()->size().height() - horizontalScrollbarHeight)));
|
| }
|
| @@ -638,11 +635,17 @@
|
| updateScrollOrigin();
|
| }
|
|
|
| -void PaintLayerScrollableArea::setScrollPositionUnconditionally(
|
| - const DoublePoint& position,
|
| +void PaintLayerScrollableArea::scrollToPosition(
|
| + const DoublePoint& scrollPosition,
|
| + ScrollOffsetClamping clamp,
|
| + ScrollBehavior scrollBehavior,
|
| ScrollType scrollType) {
|
| - cancelScrollAnimation();
|
| - scrollPositionChanged(position, scrollType);
|
| + DoublePoint newScrollPosition = clamp == ScrollOffsetClamped
|
| + ? clampScrollPosition(scrollPosition)
|
| + : scrollPosition;
|
| + if (newScrollPosition != scrollPositionDouble())
|
| + ScrollableArea::setScrollPosition(newScrollPosition, scrollType,
|
| + scrollBehavior);
|
| }
|
|
|
| void PaintLayerScrollableArea::updateAfterLayout() {
|
| @@ -803,13 +806,9 @@
|
| if (shouldPerformScrollAnchoring())
|
| m_scrollAnchor.restore();
|
|
|
| - if (scrollOriginChanged()) {
|
| - setScrollPositionUnconditionally(
|
| - clampScrollPosition(scrollPositionDouble()));
|
| - } else {
|
| - ScrollableArea::setScrollPosition(scrollPositionDouble(),
|
| - ProgrammaticScroll);
|
| - }
|
| + DoublePoint clamped = clampScrollPosition(scrollPositionDouble());
|
| + if (clamped != scrollPositionDouble() || scrollOriginChanged())
|
| + ScrollableArea::setScrollPosition(clamped, ProgrammaticScroll);
|
|
|
| setNeedsScrollPositionClamp(false);
|
| resetScrollOriginChanged();
|
| @@ -1564,17 +1563,17 @@
|
|
|
| DoublePoint clampedScrollPosition = clampScrollPosition(
|
| scrollPositionDouble() + roundedIntSize(r.location()));
|
| - if (clampedScrollPosition == scrollPositionDouble()) {
|
| + if (clampedScrollPosition == scrollPositionDouble())
|
| return LayoutRect(
|
| box()
|
| .localToAbsoluteQuad(FloatQuad(FloatRect(intersection(
|
| layerBounds, localExposeRect))),
|
| UseTransforms)
|
| .boundingBox());
|
| - }
|
|
|
| DoubleSize oldScrollOffset = adjustedScrollOffset();
|
| - setScrollPosition(clampedScrollPosition, scrollType, ScrollBehaviorInstant);
|
| + scrollToPosition(clampedScrollPosition, ScrollOffsetUnclamped,
|
| + ScrollBehaviorInstant, scrollType);
|
| DoubleSize scrollOffsetDifference = adjustedScrollOffset() - oldScrollOffset;
|
| localExposeRect.move(-LayoutSize(scrollOffsetDifference));
|
| return LayoutRect(
|
|
|