Index: sky/framework/animation/scroll_behavior.dart |
diff --git a/sky/framework/animation/scroll_behavior.dart b/sky/framework/animation/scroll_behavior.dart |
deleted file mode 100644 |
index 1c456f2027d3db7e9fc39a39173f89a6f847f336..0000000000000000000000000000000000000000 |
--- a/sky/framework/animation/scroll_behavior.dart |
+++ /dev/null |
@@ -1,114 +0,0 @@ |
-// Copyright 2015 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. |
- |
-import 'dart:math' as math; |
-import 'mechanics.dart'; |
-import 'generators.dart'; |
- |
-const double _kScrollFriction = 0.005; |
-const double _kOverscrollFriction = 0.075; |
-const double _kBounceSlopeAngle = math.PI / 512.0; // radians |
- |
-abstract class ScrollBehavior { |
- Simulation release(Particle particle) => null; |
- |
- // Returns the new scroll offset. |
- double applyCurve(double scrollOffset, double scrollDelta); |
-} |
- |
-class BoundedScrollBehavior extends ScrollBehavior { |
- double minOffset; |
- double maxOffset; |
- |
- BoundedScrollBehavior({this.minOffset: 0.0, this.maxOffset}); |
- |
- double applyCurve(double scrollOffset, double scrollDelta) { |
- double newScrollOffset = scrollOffset + scrollDelta; |
- if (minOffset != null) |
- newScrollOffset = math.max(minOffset, newScrollOffset); |
- if (maxOffset != null) |
- newScrollOffset = math.min(maxOffset, newScrollOffset); |
- return newScrollOffset; |
- } |
-} |
- |
-class OverscrollBehavior extends ScrollBehavior { |
- |
- double _contentsHeight; |
- double get contentsHeight => _contentsHeight; |
- void set contentsHeight (double value) { |
- if (_contentsHeight != value) { |
- _contentsHeight = value; |
- // TODO(ianh) now what? what if we have a simulation ongoing? |
- } |
- } |
- |
- double _containerHeight; |
- double get containerHeight => _containerHeight; |
- void set containerHeight (double value) { |
- if (_containerHeight != value) { |
- _containerHeight = value; |
- // TODO(ianh) now what? what if we have a simulation ongoing? |
- } |
- } |
- |
- OverscrollBehavior({double contentsHeight: 0.0, double containerHeight: 0.0}) |
- : _contentsHeight = contentsHeight, |
- _containerHeight = containerHeight; |
- |
- double get maxScroll => math.max(0.0, _contentsHeight - _containerHeight); |
- |
- Simulation release(Particle particle) { |
- System system; |
- if ((particle.position >= 0.0) && (particle.position < maxScroll)) { |
- if (particle.velocity == 0.0) |
- return null; |
- System slowdownSystem = new ParticleInBoxWithFriction( |
- particle: particle, |
- friction: _kScrollFriction, |
- box: new GeofenceBox(min: 0.0, max: maxScroll, onEscape: () { |
- (system as Multisystem).transitionToSystem(new ParticleInBoxWithFriction( |
- particle: particle, |
- friction: _kOverscrollFriction, |
- box: new ClosedBox(), |
- onStop: () => (system as Multisystem).transitionToSystem(getBounceBackSystem(particle)) |
- )); |
- })); |
- system = new Multisystem(particle: particle, system: slowdownSystem); |
- } else { |
- system = getBounceBackSystem(particle); |
- } |
- return new Simulation(system, terminationCondition: () => particle.position == 0.0); |
- } |
- |
- System getBounceBackSystem(Particle particle) { |
- if (particle.position < 0.0) |
- return new ParticleClimbingRamp( |
- particle: particle, |
- box: new ClosedBox(max: 0.0), |
- theta: _kBounceSlopeAngle, |
- targetPosition: 0.0); |
- return new ParticleClimbingRamp( |
- particle: particle, |
- box: new ClosedBox(min: maxScroll), |
- theta: _kBounceSlopeAngle, |
- targetPosition: maxScroll); |
- } |
- |
- double applyCurve(double scrollOffset, double scrollDelta) { |
- double newScrollOffset = scrollOffset + scrollDelta; |
- // If we're overscrolling, we want move the scroll offset 2x |
- // slower than we would otherwise. Therefore, we "rewind" the |
- // newScrollOffset by half the amount that we moved it above. |
- // Notice that we clap the "old" value to 0.0 so that we only |
- // reduce the portion of scrollDelta that's applied beyond 0.0. We |
- // do similar things for overscroll in the other direction. |
- if (newScrollOffset < 0.0) { |
- newScrollOffset -= (newScrollOffset - math.min(0.0, scrollOffset)) / 2.0; |
- } else if (newScrollOffset > maxScroll) { |
- newScrollOffset -= (newScrollOffset - math.max(maxScroll, scrollOffset)) / 2.0; |
- } |
- return newScrollOffset; |
- } |
-} |