Commit 81df765d authored by Ian Hickson's avatar Ian Hickson

Merge pull request #2108 from Hixie/scroll

Clean up scroll behaviour.
parents 263e2e7f 98d47c35
...@@ -10,27 +10,36 @@ const double _kSecondsPerMillisecond = 1000.0; ...@@ -10,27 +10,36 @@ const double _kSecondsPerMillisecond = 1000.0;
const double _kScrollDrag = 0.025; const double _kScrollDrag = 0.025;
/// An interface for controlling the behavior of scrollable widgets. /// An interface for controlling the behavior of scrollable widgets.
abstract class ScrollBehavior { ///
/// The type argument T is the type that describes the scroll offset.
/// The type argument U is the type that describes the scroll velocity.
abstract class ScrollBehavior<T, U> {
/// Returns a simulation that propels the scrollOffset. /// Returns a simulation that propels the scrollOffset.
/// ///
/// This function is called when a drag gesture ends. /// This function is called when a drag gesture ends.
Simulation createFlingScrollSimulation(double position, double velocity) => null; ///
/// Returns null if the behavior is to do nothing.
Simulation createFlingScrollSimulation(T position, U velocity) => null;
/// Returns an animation that ends at the snap offset. /// Returns an animation that ends at the snap offset.
/// ///
/// This function is called when a drag gesture ends and toSnapOffset is specified. /// This function is called when a drag gesture ends and a
Simulation createSnapScrollSimulation(double startOffset, double endOffset, double startVelocity, double endVelocity) => null; /// [SnapOffsetCallback] is specified for the scrollable.
///
/// Returns null if the behavior is to do nothing.
Simulation createSnapScrollSimulation(T startOffset, T endOffset, U startVelocity, U endVelocity) => null;
/// Returns the scroll offset to use when the user attempts to scroll /// Returns the scroll offset to use when the user attempts to scroll
/// from the given offset by the given delta. /// from the given offset by the given delta.
double applyCurve(double scrollOffset, double scrollDelta); T applyCurve(T scrollOffset, T scrollDelta) => scrollOffset;
/// Whether this scroll behavior currently permits scrolling /// Whether this scroll behavior currently permits scrolling
bool get isScrollable => true; bool get isScrollable => true;
} }
/// A scroll behavior for a scrollable widget with linear extent. /// A scroll behavior for a scrollable widget with linear extent (i.e.
abstract class ExtentScrollBehavior extends ScrollBehavior { /// that only scrolls along one axis).
abstract class ExtentScrollBehavior extends ScrollBehavior<double, double> {
ExtentScrollBehavior({ double contentExtent: 0.0, double containerExtent: 0.0 }) ExtentScrollBehavior({ double contentExtent: 0.0, double containerExtent: 0.0 })
: _contentExtent = contentExtent, _containerExtent = containerExtent; : _contentExtent = contentExtent, _containerExtent = containerExtent;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment