| Index: Source/core/rendering/RenderLayerScrollableArea.cpp
|
| diff --git a/Source/core/rendering/RenderLayerScrollableArea.cpp b/Source/core/rendering/RenderLayerScrollableArea.cpp
|
| index 0a6c15ecfbe1c43e2ad6d426c37fb1ceecfd4158..ae8ab73f0b6708a6dbce927898337ea874745554 100644
|
| --- a/Source/core/rendering/RenderLayerScrollableArea.cpp
|
| +++ b/Source/core/rendering/RenderLayerScrollableArea.cpp
|
| @@ -115,6 +115,7 @@ RenderLayerScrollableArea::~RenderLayerScrollableArea()
|
| if (LocalFrame* frame = box().frame()) {
|
| if (FrameView* frameView = frame->view()) {
|
| frameView->removeScrollableArea(this);
|
| + frameView->removeAnimatingScrollableArea(this);
|
| }
|
| }
|
|
|
| @@ -501,6 +502,22 @@ IntRect RenderLayerScrollableArea::scrollableAreaBoundingBox() const
|
| return box().absoluteBoundingBoxRect();
|
| }
|
|
|
| +void RenderLayerScrollableArea::registerForAnimation()
|
| +{
|
| + if (LocalFrame* frame = box().frame()) {
|
| + if (FrameView* frameView = frame->view())
|
| + frameView->addAnimatingScrollableArea(this);
|
| + }
|
| +}
|
| +
|
| +void RenderLayerScrollableArea::deregisterForAnimation()
|
| +{
|
| + if (LocalFrame* frame = box().frame()) {
|
| + if (FrameView* frameView = frame->view())
|
| + frameView->removeAnimatingScrollableArea(this);
|
| + }
|
| +}
|
| +
|
| bool RenderLayerScrollableArea::userInputScrollable(ScrollbarOrientation orientation) const
|
| {
|
| if (box().isIntristicallyScrollable(orientation))
|
| @@ -572,13 +589,21 @@ void RenderLayerScrollableArea::computeScrollDimensions()
|
| setScrollOrigin(IntPoint(-scrollableLeftOverflow, -scrollableTopOverflow));
|
| }
|
|
|
| -void RenderLayerScrollableArea::scrollToOffset(const DoubleSize& scrollOffset, ScrollOffsetClamping clamp)
|
| +void RenderLayerScrollableArea::scrollToOffset(const DoubleSize& scrollOffset, ScrollOffsetClamping clamp, ScrollBehavior scrollBehavior)
|
| {
|
| + cancelProgrammaticScrollAnimation();
|
| DoubleSize newScrollOffset = clamp == ScrollOffsetClamped ? clampScrollOffset(scrollOffset) : scrollOffset;
|
| if (newScrollOffset != adjustedScrollOffset()) {
|
| + if (scrollBehavior == ScrollBehaviorAuto)
|
| + scrollBehavior = box().style()->scrollBehavior();
|
| DoublePoint origin(scrollOrigin());
|
| - // FIXME: Make scrollToOffsetWithoutAnimation take DoublePoint. crbug.com/414283.
|
| - scrollToOffsetWithoutAnimation(toFloatPoint(-origin + newScrollOffset));
|
| + if (scrollBehavior == ScrollBehaviorSmooth) {
|
| + // FIXME: Make programmaticallyScrollSmoothlyToOffset take DoublePoint. crbug.com/243871.
|
| + programmaticallyScrollSmoothlyToOffset(toFloatPoint(-origin + newScrollOffset));
|
| + } else {
|
| + // FIXME: Make scrollToOffsetWithoutAnimation take DoublePoint. crbug.com/414283.
|
| + scrollToOffsetWithoutAnimation(toFloatPoint(-origin + newScrollOffset));
|
| + }
|
| }
|
| }
|
|
|
|
|