| 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 |