Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(482)

Unified Diff: sky/framework/fling-curve.dart

Issue 950603002: Port sky-scrollable to Dart (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: less setAttributes Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/examples/example-scrollable/index.sky ('k') | sky/framework/fling-curve.sky » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/framework/fling-curve.dart
diff --git a/sky/framework/fling-curve.dart b/sky/framework/fling-curve.dart
new file mode 100644
index 0000000000000000000000000000000000000000..6dce624dda84ad6d0643ace5290e864df0b03a1b
--- /dev/null
+++ b/sky/framework/fling-curve.dart
@@ -0,0 +1,51 @@
+// 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;
+
+const double _kDefaultAlpha = -5707.62;
+const double _kDefaultBeta = 172.0;
+const double _kDefaultGamma = 3.7;
+
+double _positionAtTime(double t) {
+ return kDefaultAlpha * math.exp(-kDefaultGamma * t) - kDefaultBeta * t - kDefaultAlpha;
+}
+
+double _velocityAtTime(double t) {
+ return -kDefaultAlpha * kDefaultGamma * math.exp(-kDefaultGamma * t) - kDefaultBeta;
+}
+
+double _timeAtVelocity(double v) {
+ return -math.log((v + kDefaultBeta) / (-kDefaultAlpha * kDefaultGamma)) / kDefaultGamma;
+}
+
+final double _kMaxVelocity = _velocityAtTime(0.0);
+final double _kCurveDuration = _timeAtVelocity(0.0);
+
+class FlingCurve {
+ double _timeOffset;
+ double _positionOffset;
+ double _startTime;
+ double _previousPosition;
+ double _direction;
+
+ FlingCurve(double velocity, double startTime) {
+ double startingVelocity = math.min(_kMaxVelocity, velocity.abs());
+ _timeOffset = _velocityAtTime(startingVelocity);
+ _positionOffset = _positionAtTime(_timeOffset);
+ _startTime = startTime / 1000.0;
+ _previousPosition = 0.0;
+ _direction = velocity.sign;
+ }
+
+ double update(double timeStamp) {
+ double t = timeStamp / 1000.0 - _startTime + _timeOffset;
+ if (t >= _kCurveDuration)
+ return 0.0;
+ double position = _positionAtTime(t) - _positionOffset;
+ double positionDelta = position - _previousPosition;
+ _previousPosition = position;
+ return _direction * math.max(0.0, positionDelta);
+ }
+}
« no previous file with comments | « sky/examples/example-scrollable/index.sky ('k') | sky/framework/fling-curve.sky » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698