OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef UI_GFX_INTERPOLATED_TRANSFORM_H_ | 5 #ifndef UI_GFX_INTERPOLATED_TRANSFORM_H_ |
6 #define UI_GFX_INTERPOLATED_TRANSFORM_H_ | 6 #define UI_GFX_INTERPOLATED_TRANSFORM_H_ |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "ui/gfx/point.h" | 10 #include "ui/gfx/point.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 class UI_EXPORT InterpolatedTransform { | 26 class UI_EXPORT InterpolatedTransform { |
27 public: | 27 public: |
28 InterpolatedTransform(); | 28 InterpolatedTransform(); |
29 // The interpolated transform varies only when t in (start_time, end_time). | 29 // The interpolated transform varies only when t in (start_time, end_time). |
30 // If t <= start_time, Interpolate(t) will return the initial transform, and | 30 // If t <= start_time, Interpolate(t) will return the initial transform, and |
31 // if t >= end_time, Interpolate(t) will return the final transform. | 31 // if t >= end_time, Interpolate(t) will return the final transform. |
32 InterpolatedTransform(float start_time, float end_time); | 32 InterpolatedTransform(float start_time, float end_time); |
33 virtual ~InterpolatedTransform(); | 33 virtual ~InterpolatedTransform(); |
34 | 34 |
35 // Returns the interpolated transform at time t. Note: not virtual. | 35 // Returns the interpolated transform at time t. Note: not virtual. |
36 ui::Transform Interpolate(float t) const; | 36 gfx::Transform Interpolate(float t) const; |
37 | 37 |
38 // The Intepolate ultimately returns the product of our transform at time t | 38 // The Intepolate ultimately returns the product of our transform at time t |
39 // and our child's transform at time t (if we have one). | 39 // and our child's transform at time t (if we have one). |
40 // | 40 // |
41 // This function takes ownership of the passed InterpolatedTransform. | 41 // This function takes ownership of the passed InterpolatedTransform. |
42 void SetChild(InterpolatedTransform* child); | 42 void SetChild(InterpolatedTransform* child); |
43 | 43 |
44 // If the interpolated transform is reversed, Interpolate(t) will return | 44 // If the interpolated transform is reversed, Interpolate(t) will return |
45 // Interpolate(1 - t) | 45 // Interpolate(1 - t) |
46 void SetReversed(bool reversed) { reversed_ = reversed; } | 46 void SetReversed(bool reversed) { reversed_ = reversed; } |
47 bool Reversed() const { return reversed_; } | 47 bool Reversed() const { return reversed_; } |
48 | 48 |
49 static bool FactorTRS(const ui::Transform& transform, | 49 static bool FactorTRS(const gfx::Transform& transform, |
50 gfx::Point* translation, | 50 gfx::Point* translation, |
51 float* rotation, | 51 float* rotation, |
52 gfx::Point3f* scale); | 52 gfx::Point3f* scale); |
53 | 53 |
54 protected: | 54 protected: |
55 // Calculates the interpolated transform without considering our child. | 55 // Calculates the interpolated transform without considering our child. |
56 virtual ui::Transform InterpolateButDoNotCompose(float t) const = 0; | 56 virtual gfx::Transform InterpolateButDoNotCompose(float t) const = 0; |
57 | 57 |
58 // If time in (start_time_, end_time_], this function linearly interpolates | 58 // If time in (start_time_, end_time_], this function linearly interpolates |
59 // between start_value and end_value. More precisely it returns | 59 // between start_value and end_value. More precisely it returns |
60 // (1 - t) * start_value + t * end_value where | 60 // (1 - t) * start_value + t * end_value where |
61 // t = (start_time_ - time) / (end_time_ - start_time_). | 61 // t = (start_time_ - time) / (end_time_ - start_time_). |
62 // If time < start_time_ it returns start_value, and if time >= end_time_ | 62 // If time < start_time_ it returns start_value, and if time >= end_time_ |
63 // it returns end_value. | 63 // it returns end_value. |
64 float ValueBetween(float time, float start_value, float end_value) const; | 64 float ValueBetween(float time, float start_value, float end_value) const; |
65 | 65 |
66 float start_time() const { return start_time_; } | 66 float start_time() const { return start_time_; } |
(...skipping 23 matching lines...) Expand all Loading... |
90 class UI_EXPORT InterpolatedRotation : public InterpolatedTransform { | 90 class UI_EXPORT InterpolatedRotation : public InterpolatedTransform { |
91 public: | 91 public: |
92 InterpolatedRotation(float start_degrees, float end_degrees); | 92 InterpolatedRotation(float start_degrees, float end_degrees); |
93 InterpolatedRotation(float start_degrees, | 93 InterpolatedRotation(float start_degrees, |
94 float end_degrees, | 94 float end_degrees, |
95 float start_time, | 95 float start_time, |
96 float end_time); | 96 float end_time); |
97 virtual ~InterpolatedRotation(); | 97 virtual ~InterpolatedRotation(); |
98 | 98 |
99 protected: | 99 protected: |
100 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; | 100 virtual gfx::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; |
101 | 101 |
102 private: | 102 private: |
103 const float start_degrees_; | 103 const float start_degrees_; |
104 const float end_degrees_; | 104 const float end_degrees_; |
105 | 105 |
106 DISALLOW_COPY_AND_ASSIGN(InterpolatedRotation); | 106 DISALLOW_COPY_AND_ASSIGN(InterpolatedRotation); |
107 }; | 107 }; |
108 | 108 |
109 /////////////////////////////////////////////////////////////////////////////// | 109 /////////////////////////////////////////////////////////////////////////////// |
110 // class InterpolatedAxisAngleRotation | 110 // class InterpolatedAxisAngleRotation |
111 // | 111 // |
112 // Represents an animated rotation. | 112 // Represents an animated rotation. |
113 // | 113 // |
114 /////////////////////////////////////////////////////////////////////////////// | 114 /////////////////////////////////////////////////////////////////////////////// |
115 class UI_EXPORT InterpolatedAxisAngleRotation : public InterpolatedTransform { | 115 class UI_EXPORT InterpolatedAxisAngleRotation : public InterpolatedTransform { |
116 public: | 116 public: |
117 InterpolatedAxisAngleRotation(gfx::Point3f axis, | 117 InterpolatedAxisAngleRotation(gfx::Point3f axis, |
118 float start_degrees, | 118 float start_degrees, |
119 float end_degrees); | 119 float end_degrees); |
120 InterpolatedAxisAngleRotation(gfx::Point3f axis, | 120 InterpolatedAxisAngleRotation(gfx::Point3f axis, |
121 float start_degrees, | 121 float start_degrees, |
122 float end_degrees, | 122 float end_degrees, |
123 float start_time, | 123 float start_time, |
124 float end_time); | 124 float end_time); |
125 virtual ~InterpolatedAxisAngleRotation(); | 125 virtual ~InterpolatedAxisAngleRotation(); |
126 | 126 |
127 protected: | 127 protected: |
128 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; | 128 virtual gfx::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; |
129 | 129 |
130 private: | 130 private: |
131 gfx::Point3f axis_; | 131 gfx::Point3f axis_; |
132 const float start_degrees_; | 132 const float start_degrees_; |
133 const float end_degrees_; | 133 const float end_degrees_; |
134 | 134 |
135 DISALLOW_COPY_AND_ASSIGN(InterpolatedAxisAngleRotation); | 135 DISALLOW_COPY_AND_ASSIGN(InterpolatedAxisAngleRotation); |
136 }; | 136 }; |
137 | 137 |
138 /////////////////////////////////////////////////////////////////////////////// | 138 /////////////////////////////////////////////////////////////////////////////// |
139 // class InterpolatedScale | 139 // class InterpolatedScale |
140 // | 140 // |
141 // Represents an animated scale. | 141 // Represents an animated scale. |
142 // | 142 // |
143 /////////////////////////////////////////////////////////////////////////////// | 143 /////////////////////////////////////////////////////////////////////////////// |
144 class UI_EXPORT InterpolatedScale : public InterpolatedTransform { | 144 class UI_EXPORT InterpolatedScale : public InterpolatedTransform { |
145 public: | 145 public: |
146 InterpolatedScale(float start_scale, float end_scale); | 146 InterpolatedScale(float start_scale, float end_scale); |
147 InterpolatedScale(float start_scale, float end_scale, | 147 InterpolatedScale(float start_scale, float end_scale, |
148 float start_time, float end_time); | 148 float start_time, float end_time); |
149 InterpolatedScale(const gfx::Point3f& start_scale, | 149 InterpolatedScale(const gfx::Point3f& start_scale, |
150 const gfx::Point3f& end_scale); | 150 const gfx::Point3f& end_scale); |
151 InterpolatedScale(const gfx::Point3f& start_scale, | 151 InterpolatedScale(const gfx::Point3f& start_scale, |
152 const gfx::Point3f& end_scale, | 152 const gfx::Point3f& end_scale, |
153 float start_time, | 153 float start_time, |
154 float end_time); | 154 float end_time); |
155 virtual ~InterpolatedScale(); | 155 virtual ~InterpolatedScale(); |
156 | 156 |
157 protected: | 157 protected: |
158 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; | 158 virtual gfx::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; |
159 | 159 |
160 private: | 160 private: |
161 const gfx::Point3f start_scale_; | 161 const gfx::Point3f start_scale_; |
162 const gfx::Point3f end_scale_; | 162 const gfx::Point3f end_scale_; |
163 | 163 |
164 DISALLOW_COPY_AND_ASSIGN(InterpolatedScale); | 164 DISALLOW_COPY_AND_ASSIGN(InterpolatedScale); |
165 }; | 165 }; |
166 | 166 |
167 class UI_EXPORT InterpolatedTranslation : public InterpolatedTransform { | 167 class UI_EXPORT InterpolatedTranslation : public InterpolatedTransform { |
168 public: | 168 public: |
169 InterpolatedTranslation(const gfx::Point& start_pos, | 169 InterpolatedTranslation(const gfx::Point& start_pos, |
170 const gfx::Point& end_pos); | 170 const gfx::Point& end_pos); |
171 InterpolatedTranslation(const gfx::Point& start_pos, | 171 InterpolatedTranslation(const gfx::Point& start_pos, |
172 const gfx::Point& end_pos, | 172 const gfx::Point& end_pos, |
173 float start_time, | 173 float start_time, |
174 float end_time); | 174 float end_time); |
175 virtual ~InterpolatedTranslation(); | 175 virtual ~InterpolatedTranslation(); |
176 | 176 |
177 protected: | 177 protected: |
178 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; | 178 virtual gfx::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; |
179 | 179 |
180 private: | 180 private: |
181 const gfx::Point start_pos_; | 181 const gfx::Point start_pos_; |
182 const gfx::Point end_pos_; | 182 const gfx::Point end_pos_; |
183 | 183 |
184 DISALLOW_COPY_AND_ASSIGN(InterpolatedTranslation); | 184 DISALLOW_COPY_AND_ASSIGN(InterpolatedTranslation); |
185 }; | 185 }; |
186 | 186 |
187 /////////////////////////////////////////////////////////////////////////////// | 187 /////////////////////////////////////////////////////////////////////////////// |
188 // class InterpolatedConstantTransform | 188 // class InterpolatedConstantTransform |
189 // | 189 // |
190 // Represents a transform that is constant over time. This is only useful when | 190 // Represents a transform that is constant over time. This is only useful when |
191 // composed with other interpolated transforms. | 191 // composed with other interpolated transforms. |
192 // | 192 // |
193 // See InterpolatedTransformAboutPivot for an example of its usage. | 193 // See InterpolatedTransformAboutPivot for an example of its usage. |
194 // | 194 // |
195 /////////////////////////////////////////////////////////////////////////////// | 195 /////////////////////////////////////////////////////////////////////////////// |
196 class UI_EXPORT InterpolatedConstantTransform : public InterpolatedTransform { | 196 class UI_EXPORT InterpolatedConstantTransform : public InterpolatedTransform { |
197 public: | 197 public: |
198 InterpolatedConstantTransform(const ui::Transform& transform); | 198 InterpolatedConstantTransform(const gfx::Transform& transform); |
199 virtual ~InterpolatedConstantTransform(); | 199 virtual ~InterpolatedConstantTransform(); |
200 | 200 |
201 protected: | 201 protected: |
202 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; | 202 virtual gfx::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; |
203 | 203 |
204 private: | 204 private: |
205 const ui::Transform transform_; | 205 const gfx::Transform transform_; |
206 | 206 |
207 DISALLOW_COPY_AND_ASSIGN(InterpolatedConstantTransform); | 207 DISALLOW_COPY_AND_ASSIGN(InterpolatedConstantTransform); |
208 }; | 208 }; |
209 | 209 |
210 /////////////////////////////////////////////////////////////////////////////// | 210 /////////////////////////////////////////////////////////////////////////////// |
211 // class InterpolatedTransformAboutPivot | 211 // class InterpolatedTransformAboutPivot |
212 // | 212 // |
213 // Represents an animated transform with a transformed origin. Essentially, | 213 // Represents an animated transform with a transformed origin. Essentially, |
214 // at each time, t, the interpolated transform is created by composing | 214 // at each time, t, the interpolated transform is created by composing |
215 // P * T * P^-1 where P is a constant transform to the new origin. | 215 // P * T * P^-1 where P is a constant transform to the new origin. |
216 // | 216 // |
217 /////////////////////////////////////////////////////////////////////////////// | 217 /////////////////////////////////////////////////////////////////////////////// |
218 class UI_EXPORT InterpolatedTransformAboutPivot : public InterpolatedTransform { | 218 class UI_EXPORT InterpolatedTransformAboutPivot : public InterpolatedTransform { |
219 public: | 219 public: |
220 // Takes ownership of the passed transform. | 220 // Takes ownership of the passed transform. |
221 InterpolatedTransformAboutPivot(const gfx::Point& pivot, | 221 InterpolatedTransformAboutPivot(const gfx::Point& pivot, |
222 InterpolatedTransform* transform); | 222 InterpolatedTransform* transform); |
223 | 223 |
224 // Takes ownership of the passed transform. | 224 // Takes ownership of the passed transform. |
225 InterpolatedTransformAboutPivot(const gfx::Point& pivot, | 225 InterpolatedTransformAboutPivot(const gfx::Point& pivot, |
226 InterpolatedTransform* transform, | 226 InterpolatedTransform* transform, |
227 float start_time, | 227 float start_time, |
228 float end_time); | 228 float end_time); |
229 virtual ~InterpolatedTransformAboutPivot(); | 229 virtual ~InterpolatedTransformAboutPivot(); |
230 | 230 |
231 protected: | 231 protected: |
232 virtual Transform InterpolateButDoNotCompose(float t) const OVERRIDE; | 232 virtual gfx::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; |
233 | 233 |
234 private: | 234 private: |
235 void Init(const gfx::Point& pivot, InterpolatedTransform* transform); | 235 void Init(const gfx::Point& pivot, InterpolatedTransform* transform); |
236 | 236 |
237 scoped_ptr<InterpolatedTransform> transform_; | 237 scoped_ptr<InterpolatedTransform> transform_; |
238 | 238 |
239 DISALLOW_COPY_AND_ASSIGN(InterpolatedTransformAboutPivot); | 239 DISALLOW_COPY_AND_ASSIGN(InterpolatedTransformAboutPivot); |
240 }; | 240 }; |
241 | 241 |
242 class UI_EXPORT InterpolatedTRSTransform : public InterpolatedTransform { | 242 class UI_EXPORT InterpolatedTRSTransform : public InterpolatedTransform { |
243 public: | 243 public: |
244 InterpolatedTRSTransform(const Transform& start_transform, | 244 InterpolatedTRSTransform(const gfx::Transform& start_transform, |
245 const Transform& end_transform); | 245 const gfx::Transform& end_transform); |
246 | 246 |
247 InterpolatedTRSTransform(const Transform& start_transform, | 247 InterpolatedTRSTransform(const gfx::Transform& start_transform, |
248 const Transform& end_transform, | 248 const gfx::Transform& end_transform, |
249 float start_time, | 249 float start_time, |
250 float end_time); | 250 float end_time); |
251 | 251 |
252 virtual ~InterpolatedTRSTransform(); | 252 virtual ~InterpolatedTRSTransform(); |
253 | 253 |
254 protected: | 254 protected: |
255 virtual Transform InterpolateButDoNotCompose(float t) const OVERRIDE; | 255 virtual gfx::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; |
256 | 256 |
257 private: | 257 private: |
258 void Init(const ui::Transform& start_transform, | 258 void Init(const gfx::Transform& start_transform, |
259 const ui::Transform& end_transform); | 259 const gfx::Transform& end_transform); |
260 | 260 |
261 scoped_ptr<InterpolatedTransform> transform_; | 261 scoped_ptr<InterpolatedTransform> transform_; |
262 }; | 262 }; |
263 | 263 |
264 } // namespace ui | 264 } // namespace ui |
265 | 265 |
266 #endif // UI_GFX_INTERPOLATED_TRANSFORM_H_ | 266 #endif // UI_GFX_INTERPOLATED_TRANSFORM_H_ |
OLD | NEW |