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 #include "ui/compositor/layer_animation_element.h" | 5 #include "ui/compositor/layer_animation_element.h" |
6 | 6 |
7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
8 #include "cc/animation/animation.h" | 8 #include "cc/animation/animation.h" |
9 #include "cc/animation/animation_id_provider.h" | 9 #include "cc/animation/animation_id_provider.h" |
10 #include "ui/compositor/float_animation_curve_adapter.h" | 10 #include "ui/compositor/float_animation_curve_adapter.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 const int kSlowDurationScaleMultiplier = 4; | 25 const int kSlowDurationScaleMultiplier = 4; |
26 const int kFastDurationScaleDivisor = 4; | 26 const int kFastDurationScaleDivisor = 4; |
27 const int kNonZeroDurationScaleDivisor = 20; | 27 const int kNonZeroDurationScaleDivisor = 20; |
28 | 28 |
29 // Pause ----------------------------------------------------------------------- | 29 // Pause ----------------------------------------------------------------------- |
30 class Pause : public LayerAnimationElement { | 30 class Pause : public LayerAnimationElement { |
31 public: | 31 public: |
32 Pause(AnimatableProperties properties, base::TimeDelta duration) | 32 Pause(AnimatableProperties properties, base::TimeDelta duration) |
33 : LayerAnimationElement(properties, duration) { | 33 : LayerAnimationElement(properties, duration) { |
34 } | 34 } |
35 virtual ~Pause() {} | 35 ~Pause() override {} |
36 | 36 |
37 private: | 37 private: |
38 virtual void OnStart(LayerAnimationDelegate* delegate) override {} | 38 void OnStart(LayerAnimationDelegate* delegate) override {} |
39 virtual bool OnProgress(double t, | 39 bool OnProgress(double t, LayerAnimationDelegate* delegate) override { |
40 LayerAnimationDelegate* delegate) override { | |
41 return false; | 40 return false; |
42 } | 41 } |
43 virtual void OnGetTarget(TargetValue* target) const override {} | 42 void OnGetTarget(TargetValue* target) const override {} |
44 virtual void OnAbort(LayerAnimationDelegate* delegate) override {} | 43 void OnAbort(LayerAnimationDelegate* delegate) override {} |
45 | 44 |
46 DISALLOW_COPY_AND_ASSIGN(Pause); | 45 DISALLOW_COPY_AND_ASSIGN(Pause); |
47 }; | 46 }; |
48 | 47 |
49 // TransformTransition --------------------------------------------------------- | 48 // TransformTransition --------------------------------------------------------- |
50 | 49 |
51 class TransformTransition : public LayerAnimationElement { | 50 class TransformTransition : public LayerAnimationElement { |
52 public: | 51 public: |
53 TransformTransition(const gfx::Transform& target, base::TimeDelta duration) | 52 TransformTransition(const gfx::Transform& target, base::TimeDelta duration) |
54 : LayerAnimationElement(TRANSFORM, duration), | 53 : LayerAnimationElement(TRANSFORM, duration), |
55 target_(target) { | 54 target_(target) { |
56 } | 55 } |
57 virtual ~TransformTransition() {} | 56 ~TransformTransition() override {} |
58 | 57 |
59 protected: | 58 protected: |
60 virtual void OnStart(LayerAnimationDelegate* delegate) override { | 59 void OnStart(LayerAnimationDelegate* delegate) override { |
61 start_ = delegate->GetTransformForAnimation(); | 60 start_ = delegate->GetTransformForAnimation(); |
62 } | 61 } |
63 | 62 |
64 virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) override { | 63 bool OnProgress(double t, LayerAnimationDelegate* delegate) override { |
65 delegate->SetTransformFromAnimation( | 64 delegate->SetTransformFromAnimation( |
66 gfx::Tween::TransformValueBetween(t, start_, target_)); | 65 gfx::Tween::TransformValueBetween(t, start_, target_)); |
67 return true; | 66 return true; |
68 } | 67 } |
69 | 68 |
70 virtual void OnGetTarget(TargetValue* target) const override { | 69 void OnGetTarget(TargetValue* target) const override { |
71 target->transform = target_; | 70 target->transform = target_; |
72 } | 71 } |
73 | 72 |
74 virtual void OnAbort(LayerAnimationDelegate* delegate) override {} | 73 void OnAbort(LayerAnimationDelegate* delegate) override {} |
75 | 74 |
76 private: | 75 private: |
77 gfx::Transform start_; | 76 gfx::Transform start_; |
78 const gfx::Transform target_; | 77 const gfx::Transform target_; |
79 | 78 |
80 DISALLOW_COPY_AND_ASSIGN(TransformTransition); | 79 DISALLOW_COPY_AND_ASSIGN(TransformTransition); |
81 }; | 80 }; |
82 | 81 |
83 // InterpolatedTransformTransition --------------------------------------------- | 82 // InterpolatedTransformTransition --------------------------------------------- |
84 | 83 |
85 class InterpolatedTransformTransition : public LayerAnimationElement { | 84 class InterpolatedTransformTransition : public LayerAnimationElement { |
86 public: | 85 public: |
87 InterpolatedTransformTransition(InterpolatedTransform* interpolated_transform, | 86 InterpolatedTransformTransition(InterpolatedTransform* interpolated_transform, |
88 base::TimeDelta duration) | 87 base::TimeDelta duration) |
89 : LayerAnimationElement(TRANSFORM, duration), | 88 : LayerAnimationElement(TRANSFORM, duration), |
90 interpolated_transform_(interpolated_transform) { | 89 interpolated_transform_(interpolated_transform) { |
91 } | 90 } |
92 virtual ~InterpolatedTransformTransition() {} | 91 ~InterpolatedTransformTransition() override {} |
93 | 92 |
94 protected: | 93 protected: |
95 virtual void OnStart(LayerAnimationDelegate* delegate) override { | 94 void OnStart(LayerAnimationDelegate* delegate) override {} |
96 } | |
97 | 95 |
98 virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) override { | 96 bool OnProgress(double t, LayerAnimationDelegate* delegate) override { |
99 delegate->SetTransformFromAnimation( | 97 delegate->SetTransformFromAnimation( |
100 interpolated_transform_->Interpolate(static_cast<float>(t))); | 98 interpolated_transform_->Interpolate(static_cast<float>(t))); |
101 return true; | 99 return true; |
102 } | 100 } |
103 | 101 |
104 virtual void OnGetTarget(TargetValue* target) const override { | 102 void OnGetTarget(TargetValue* target) const override { |
105 target->transform = interpolated_transform_->Interpolate(1.0f); | 103 target->transform = interpolated_transform_->Interpolate(1.0f); |
106 } | 104 } |
107 | 105 |
108 virtual void OnAbort(LayerAnimationDelegate* delegate) override {} | 106 void OnAbort(LayerAnimationDelegate* delegate) override {} |
109 | 107 |
110 private: | 108 private: |
111 scoped_ptr<InterpolatedTransform> interpolated_transform_; | 109 scoped_ptr<InterpolatedTransform> interpolated_transform_; |
112 | 110 |
113 DISALLOW_COPY_AND_ASSIGN(InterpolatedTransformTransition); | 111 DISALLOW_COPY_AND_ASSIGN(InterpolatedTransformTransition); |
114 }; | 112 }; |
115 | 113 |
116 // BoundsTransition ------------------------------------------------------------ | 114 // BoundsTransition ------------------------------------------------------------ |
117 | 115 |
118 class BoundsTransition : public LayerAnimationElement { | 116 class BoundsTransition : public LayerAnimationElement { |
119 public: | 117 public: |
120 BoundsTransition(const gfx::Rect& target, base::TimeDelta duration) | 118 BoundsTransition(const gfx::Rect& target, base::TimeDelta duration) |
121 : LayerAnimationElement(BOUNDS, duration), | 119 : LayerAnimationElement(BOUNDS, duration), |
122 target_(target) { | 120 target_(target) { |
123 } | 121 } |
124 virtual ~BoundsTransition() {} | 122 ~BoundsTransition() override {} |
125 | 123 |
126 protected: | 124 protected: |
127 virtual void OnStart(LayerAnimationDelegate* delegate) override { | 125 void OnStart(LayerAnimationDelegate* delegate) override { |
128 start_ = delegate->GetBoundsForAnimation(); | 126 start_ = delegate->GetBoundsForAnimation(); |
129 } | 127 } |
130 | 128 |
131 virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) override { | 129 bool OnProgress(double t, LayerAnimationDelegate* delegate) override { |
132 delegate->SetBoundsFromAnimation( | 130 delegate->SetBoundsFromAnimation( |
133 gfx::Tween::RectValueBetween(t, start_, target_)); | 131 gfx::Tween::RectValueBetween(t, start_, target_)); |
134 return true; | 132 return true; |
135 } | 133 } |
136 | 134 |
137 virtual void OnGetTarget(TargetValue* target) const override { | 135 void OnGetTarget(TargetValue* target) const override { |
138 target->bounds = target_; | 136 target->bounds = target_; |
139 } | 137 } |
140 | 138 |
141 virtual void OnAbort(LayerAnimationDelegate* delegate) override {} | 139 void OnAbort(LayerAnimationDelegate* delegate) override {} |
142 | 140 |
143 private: | 141 private: |
144 gfx::Rect start_; | 142 gfx::Rect start_; |
145 const gfx::Rect target_; | 143 const gfx::Rect target_; |
146 | 144 |
147 DISALLOW_COPY_AND_ASSIGN(BoundsTransition); | 145 DISALLOW_COPY_AND_ASSIGN(BoundsTransition); |
148 }; | 146 }; |
149 | 147 |
150 // OpacityTransition ----------------------------------------------------------- | 148 // OpacityTransition ----------------------------------------------------------- |
151 | 149 |
152 class OpacityTransition : public LayerAnimationElement { | 150 class OpacityTransition : public LayerAnimationElement { |
153 public: | 151 public: |
154 OpacityTransition(float target, base::TimeDelta duration) | 152 OpacityTransition(float target, base::TimeDelta duration) |
155 : LayerAnimationElement(OPACITY, duration), | 153 : LayerAnimationElement(OPACITY, duration), |
156 start_(0.0f), | 154 start_(0.0f), |
157 target_(target) { | 155 target_(target) { |
158 } | 156 } |
159 virtual ~OpacityTransition() {} | 157 ~OpacityTransition() override {} |
160 | 158 |
161 protected: | 159 protected: |
162 virtual void OnStart(LayerAnimationDelegate* delegate) override { | 160 void OnStart(LayerAnimationDelegate* delegate) override { |
163 start_ = delegate->GetOpacityForAnimation(); | 161 start_ = delegate->GetOpacityForAnimation(); |
164 } | 162 } |
165 | 163 |
166 virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) override { | 164 bool OnProgress(double t, LayerAnimationDelegate* delegate) override { |
167 delegate->SetOpacityFromAnimation( | 165 delegate->SetOpacityFromAnimation( |
168 gfx::Tween::FloatValueBetween(t, start_, target_)); | 166 gfx::Tween::FloatValueBetween(t, start_, target_)); |
169 return true; | 167 return true; |
170 } | 168 } |
171 | 169 |
172 virtual void OnGetTarget(TargetValue* target) const override { | 170 void OnGetTarget(TargetValue* target) const override { |
173 target->opacity = target_; | 171 target->opacity = target_; |
174 } | 172 } |
175 | 173 |
176 virtual void OnAbort(LayerAnimationDelegate* delegate) override {} | 174 void OnAbort(LayerAnimationDelegate* delegate) override {} |
177 | 175 |
178 private: | 176 private: |
179 float start_; | 177 float start_; |
180 const float target_; | 178 const float target_; |
181 | 179 |
182 DISALLOW_COPY_AND_ASSIGN(OpacityTransition); | 180 DISALLOW_COPY_AND_ASSIGN(OpacityTransition); |
183 }; | 181 }; |
184 | 182 |
185 // VisibilityTransition -------------------------------------------------------- | 183 // VisibilityTransition -------------------------------------------------------- |
186 | 184 |
187 class VisibilityTransition : public LayerAnimationElement { | 185 class VisibilityTransition : public LayerAnimationElement { |
188 public: | 186 public: |
189 VisibilityTransition(bool target, base::TimeDelta duration) | 187 VisibilityTransition(bool target, base::TimeDelta duration) |
190 : LayerAnimationElement(VISIBILITY, duration), | 188 : LayerAnimationElement(VISIBILITY, duration), |
191 start_(false), | 189 start_(false), |
192 target_(target) { | 190 target_(target) { |
193 } | 191 } |
194 virtual ~VisibilityTransition() {} | 192 ~VisibilityTransition() override {} |
195 | 193 |
196 protected: | 194 protected: |
197 virtual void OnStart(LayerAnimationDelegate* delegate) override { | 195 void OnStart(LayerAnimationDelegate* delegate) override { |
198 start_ = delegate->GetVisibilityForAnimation(); | 196 start_ = delegate->GetVisibilityForAnimation(); |
199 } | 197 } |
200 | 198 |
201 virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) override { | 199 bool OnProgress(double t, LayerAnimationDelegate* delegate) override { |
202 delegate->SetVisibilityFromAnimation(t == 1.0 ? target_ : start_); | 200 delegate->SetVisibilityFromAnimation(t == 1.0 ? target_ : start_); |
203 return t == 1.0; | 201 return t == 1.0; |
204 } | 202 } |
205 | 203 |
206 virtual void OnGetTarget(TargetValue* target) const override { | 204 void OnGetTarget(TargetValue* target) const override { |
207 target->visibility = target_; | 205 target->visibility = target_; |
208 } | 206 } |
209 | 207 |
210 virtual void OnAbort(LayerAnimationDelegate* delegate) override {} | 208 void OnAbort(LayerAnimationDelegate* delegate) override {} |
211 | 209 |
212 private: | 210 private: |
213 bool start_; | 211 bool start_; |
214 const bool target_; | 212 const bool target_; |
215 | 213 |
216 DISALLOW_COPY_AND_ASSIGN(VisibilityTransition); | 214 DISALLOW_COPY_AND_ASSIGN(VisibilityTransition); |
217 }; | 215 }; |
218 | 216 |
219 // BrightnessTransition -------------------------------------------------------- | 217 // BrightnessTransition -------------------------------------------------------- |
220 | 218 |
221 class BrightnessTransition : public LayerAnimationElement { | 219 class BrightnessTransition : public LayerAnimationElement { |
222 public: | 220 public: |
223 BrightnessTransition(float target, base::TimeDelta duration) | 221 BrightnessTransition(float target, base::TimeDelta duration) |
224 : LayerAnimationElement(BRIGHTNESS, duration), | 222 : LayerAnimationElement(BRIGHTNESS, duration), |
225 start_(0.0f), | 223 start_(0.0f), |
226 target_(target) { | 224 target_(target) { |
227 } | 225 } |
228 virtual ~BrightnessTransition() {} | 226 ~BrightnessTransition() override {} |
229 | 227 |
230 protected: | 228 protected: |
231 virtual void OnStart(LayerAnimationDelegate* delegate) override { | 229 void OnStart(LayerAnimationDelegate* delegate) override { |
232 start_ = delegate->GetBrightnessForAnimation(); | 230 start_ = delegate->GetBrightnessForAnimation(); |
233 } | 231 } |
234 | 232 |
235 virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) override { | 233 bool OnProgress(double t, LayerAnimationDelegate* delegate) override { |
236 delegate->SetBrightnessFromAnimation( | 234 delegate->SetBrightnessFromAnimation( |
237 gfx::Tween::FloatValueBetween(t, start_, target_)); | 235 gfx::Tween::FloatValueBetween(t, start_, target_)); |
238 return true; | 236 return true; |
239 } | 237 } |
240 | 238 |
241 virtual void OnGetTarget(TargetValue* target) const override { | 239 void OnGetTarget(TargetValue* target) const override { |
242 target->brightness = target_; | 240 target->brightness = target_; |
243 } | 241 } |
244 | 242 |
245 virtual void OnAbort(LayerAnimationDelegate* delegate) override {} | 243 void OnAbort(LayerAnimationDelegate* delegate) override {} |
246 | 244 |
247 private: | 245 private: |
248 float start_; | 246 float start_; |
249 const float target_; | 247 const float target_; |
250 | 248 |
251 DISALLOW_COPY_AND_ASSIGN(BrightnessTransition); | 249 DISALLOW_COPY_AND_ASSIGN(BrightnessTransition); |
252 }; | 250 }; |
253 | 251 |
254 // GrayscaleTransition --------------------------------------------------------- | 252 // GrayscaleTransition --------------------------------------------------------- |
255 | 253 |
256 class GrayscaleTransition : public LayerAnimationElement { | 254 class GrayscaleTransition : public LayerAnimationElement { |
257 public: | 255 public: |
258 GrayscaleTransition(float target, base::TimeDelta duration) | 256 GrayscaleTransition(float target, base::TimeDelta duration) |
259 : LayerAnimationElement(GRAYSCALE, duration), | 257 : LayerAnimationElement(GRAYSCALE, duration), |
260 start_(0.0f), | 258 start_(0.0f), |
261 target_(target) { | 259 target_(target) { |
262 } | 260 } |
263 virtual ~GrayscaleTransition() {} | 261 ~GrayscaleTransition() override {} |
264 | 262 |
265 protected: | 263 protected: |
266 virtual void OnStart(LayerAnimationDelegate* delegate) override { | 264 void OnStart(LayerAnimationDelegate* delegate) override { |
267 start_ = delegate->GetGrayscaleForAnimation(); | 265 start_ = delegate->GetGrayscaleForAnimation(); |
268 } | 266 } |
269 | 267 |
270 virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) override { | 268 bool OnProgress(double t, LayerAnimationDelegate* delegate) override { |
271 delegate->SetGrayscaleFromAnimation( | 269 delegate->SetGrayscaleFromAnimation( |
272 gfx::Tween::FloatValueBetween(t, start_, target_)); | 270 gfx::Tween::FloatValueBetween(t, start_, target_)); |
273 return true; | 271 return true; |
274 } | 272 } |
275 | 273 |
276 virtual void OnGetTarget(TargetValue* target) const override { | 274 void OnGetTarget(TargetValue* target) const override { |
277 target->grayscale = target_; | 275 target->grayscale = target_; |
278 } | 276 } |
279 | 277 |
280 virtual void OnAbort(LayerAnimationDelegate* delegate) override {} | 278 void OnAbort(LayerAnimationDelegate* delegate) override {} |
281 | 279 |
282 private: | 280 private: |
283 float start_; | 281 float start_; |
284 const float target_; | 282 const float target_; |
285 | 283 |
286 DISALLOW_COPY_AND_ASSIGN(GrayscaleTransition); | 284 DISALLOW_COPY_AND_ASSIGN(GrayscaleTransition); |
287 }; | 285 }; |
288 | 286 |
289 // ColorTransition ------------------------------------------------------------- | 287 // ColorTransition ------------------------------------------------------------- |
290 | 288 |
291 class ColorTransition : public LayerAnimationElement { | 289 class ColorTransition : public LayerAnimationElement { |
292 public: | 290 public: |
293 ColorTransition(SkColor target, base::TimeDelta duration) | 291 ColorTransition(SkColor target, base::TimeDelta duration) |
294 : LayerAnimationElement(COLOR, duration), | 292 : LayerAnimationElement(COLOR, duration), |
295 start_(SK_ColorBLACK), | 293 start_(SK_ColorBLACK), |
296 target_(target) { | 294 target_(target) { |
297 } | 295 } |
298 virtual ~ColorTransition() {} | 296 ~ColorTransition() override {} |
299 | 297 |
300 protected: | 298 protected: |
301 virtual void OnStart(LayerAnimationDelegate* delegate) override { | 299 void OnStart(LayerAnimationDelegate* delegate) override { |
302 start_ = delegate->GetColorForAnimation(); | 300 start_ = delegate->GetColorForAnimation(); |
303 } | 301 } |
304 | 302 |
305 virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) override { | 303 bool OnProgress(double t, LayerAnimationDelegate* delegate) override { |
306 delegate->SetColorFromAnimation( | 304 delegate->SetColorFromAnimation( |
307 gfx::Tween::ColorValueBetween(t, start_, target_)); | 305 gfx::Tween::ColorValueBetween(t, start_, target_)); |
308 return true; | 306 return true; |
309 } | 307 } |
310 | 308 |
311 virtual void OnGetTarget(TargetValue* target) const override { | 309 void OnGetTarget(TargetValue* target) const override { |
312 target->color = target_; | 310 target->color = target_; |
313 } | 311 } |
314 | 312 |
315 virtual void OnAbort(LayerAnimationDelegate* delegate) override {} | 313 void OnAbort(LayerAnimationDelegate* delegate) override {} |
316 | 314 |
317 private: | 315 private: |
318 SkColor start_; | 316 SkColor start_; |
319 const SkColor target_; | 317 const SkColor target_; |
320 | 318 |
321 DISALLOW_COPY_AND_ASSIGN(ColorTransition); | 319 DISALLOW_COPY_AND_ASSIGN(ColorTransition); |
322 }; | 320 }; |
323 | 321 |
324 // ThreadedLayerAnimationElement ----------------------------------------------- | 322 // ThreadedLayerAnimationElement ----------------------------------------------- |
325 | 323 |
326 class ThreadedLayerAnimationElement : public LayerAnimationElement { | 324 class ThreadedLayerAnimationElement : public LayerAnimationElement { |
327 public: | 325 public: |
328 ThreadedLayerAnimationElement(AnimatableProperties properties, | 326 ThreadedLayerAnimationElement(AnimatableProperties properties, |
329 base::TimeDelta duration) | 327 base::TimeDelta duration) |
330 : LayerAnimationElement(properties, duration) { | 328 : LayerAnimationElement(properties, duration) { |
331 } | 329 } |
332 virtual ~ThreadedLayerAnimationElement() {} | 330 ~ThreadedLayerAnimationElement() override {} |
333 | 331 |
334 virtual bool IsThreaded() const override { | 332 bool IsThreaded() const override { return (duration() != base::TimeDelta()); } |
335 return (duration() != base::TimeDelta()); | |
336 } | |
337 | 333 |
338 protected: | 334 protected: |
339 explicit ThreadedLayerAnimationElement(const LayerAnimationElement& element) | 335 explicit ThreadedLayerAnimationElement(const LayerAnimationElement& element) |
340 : LayerAnimationElement(element) { | 336 : LayerAnimationElement(element) { |
341 } | 337 } |
342 | 338 |
343 virtual bool OnProgress(double t, | 339 bool OnProgress(double t, LayerAnimationDelegate* delegate) override { |
344 LayerAnimationDelegate* delegate) override { | |
345 if (t < 1.0) | 340 if (t < 1.0) |
346 return false; | 341 return false; |
347 | 342 |
348 if (Started()) { | 343 if (Started()) { |
349 delegate->RemoveThreadedAnimation(animation_id()); | 344 delegate->RemoveThreadedAnimation(animation_id()); |
350 } | 345 } |
351 | 346 |
352 OnEnd(delegate); | 347 OnEnd(delegate); |
353 return true; | 348 return true; |
354 } | 349 } |
355 | 350 |
356 virtual void OnAbort(LayerAnimationDelegate* delegate) override { | 351 void OnAbort(LayerAnimationDelegate* delegate) override { |
357 if (delegate && Started()) { | 352 if (delegate && Started()) { |
358 delegate->RemoveThreadedAnimation(animation_id()); | 353 delegate->RemoveThreadedAnimation(animation_id()); |
359 } | 354 } |
360 } | 355 } |
361 | 356 |
362 virtual void RequestEffectiveStart( | 357 void RequestEffectiveStart(LayerAnimationDelegate* delegate) override { |
363 LayerAnimationDelegate* delegate) override { | |
364 DCHECK(animation_group_id()); | 358 DCHECK(animation_group_id()); |
365 if (duration() == base::TimeDelta()) { | 359 if (duration() == base::TimeDelta()) { |
366 set_effective_start_time(requested_start_time()); | 360 set_effective_start_time(requested_start_time()); |
367 return; | 361 return; |
368 } | 362 } |
369 set_effective_start_time(base::TimeTicks()); | 363 set_effective_start_time(base::TimeTicks()); |
370 scoped_ptr<cc::Animation> animation = CreateCCAnimation(); | 364 scoped_ptr<cc::Animation> animation = CreateCCAnimation(); |
371 animation->set_needs_synchronized_start_time(true); | 365 animation->set_needs_synchronized_start_time(true); |
372 delegate->AddThreadedAnimation(animation.Pass()); | 366 delegate->AddThreadedAnimation(animation.Pass()); |
373 } | 367 } |
374 | 368 |
375 virtual void OnEnd(LayerAnimationDelegate* delegate) = 0; | 369 virtual void OnEnd(LayerAnimationDelegate* delegate) = 0; |
376 | 370 |
377 virtual scoped_ptr<cc::Animation> CreateCCAnimation() = 0; | 371 virtual scoped_ptr<cc::Animation> CreateCCAnimation() = 0; |
378 | 372 |
379 private: | 373 private: |
380 DISALLOW_COPY_AND_ASSIGN(ThreadedLayerAnimationElement); | 374 DISALLOW_COPY_AND_ASSIGN(ThreadedLayerAnimationElement); |
381 }; | 375 }; |
382 | 376 |
383 // ThreadedOpacityTransition --------------------------------------------------- | 377 // ThreadedOpacityTransition --------------------------------------------------- |
384 | 378 |
385 class ThreadedOpacityTransition : public ThreadedLayerAnimationElement { | 379 class ThreadedOpacityTransition : public ThreadedLayerAnimationElement { |
386 public: | 380 public: |
387 ThreadedOpacityTransition(float target, base::TimeDelta duration) | 381 ThreadedOpacityTransition(float target, base::TimeDelta duration) |
388 : ThreadedLayerAnimationElement(OPACITY, duration), | 382 : ThreadedLayerAnimationElement(OPACITY, duration), |
389 start_(0.0f), | 383 start_(0.0f), |
390 target_(target) { | 384 target_(target) { |
391 } | 385 } |
392 virtual ~ThreadedOpacityTransition() {} | 386 ~ThreadedOpacityTransition() override {} |
393 | 387 |
394 protected: | 388 protected: |
395 virtual void OnStart(LayerAnimationDelegate* delegate) override { | 389 void OnStart(LayerAnimationDelegate* delegate) override { |
396 start_ = delegate->GetOpacityForAnimation(); | 390 start_ = delegate->GetOpacityForAnimation(); |
397 } | 391 } |
398 | 392 |
399 virtual void OnAbort(LayerAnimationDelegate* delegate) override { | 393 void OnAbort(LayerAnimationDelegate* delegate) override { |
400 if (delegate && Started()) { | 394 if (delegate && Started()) { |
401 ThreadedLayerAnimationElement::OnAbort(delegate); | 395 ThreadedLayerAnimationElement::OnAbort(delegate); |
402 delegate->SetOpacityFromAnimation(gfx::Tween::FloatValueBetween( | 396 delegate->SetOpacityFromAnimation(gfx::Tween::FloatValueBetween( |
403 gfx::Tween::CalculateValue(tween_type(), last_progressed_fraction()), | 397 gfx::Tween::CalculateValue(tween_type(), last_progressed_fraction()), |
404 start_, | 398 start_, |
405 target_)); | 399 target_)); |
406 } | 400 } |
407 } | 401 } |
408 | 402 |
409 virtual void OnEnd(LayerAnimationDelegate* delegate) override { | 403 void OnEnd(LayerAnimationDelegate* delegate) override { |
410 delegate->SetOpacityFromAnimation(target_); | 404 delegate->SetOpacityFromAnimation(target_); |
411 } | 405 } |
412 | 406 |
413 virtual scoped_ptr<cc::Animation> CreateCCAnimation() override { | 407 scoped_ptr<cc::Animation> CreateCCAnimation() override { |
414 scoped_ptr<cc::AnimationCurve> animation_curve( | 408 scoped_ptr<cc::AnimationCurve> animation_curve( |
415 new FloatAnimationCurveAdapter(tween_type(), | 409 new FloatAnimationCurveAdapter(tween_type(), |
416 start_, | 410 start_, |
417 target_, | 411 target_, |
418 duration())); | 412 duration())); |
419 scoped_ptr<cc::Animation> animation( | 413 scoped_ptr<cc::Animation> animation( |
420 cc::Animation::Create(animation_curve.Pass(), | 414 cc::Animation::Create(animation_curve.Pass(), |
421 animation_id(), | 415 animation_id(), |
422 animation_group_id(), | 416 animation_group_id(), |
423 cc::Animation::Opacity)); | 417 cc::Animation::Opacity)); |
424 return animation.Pass(); | 418 return animation.Pass(); |
425 } | 419 } |
426 | 420 |
427 virtual void OnGetTarget(TargetValue* target) const override { | 421 void OnGetTarget(TargetValue* target) const override { |
428 target->opacity = target_; | 422 target->opacity = target_; |
429 } | 423 } |
430 | 424 |
431 private: | 425 private: |
432 float start_; | 426 float start_; |
433 const float target_; | 427 const float target_; |
434 | 428 |
435 DISALLOW_COPY_AND_ASSIGN(ThreadedOpacityTransition); | 429 DISALLOW_COPY_AND_ASSIGN(ThreadedOpacityTransition); |
436 }; | 430 }; |
437 | 431 |
438 // ThreadedTransformTransition ------------------------------------------------- | 432 // ThreadedTransformTransition ------------------------------------------------- |
439 | 433 |
440 class ThreadedTransformTransition : public ThreadedLayerAnimationElement { | 434 class ThreadedTransformTransition : public ThreadedLayerAnimationElement { |
441 public: | 435 public: |
442 ThreadedTransformTransition(const gfx::Transform& target, | 436 ThreadedTransformTransition(const gfx::Transform& target, |
443 base::TimeDelta duration) | 437 base::TimeDelta duration) |
444 : ThreadedLayerAnimationElement(TRANSFORM, duration), | 438 : ThreadedLayerAnimationElement(TRANSFORM, duration), |
445 target_(target) { | 439 target_(target) { |
446 } | 440 } |
447 virtual ~ThreadedTransformTransition() {} | 441 ~ThreadedTransformTransition() override {} |
448 | 442 |
449 protected: | 443 protected: |
450 virtual void OnStart(LayerAnimationDelegate* delegate) override { | 444 void OnStart(LayerAnimationDelegate* delegate) override { |
451 start_ = delegate->GetTransformForAnimation(); | 445 start_ = delegate->GetTransformForAnimation(); |
452 } | 446 } |
453 | 447 |
454 virtual void OnAbort(LayerAnimationDelegate* delegate) override { | 448 void OnAbort(LayerAnimationDelegate* delegate) override { |
455 if (delegate && Started()) { | 449 if (delegate && Started()) { |
456 ThreadedLayerAnimationElement::OnAbort(delegate); | 450 ThreadedLayerAnimationElement::OnAbort(delegate); |
457 delegate->SetTransformFromAnimation(gfx::Tween::TransformValueBetween( | 451 delegate->SetTransformFromAnimation(gfx::Tween::TransformValueBetween( |
458 gfx::Tween::CalculateValue(tween_type(), last_progressed_fraction()), | 452 gfx::Tween::CalculateValue(tween_type(), last_progressed_fraction()), |
459 start_, | 453 start_, |
460 target_)); | 454 target_)); |
461 } | 455 } |
462 } | 456 } |
463 | 457 |
464 virtual void OnEnd(LayerAnimationDelegate* delegate) override { | 458 void OnEnd(LayerAnimationDelegate* delegate) override { |
465 delegate->SetTransformFromAnimation(target_); | 459 delegate->SetTransformFromAnimation(target_); |
466 } | 460 } |
467 | 461 |
468 virtual scoped_ptr<cc::Animation> CreateCCAnimation() override { | 462 scoped_ptr<cc::Animation> CreateCCAnimation() override { |
469 scoped_ptr<cc::AnimationCurve> animation_curve( | 463 scoped_ptr<cc::AnimationCurve> animation_curve( |
470 new TransformAnimationCurveAdapter(tween_type(), | 464 new TransformAnimationCurveAdapter(tween_type(), |
471 start_, | 465 start_, |
472 target_, | 466 target_, |
473 duration())); | 467 duration())); |
474 scoped_ptr<cc::Animation> animation( | 468 scoped_ptr<cc::Animation> animation( |
475 cc::Animation::Create(animation_curve.Pass(), | 469 cc::Animation::Create(animation_curve.Pass(), |
476 animation_id(), | 470 animation_id(), |
477 animation_group_id(), | 471 animation_group_id(), |
478 cc::Animation::Transform)); | 472 cc::Animation::Transform)); |
479 return animation.Pass(); | 473 return animation.Pass(); |
480 } | 474 } |
481 | 475 |
482 virtual void OnGetTarget(TargetValue* target) const override { | 476 void OnGetTarget(TargetValue* target) const override { |
483 target->transform = target_; | 477 target->transform = target_; |
484 } | 478 } |
485 | 479 |
486 private: | 480 private: |
487 gfx::Transform start_; | 481 gfx::Transform start_; |
488 const gfx::Transform target_; | 482 const gfx::Transform target_; |
489 | 483 |
490 DISALLOW_COPY_AND_ASSIGN(ThreadedTransformTransition); | 484 DISALLOW_COPY_AND_ASSIGN(ThreadedTransformTransition); |
491 }; | 485 }; |
492 | 486 |
493 // InverseTransformTransision -------------------------------------------------- | 487 // InverseTransformTransision -------------------------------------------------- |
494 | 488 |
495 class InverseTransformTransition : public ThreadedLayerAnimationElement { | 489 class InverseTransformTransition : public ThreadedLayerAnimationElement { |
496 public: | 490 public: |
497 InverseTransformTransition(const gfx::Transform& base_transform, | 491 InverseTransformTransition(const gfx::Transform& base_transform, |
498 const LayerAnimationElement* uninverted_transition) | 492 const LayerAnimationElement* uninverted_transition) |
499 : ThreadedLayerAnimationElement(*uninverted_transition), | 493 : ThreadedLayerAnimationElement(*uninverted_transition), |
500 base_transform_(base_transform), | 494 base_transform_(base_transform), |
501 uninverted_transition_( | 495 uninverted_transition_( |
502 CheckAndCast<const ThreadedTransformTransition*>( | 496 CheckAndCast<const ThreadedTransformTransition*>( |
503 uninverted_transition)) { | 497 uninverted_transition)) { |
504 } | 498 } |
505 virtual ~InverseTransformTransition() {} | 499 ~InverseTransformTransition() override {} |
506 | 500 |
507 static InverseTransformTransition* Clone(const LayerAnimationElement* other) { | 501 static InverseTransformTransition* Clone(const LayerAnimationElement* other) { |
508 const InverseTransformTransition* other_inverse = | 502 const InverseTransformTransition* other_inverse = |
509 CheckAndCast<const InverseTransformTransition*>(other); | 503 CheckAndCast<const InverseTransformTransition*>(other); |
510 return new InverseTransformTransition( | 504 return new InverseTransformTransition( |
511 other_inverse->base_transform_, other_inverse->uninverted_transition_); | 505 other_inverse->base_transform_, other_inverse->uninverted_transition_); |
512 } | 506 } |
513 | 507 |
514 protected: | 508 protected: |
515 virtual void OnStart(LayerAnimationDelegate* delegate) override { | 509 void OnStart(LayerAnimationDelegate* delegate) override { |
516 gfx::Transform start(delegate->GetTransformForAnimation()); | 510 gfx::Transform start(delegate->GetTransformForAnimation()); |
517 effective_start_ = base_transform_ * start; | 511 effective_start_ = base_transform_ * start; |
518 | 512 |
519 TargetValue target; | 513 TargetValue target; |
520 uninverted_transition_->GetTargetValue(&target); | 514 uninverted_transition_->GetTargetValue(&target); |
521 base_target_ = target.transform; | 515 base_target_ = target.transform; |
522 | 516 |
523 set_tween_type(uninverted_transition_->tween_type()); | 517 set_tween_type(uninverted_transition_->tween_type()); |
524 | 518 |
525 TransformAnimationCurveAdapter base_curve(tween_type(), | 519 TransformAnimationCurveAdapter base_curve(tween_type(), |
526 base_transform_, | 520 base_transform_, |
527 base_target_, | 521 base_target_, |
528 duration()); | 522 duration()); |
529 | 523 |
530 animation_curve_.reset(new InverseTransformCurveAdapter( | 524 animation_curve_.reset(new InverseTransformCurveAdapter( |
531 base_curve, start, duration())); | 525 base_curve, start, duration())); |
532 computed_target_transform_ = ComputeWithBaseTransform(effective_start_, | 526 computed_target_transform_ = ComputeWithBaseTransform(effective_start_, |
533 base_target_); | 527 base_target_); |
534 } | 528 } |
535 | 529 |
536 virtual void OnAbort(LayerAnimationDelegate* delegate) override { | 530 void OnAbort(LayerAnimationDelegate* delegate) override { |
537 if (delegate && Started()) { | 531 if (delegate && Started()) { |
538 ThreadedLayerAnimationElement::OnAbort(delegate); | 532 ThreadedLayerAnimationElement::OnAbort(delegate); |
539 delegate->SetTransformFromAnimation(ComputeCurrentTransform()); | 533 delegate->SetTransformFromAnimation(ComputeCurrentTransform()); |
540 } | 534 } |
541 } | 535 } |
542 | 536 |
543 virtual void OnEnd(LayerAnimationDelegate* delegate) override { | 537 void OnEnd(LayerAnimationDelegate* delegate) override { |
544 delegate->SetTransformFromAnimation(computed_target_transform_); | 538 delegate->SetTransformFromAnimation(computed_target_transform_); |
545 } | 539 } |
546 | 540 |
547 virtual scoped_ptr<cc::Animation> CreateCCAnimation() override { | 541 scoped_ptr<cc::Animation> CreateCCAnimation() override { |
548 scoped_ptr<cc::Animation> animation( | 542 scoped_ptr<cc::Animation> animation( |
549 cc::Animation::Create(animation_curve_->Clone(), | 543 cc::Animation::Create(animation_curve_->Clone(), |
550 animation_id(), | 544 animation_id(), |
551 animation_group_id(), | 545 animation_group_id(), |
552 cc::Animation::Transform)); | 546 cc::Animation::Transform)); |
553 return animation.Pass(); | 547 return animation.Pass(); |
554 } | 548 } |
555 | 549 |
556 virtual void OnGetTarget(TargetValue* target) const override { | 550 void OnGetTarget(TargetValue* target) const override { |
557 target->transform = computed_target_transform_; | 551 target->transform = computed_target_transform_; |
558 } | 552 } |
559 | 553 |
560 private: | 554 private: |
561 gfx::Transform ComputeCurrentTransform() const { | 555 gfx::Transform ComputeCurrentTransform() const { |
562 gfx::Transform base_current = gfx::Tween::TransformValueBetween( | 556 gfx::Transform base_current = gfx::Tween::TransformValueBetween( |
563 gfx::Tween::CalculateValue(tween_type(), last_progressed_fraction()), | 557 gfx::Tween::CalculateValue(tween_type(), last_progressed_fraction()), |
564 base_transform_, | 558 base_transform_, |
565 base_target_); | 559 base_target_); |
566 return ComputeWithBaseTransform(effective_start_, base_current); | 560 return ComputeWithBaseTransform(effective_start_, base_current); |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
845 } | 839 } |
846 | 840 |
847 // static | 841 // static |
848 LayerAnimationElement* LayerAnimationElement::CreateColorElement( | 842 LayerAnimationElement* LayerAnimationElement::CreateColorElement( |
849 SkColor color, | 843 SkColor color, |
850 base::TimeDelta duration) { | 844 base::TimeDelta duration) { |
851 return new ColorTransition(color, duration); | 845 return new ColorTransition(color, duration); |
852 } | 846 } |
853 | 847 |
854 } // namespace ui | 848 } // namespace ui |
OLD | NEW |