| // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // @dart = 2.9 |
| |
| part of touch; |
| |
| abstract class ScrollListener { |
| /** |
| * The callback invoked for a scroll event. |
| * [decelerating] specifies whether or not the content is moving due |
| * to deceleration. It should be false if the content is moving because the |
| * user is dragging the content. |
| */ |
| void onScrollerMoved(double scrollX, double scrollY, bool decelerating); |
| } |
| |
| /** |
| * The scroll watcher is intended to provide a single way to |
| * listen for scroll events from instances of Scroller. |
| * TODO(jacobr): this class is obsolete. |
| */ |
| class ScrollWatcher { |
| Scroller _scroller; |
| |
| List<ScrollListener> _listeners; |
| |
| Element _scrollerEl; |
| |
| ScrollWatcher(Scroller scroller) |
| : _scroller = scroller, |
| _listeners = new List<ScrollListener>() {} |
| |
| void addListener(ScrollListener listener) { |
| _listeners.add(listener); |
| } |
| |
| /** |
| * Send the scroll event to all listeners. |
| * [decelerating] is true if the offset is changing because of deceleration. |
| */ |
| void _dispatchScroll(num scrollX, num scrollY, [bool decelerating = false]) { |
| for (final listener in _listeners) { |
| listener.onScrollerMoved(scrollX, scrollY, decelerating); |
| } |
| } |
| |
| /** |
| * Initializes elements and event handlers. Must be called after construction |
| * and before usage. |
| */ |
| void initialize() { |
| _scrollerEl = _scroller.getElement(); |
| _scroller.onContentMoved.listen((e) { |
| _onContentMoved(e); |
| }); |
| } |
| |
| /** |
| * This callback is invoked any time the scroller content offset changes. |
| */ |
| void _onContentMoved(Event e) { |
| num scrollX = _scroller.getHorizontalOffset(); |
| num scrollY = _scroller.getVerticalOffset(); |
| _dispatchScroll(scrollX, scrollY); |
| } |
| } |