Chromium Code Reviews| Index: third_party/WebKit/Source/platform/scroll/SmoothScrollSequencer.cpp |
| diff --git a/third_party/WebKit/Source/platform/scroll/SmoothScrollSequencer.cpp b/third_party/WebKit/Source/platform/scroll/SmoothScrollSequencer.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b5ed3aada4a3c321a8746399a61491b6a8db0c36 |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/platform/scroll/SmoothScrollSequencer.cpp |
| @@ -0,0 +1,48 @@ |
| +// Copyright (c) 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| +#include "platform/scroll/SmoothScrollSequencer.h" |
| + |
| +#include "platform/scroll/ProgrammaticScrollAnimator.h" |
| +#include "platform/scroll/ScrollableArea.h" |
| + |
| +namespace blink { |
| + |
| +SmoothScrollSequencer* SmoothScrollSequencer::Create() { |
| + return new SmoothScrollSequencer(); |
| +} |
| + |
| +SmoothScrollSequencer::SmoothScrollSequencer() {} |
| + |
| +void SmoothScrollSequencer::QueueAnimation(ScrollableArea* scrollable, |
| + ScrollOffset offset) { |
| + ScrollerAndOffsetPair scroller_offset(scrollable, offset); |
| + queue_.push_back(scroller_offset); |
| +} |
| + |
| +void SmoothScrollSequencer::RunQueuedAnimations() { |
| + if (queue_.empty()) { |
| + current_scrollable_ = nullptr; |
| + return; |
| + } |
| + ScrollerAndOffsetPair scroller_offset = queue_.back(); |
| + queue_.pop_back(); |
| + ScrollableArea* scrollable = scroller_offset.first; |
| + current_scrollable_ = scrollable; |
| + ScrollOffset offset = scroller_offset.second; |
| + scrollable->GetProgrammaticScrollAnimator().AnimateToOffset(offset, true); |
| +} |
| + |
| +void SmoothScrollSequencer::AbortAnimations() { |
| + if (current_scrollable_) { |
| + current_scrollable_->GetProgrammaticScrollAnimator().CancelAnimation(); |
| + current_scrollable_ = nullptr; |
| + } |
| + queue_.clear(); |
| +} |
| + |
| +DEFINE_TRACE(SmoothScrollSequencer) { |
|
bokan
2017/05/19 18:37:14
I think you'll also need to visit each ScrollableA
sunyunjia
2017/05/19 22:30:41
Acknowledged.
|
| + visitor->Trace(current_scrollable_); |
| +} |
| + |
| +} // namespace blink |