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

Side by Side Diff: sky/framework/animation/curves.dart

Issue 1132063007: Rationalize Dart mojo and sky package structure (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 7 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 unified diff | Download patch
« no previous file with comments | « sky/framework/animation/animated_value.dart ('k') | sky/framework/animation/fling_curve.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 double _evaluateCubic(double a, double b, double m) {
6 // TODO(abarth): Would Math.pow be faster?
7 return 3 * a * (1 - m) * (1 - m) * m + 3 * b * (1 - m) * m * m + m * m * m;
8 }
9
10 const double _kCubicErrorBound = 0.001;
11
12 abstract class Curve {
13 double transform(double t);
14 }
15
16 class Linear implements Curve {
17 const Linear();
18
19 double transform(double t) {
20 return t;
21 }
22 }
23
24 class ParabolicFall implements Curve {
25 const ParabolicFall();
26
27 double transform(double t) {
28 return -t*t + 1;
29 }
30 }
31
32 class ParabolicRise implements Curve {
33 const ParabolicRise();
34
35 double transform(double t) {
36 return -(t-1)*(t-1) + 1;
37 }
38 }
39
40 class Cubic implements Curve {
41 final double a;
42 final double b;
43 final double c;
44 final double d;
45
46 const Cubic(this.a, this.b, this.c, this.d);
47
48 double transform(double t) {
49 double start = 0.0;
50 double end = 1.0;
51 while (true) {
52 double midpoint = (start + end) / 2;
53 double estimate = _evaluateCubic(a, c, midpoint);
54
55 if ((t - estimate).abs() < _kCubicErrorBound)
56 return _evaluateCubic(b, d, midpoint);
57
58 if (estimate < t)
59 start = midpoint;
60 else
61 end = midpoint;
62 }
63 }
64 }
65
66 const Linear linear = const Linear();
67 const Cubic ease = const Cubic(0.25, 0.1, 0.25, 1.0);
68 const Cubic easeIn = const Cubic(0.42, 0.0, 1.0, 1.0);
69 const Cubic easeOut = const Cubic(0.0, 0.0, 0.58, 1.0);
70 const Cubic easeInOut = const Cubic(0.42, 0.0, 0.58, 1.0);
71 const ParabolicRise parabolicRise = const ParabolicRise();
72 const ParabolicFall parabolicFall = const ParabolicFall();
OLDNEW
« no previous file with comments | « sky/framework/animation/animated_value.dart ('k') | sky/framework/animation/fling_curve.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698