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

Side by Side Diff: ui/gfx/interpolated_transform.cc

Issue 7262024: Interpolated transforms (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Fixed unittest typo; use ui::Tween; Lerp => ValueBetween Created 9 years, 6 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
OLDNEW
(Empty)
1 // Copyright (c) 2011 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/gfx/interpolated_transform.h"
6 #include "ui/base/animation/tween.h"
7
8 namespace ui {
9
10 ///////////////////////////////////////////////////////////////////////////////
11 // InterpolatedTransform
12 //
13
14 InterpolatedTransform::InterpolatedTransform()
15 : start_time_(0.0f),
16 end_time_(1.0f) {
17 }
18
19 InterpolatedTransform::InterpolatedTransform(float start_time,
20 float end_time)
21 : start_time_(start_time),
22 end_time_(end_time) {
wjmaclean 2011/06/27 19:13:17 DCHECK(end_time > start_time)
23 }
24
25 ui::Transform InterpolatedTransform::Interpolate(float t) const {
26 ui::Transform result = InterpolateButDoNotCompose(t);
27 if (child_.get()) {
28 result.ConcatTransform(child_->Interpolate(t));
29 }
30 return result;
31 }
32
33 inline float InterpolatedTransform::ValueBetween(float time,
34 float start_value,
35 float end_value) const
36 {
37 if (time <= start_time_)
wjmaclean 2011/06/27 19:13:17 time < start_time_ ?
38 return start_value;
39
40 if (time >= end_time_)
41 return end_value;
42
43 float t = (time - start_time_) / (end_time_ - start_time_);
44 return static_cast<float>(Tween::ValueBetween(t, start_value, end_value));
45 }
46
47 ///////////////////////////////////////////////////////////////////////////////
48 // InterpolatedRotation
49 //
50
51 InterpolatedRotation::InterpolatedRotation(float start_degrees,
52 float end_degrees)
53 : InterpolatedTransform(),
54 start_degrees_(start_degrees),
55 end_degrees_(end_degrees) {
56 }
57
58 InterpolatedRotation::InterpolatedRotation(float start_degrees,
59 float end_degrees,
60 float start_time,
61 float end_time)
62 : InterpolatedTransform(start_time, end_time),
63 start_degrees_(start_degrees),
64 end_degrees_(end_degrees) {
65 }
66
67 ui::Transform InterpolatedRotation::InterpolateButDoNotCompose(float t) const {
68 ui::Transform result;
69 result.SetRotate(ValueBetween(t, start_degrees_, end_degrees_));
70 return result;
71 }
72
73
74 ///////////////////////////////////////////////////////////////////////////////
75 // InterpolatedScale
76 //
77
78 InterpolatedScale::InterpolatedScale(float start_scale,
79 float end_scale)
80 : InterpolatedTransform(),
81 start_scale_(start_scale),
82 end_scale_(end_scale) {
83 }
84
85 InterpolatedScale::InterpolatedScale(float start_scale,
86 float end_scale,
87 float start_time,
88 float end_time)
89 : InterpolatedTransform(start_time, end_time),
90 start_scale_(start_scale),
91 end_scale_(end_scale) {
92 }
93
94 ui::Transform InterpolatedScale::InterpolateButDoNotCompose(float t) const {
95 ui::Transform result;
96 float interpolated_scale = ValueBetween(t, start_scale_, end_scale_);
97 //TODO(vollick) 3d xforms.
98 result.SetScale(interpolated_scale, interpolated_scale);
99 return result;
100 }
101
102 ///////////////////////////////////////////////////////////////////////////////
103 // InterpolatedTranslation
104 //
105
106 InterpolatedTranslation::InterpolatedTranslation(const gfx::Point& start_pos,
107 const gfx::Point& end_pos)
108 : InterpolatedTransform(),
109 start_pos_(start_pos),
110 end_pos_(end_pos) {
111 }
112
113 InterpolatedTranslation::InterpolatedTranslation(const gfx::Point& start_pos,
114 const gfx::Point& end_pos,
115 float start_time,
116 float end_time)
117 : InterpolatedTransform(start_time, end_time),
118 start_pos_(start_pos),
119 end_pos_(end_pos) {
120 }
121
122 ui::Transform
123 InterpolatedTranslation::InterpolateButDoNotCompose(float t) const {
124 ui::Transform result;
125 //TODO(vollick) 3d xforms.
126 result.SetTranslate(ValueBetween(t, start_pos_.x(), end_pos_.x()),
127 ValueBetween(t, start_pos_.y(), end_pos_.y()));
128
129 return result;
130 }
131
132 ///////////////////////////////////////////////////////////////////////////////
133 // InterpolatedConstantTransform
134 //
135
136 InterpolatedConstantTransform::InterpolatedConstantTransform(
137 const ui::Transform& transform)
138 : InterpolatedTransform(),
139 transform_(transform) {
140 }
141
142 ui::Transform
143 InterpolatedConstantTransform::InterpolateButDoNotCompose(float t) const {
144 return transform_;
145 }
146
147 ///////////////////////////////////////////////////////////////////////////////
148 // InterpolatedTransformAboutPivot
149 //
150
151 InterpolatedTransformAboutPivot::InterpolatedTransformAboutPivot(
152 const gfx::Point& pivot,
153 InterpolatedTransform* transform)
154 : InterpolatedTransform() {
155 Init(pivot, transform);
156 }
157
158 InterpolatedTransformAboutPivot::InterpolatedTransformAboutPivot(
159 const gfx::Point& pivot,
160 InterpolatedTransform* transform,
161 float start_time,
162 float end_time)
163 : InterpolatedTransform() {
164 Init(pivot, transform);
165 }
166
167 ui::Transform
168 InterpolatedTransformAboutPivot::InterpolateButDoNotCompose(float t) const {
169 if (transform_.get()) {
170 return transform_->Interpolate(t);
171 }
172 return ui::Transform();
173 }
174
175 void InterpolatedTransformAboutPivot::Init(const gfx::Point& pivot,
176 InterpolatedTransform* xform) {
177 ui::Transform toPivot;
178 ui::Transform fromPivot;
179 toPivot.SetTranslate(-pivot.x(), -pivot.y());
180 fromPivot.SetTranslate(pivot.x(), pivot.y());
181
182 scoped_ptr<InterpolatedTransform> preTransform(
183 new InterpolatedConstantTransform(toPivot));
184 scoped_ptr<InterpolatedTransform> postTransform(
185 new InterpolatedConstantTransform(fromPivot));
186
187 preTransform->Compose(xform);
188 xform->Compose(postTransform.release());
189 transform_.reset(preTransform.release());
190 }
191
192 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698