| Index: third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp
|
| diff --git a/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp b/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp
|
| index 769acc39df44b05836e2d8ab1259afcd765a904f..0eb408c2ca75d28dd60b9d0dd1f261cf87488eae 100644
|
| --- a/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp
|
| +++ b/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp
|
| @@ -37,6 +37,7 @@
|
| #include "platform/scroll/MainThreadScrollingReason.h"
|
| #include "platform/scroll/ProgrammaticScrollAnimator.h"
|
| #include "platform/scroll/ScrollbarTheme.h"
|
| +#include "platform/scroll/SmoothScrollSequencer.h"
|
|
|
| static const int kPixelsPerLineStep = 40;
|
| static const float kMinFractionToStepWhenPaging = 0.875f;
|
| @@ -154,6 +155,8 @@ ScrollResult ScrollableArea::UserScroll(ScrollGranularity granularity,
|
| }
|
|
|
| CancelProgrammaticScrollAnimation();
|
| + if (SmoothScrollSequencer* sequencer = GetSmoothScrollSequencer())
|
| + sequencer->AbortAnimations();
|
|
|
| ScrollResult result =
|
| GetScrollAnimator().UserScroll(granularity, pixel_delta);
|
| @@ -170,6 +173,12 @@ ScrollResult ScrollableArea::UserScroll(ScrollGranularity granularity,
|
| void ScrollableArea::SetScrollOffset(const ScrollOffset& offset,
|
| ScrollType scroll_type,
|
| ScrollBehavior behavior) {
|
| + if (scroll_type != kSequencedSmoothScroll && scroll_type != kClampingScroll &&
|
| + scroll_type != kAnchoringScroll) {
|
| + if (SmoothScrollSequencer* sequencer = GetSmoothScrollSequencer())
|
| + sequencer->AbortAnimations();
|
| + }
|
| +
|
| ScrollOffset clamped_offset = ClampScrollOffset(offset);
|
| if (clamped_offset == GetScrollOffset())
|
| return;
|
| @@ -187,7 +196,10 @@ void ScrollableArea::SetScrollOffset(const ScrollOffset& offset,
|
| scroll_type);
|
| break;
|
| case kProgrammaticScroll:
|
| - ProgrammaticScrollHelper(clamped_offset, behavior);
|
| + ProgrammaticScrollHelper(clamped_offset, behavior, false);
|
| + break;
|
| + case kSequencedSmoothScroll:
|
| + ProgrammaticScrollHelper(clamped_offset, behavior, true);
|
| break;
|
| case kUserScroll:
|
| UserScrollHelper(clamped_offset, behavior);
|
| @@ -222,19 +234,25 @@ void ScrollableArea::SetScrollOffsetSingleAxis(ScrollbarOrientation orientation,
|
| ScrollableArea::SetScrollOffset(new_offset, scroll_type, behavior);
|
| }
|
|
|
| -void ScrollableArea::ProgrammaticScrollHelper(const ScrollOffset& offset,
|
| - ScrollBehavior scroll_behavior) {
|
| +void ScrollableArea::ProgrammaticScrollHelper(
|
| + const ScrollOffset& offset,
|
| + ScrollBehavior scroll_behavior,
|
| + bool sequenced_for_smooth_scroll) {
|
| CancelScrollAnimation();
|
|
|
| - if (scroll_behavior == kScrollBehaviorSmooth)
|
| - GetProgrammaticScrollAnimator().AnimateToOffset(offset);
|
| - else
|
| + if (scroll_behavior == kScrollBehaviorSmooth) {
|
| + GetProgrammaticScrollAnimator().AnimateToOffset(
|
| + offset, sequenced_for_smooth_scroll);
|
| + } else {
|
| GetProgrammaticScrollAnimator().ScrollToOffsetWithoutAnimation(offset);
|
| + }
|
| }
|
|
|
| void ScrollableArea::UserScrollHelper(const ScrollOffset& offset,
|
| ScrollBehavior scroll_behavior) {
|
| CancelProgrammaticScrollAnimation();
|
| + if (SmoothScrollSequencer* sequencer = GetSmoothScrollSequencer())
|
| + sequencer->AbortAnimations();
|
|
|
| float x = UserInputScrollable(kHorizontalScrollbar)
|
| ? offset.Width()
|
| @@ -255,6 +273,7 @@ void ScrollableArea::UserScrollHelper(const ScrollOffset& offset,
|
| LayoutRect ScrollableArea::ScrollIntoView(const LayoutRect& rect_in_content,
|
| const ScrollAlignment& align_x,
|
| const ScrollAlignment& align_y,
|
| + bool is_smooth,
|
| ScrollType) {
|
| // TODO(bokan): This should really be implemented here but ScrollAlignment is
|
| // in Core which is a dependency violation.
|
|
|