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

Side by Side Diff: ui/base/animation/tween.cc

Issue 23531053: ui/base/animation -> ui/gfx/animation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge 2 trunk Created 7 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « ui/base/animation/tween.h ('k') | ui/compositor/float_animation_curve_adapter.h » ('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 (c) 2012 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 #include "ui/base/animation/tween.h"
6
7 #include <math.h>
8
9 #if defined(OS_WIN)
10 #include <float.h>
11 #endif
12
13 #include "base/logging.h"
14
15 namespace ui {
16
17 // static
18 double Tween::CalculateValue(Tween::Type type, double state) {
19 DCHECK_GE(state, 0);
20 DCHECK_LE(state, 1);
21
22 switch (type) {
23 case EASE_IN:
24 return pow(state, 2);
25
26 case EASE_IN_2:
27 return pow(state, 4);
28
29 case EASE_IN_OUT:
30 if (state < 0.5)
31 return pow(state * 2, 2) / 2.0;
32 return 1.0 - (pow((state - 1.0) * 2, 2) / 2.0);
33
34 case FAST_IN_OUT:
35 return (pow(state - 0.5, 3) + 0.125) / 0.25;
36
37 case LINEAR:
38 return state;
39
40 case EASE_OUT_SNAP:
41 state = 0.95 * (1.0 - pow(1.0 - state, 2));
42 return state;
43
44 case EASE_OUT:
45 return 1.0 - pow(1.0 - state, 2);
46
47 case SMOOTH_IN_OUT:
48 return sin(state);
49
50 case ZERO:
51 return 0;
52 }
53
54 NOTREACHED();
55 return state;
56 }
57
58 // static
59 double Tween::ValueBetween(double value, double start, double target) {
60 return start + (target - start) * value;
61 }
62
63 // static
64 int Tween::ValueBetween(double value, int start, int target) {
65 if (start == target)
66 return start;
67 double delta = static_cast<double>(target - start);
68 if (delta < 0)
69 delta--;
70 else
71 delta++;
72 #if defined(OS_WIN)
73 return start + static_cast<int>(value * _nextafter(delta, 0));
74 #else
75 return start + static_cast<int>(value * nextafter(delta, 0));
76 #endif
77 }
78
79 // static
80 gfx::Rect Tween::ValueBetween(double value,
81 const gfx::Rect& start_bounds,
82 const gfx::Rect& target_bounds) {
83 return gfx::Rect(ValueBetween(value, start_bounds.x(), target_bounds.x()),
84 ValueBetween(value, start_bounds.y(), target_bounds.y()),
85 ValueBetween(value, start_bounds.width(),
86 target_bounds.width()),
87 ValueBetween(value, start_bounds.height(),
88 target_bounds.height()));
89 }
90
91 // static
92 gfx::Transform Tween::ValueBetween(double value,
93 const gfx::Transform& start_transform,
94 const gfx::Transform& end_transform) {
95 if (value >= 1.0)
96 return end_transform;
97 if (value <= 0.0)
98 return start_transform;
99
100 gfx::Transform to_return = end_transform;
101 to_return.Blend(start_transform, value);
102
103 return to_return;
104 }
105
106 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/animation/tween.h ('k') | ui/compositor/float_animation_curve_adapter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698