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.h" | 8 #include "cc/animation.h" |
9 #include "cc/animation_id_provider.h" | 9 #include "cc/animation_id_provider.h" |
10 #include "ui/base/animation/tween.h" | 10 #include "ui/base/animation/tween.h" |
11 #include "ui/compositor/float_animation_curve_adapter.h" | 11 #include "ui/compositor/float_animation_curve_adapter.h" |
| 12 #include "ui/compositor/layer.h" |
12 #include "ui/compositor/layer_animation_delegate.h" | 13 #include "ui/compositor/layer_animation_delegate.h" |
13 #include "ui/compositor/layer_animator.h" | 14 #include "ui/compositor/layer_animator.h" |
| 15 #include "ui/compositor/transform_animation_curve_adapter.h" |
14 #include "ui/gfx/interpolated_transform.h" | 16 #include "ui/gfx/interpolated_transform.h" |
15 | 17 |
16 namespace ui { | 18 namespace ui { |
17 | 19 |
18 namespace { | 20 namespace { |
19 | 21 |
20 // Pause ----------------------------------------------------------------------- | 22 // Pause ----------------------------------------------------------------------- |
21 class Pause : public LayerAnimationElement { | 23 class Pause : public LayerAnimationElement { |
22 public: | 24 public: |
23 Pause(const AnimatableProperties& properties, base::TimeDelta duration) | 25 Pause(const AnimatableProperties& properties, base::TimeDelta duration) |
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 properties.insert(LayerAnimationElement::OPACITY); | 481 properties.insert(LayerAnimationElement::OPACITY); |
480 return properties; | 482 return properties; |
481 } | 483 } |
482 | 484 |
483 float start_; | 485 float start_; |
484 const float target_; | 486 const float target_; |
485 | 487 |
486 DISALLOW_COPY_AND_ASSIGN(ThreadedOpacityTransition); | 488 DISALLOW_COPY_AND_ASSIGN(ThreadedOpacityTransition); |
487 }; | 489 }; |
488 | 490 |
| 491 // ThreadedTransformTransition ------------------------------------------------- |
| 492 |
| 493 class ThreadedTransformTransition : public ThreadedLayerAnimationElement { |
| 494 public: |
| 495 ThreadedTransformTransition(const gfx::Transform& target, |
| 496 base::TimeDelta duration) |
| 497 : ThreadedLayerAnimationElement(GetProperties(), duration), |
| 498 target_(target) { |
| 499 } |
| 500 virtual ~ThreadedTransformTransition() {} |
| 501 |
| 502 protected: |
| 503 virtual void OnStart(LayerAnimationDelegate* delegate) OVERRIDE { |
| 504 gfx::Transform start_ = delegate->GetTransformForAnimation(); |
| 505 gfx::Rect bounds = delegate->GetBoundsForAnimation(); |
| 506 float device_scale_factor = delegate->GetDeviceScaleFactor(); |
| 507 cc_start_ = Layer::ConvertTransformToCCTransform(start_, |
| 508 bounds, |
| 509 device_scale_factor); |
| 510 cc_target_ = Layer::ConvertTransformToCCTransform(target_, |
| 511 bounds, |
| 512 device_scale_factor); |
| 513 } |
| 514 |
| 515 virtual void OnAbort(LayerAnimationDelegate* delegate) OVERRIDE { |
| 516 if (delegate && animation_id()) { |
| 517 ThreadedLayerAnimationElement::OnAbort(delegate); |
| 518 delegate->SetTransformFromAnimation(Tween::ValueBetween( |
| 519 Tween::CalculateValue(tween_type(), last_progressed_fraction()), |
| 520 start_, |
| 521 target_)); |
| 522 } |
| 523 } |
| 524 |
| 525 virtual void OnEnd(LayerAnimationDelegate* delegate) OVERRIDE { |
| 526 delegate->SetTransformFromAnimation(target_); |
| 527 } |
| 528 |
| 529 virtual scoped_ptr<cc::Animation> CreateCCAnimation() OVERRIDE { |
| 530 scoped_ptr<cc::AnimationCurve> animation_curve( |
| 531 new TransformAnimationCurveAdapter(tween_type(), |
| 532 cc_start_, |
| 533 cc_target_, |
| 534 duration())); |
| 535 scoped_ptr<cc::Animation> animation( |
| 536 cc::Animation::create(animation_curve.Pass(), |
| 537 animation_id(), |
| 538 animation_group_id(), |
| 539 cc::Animation::Transform)); |
| 540 return animation.Pass(); |
| 541 } |
| 542 |
| 543 virtual void OnGetTarget(TargetValue* target) const OVERRIDE { |
| 544 target->transform = target_; |
| 545 } |
| 546 |
| 547 private: |
| 548 static AnimatableProperties GetProperties() { |
| 549 AnimatableProperties properties; |
| 550 properties.insert(LayerAnimationElement::TRANSFORM); |
| 551 return properties; |
| 552 } |
| 553 |
| 554 gfx::Transform start_; |
| 555 gfx::Transform cc_start_; |
| 556 const gfx::Transform target_; |
| 557 gfx::Transform cc_target_; |
| 558 |
| 559 DISALLOW_COPY_AND_ASSIGN(ThreadedTransformTransition); |
| 560 }; |
| 561 |
489 } // namespace | 562 } // namespace |
490 | 563 |
491 // LayerAnimationElement::TargetValue ------------------------------------------ | 564 // LayerAnimationElement::TargetValue ------------------------------------------ |
492 | 565 |
493 LayerAnimationElement::TargetValue::TargetValue() | 566 LayerAnimationElement::TargetValue::TargetValue() |
494 : opacity(0.0f), | 567 : opacity(0.0f), |
495 visibility(false), | 568 visibility(false), |
496 brightness(0.0f), | 569 brightness(0.0f), |
497 grayscale(0.0f), | 570 grayscale(0.0f), |
498 color(SK_ColorBLACK) { | 571 color(SK_ColorBLACK) { |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
634 if (LayerAnimator::slow_animation_mode()) | 707 if (LayerAnimator::slow_animation_mode()) |
635 return duration * LayerAnimator::slow_animation_scale_factor(); | 708 return duration * LayerAnimator::slow_animation_scale_factor(); |
636 | 709 |
637 return duration; | 710 return duration; |
638 } | 711 } |
639 | 712 |
640 // static | 713 // static |
641 LayerAnimationElement* LayerAnimationElement::CreateTransformElement( | 714 LayerAnimationElement* LayerAnimationElement::CreateTransformElement( |
642 const gfx::Transform& transform, | 715 const gfx::Transform& transform, |
643 base::TimeDelta duration) { | 716 base::TimeDelta duration) { |
644 return new TransformTransition(transform, duration); | 717 return new ThreadedTransformTransition(transform, duration); |
645 } | 718 } |
646 | 719 |
647 // static | 720 // static |
648 LayerAnimationElement* | 721 LayerAnimationElement* |
649 LayerAnimationElement::CreateInterpolatedTransformElement( | 722 LayerAnimationElement::CreateInterpolatedTransformElement( |
650 InterpolatedTransform* interpolated_transform, | 723 InterpolatedTransform* interpolated_transform, |
651 base::TimeDelta duration) { | 724 base::TimeDelta duration) { |
652 return new InterpolatedTransformTransition(interpolated_transform, duration); | 725 return new InterpolatedTransformTransition(interpolated_transform, duration); |
653 } | 726 } |
654 | 727 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
695 } | 768 } |
696 | 769 |
697 // static | 770 // static |
698 LayerAnimationElement* LayerAnimationElement::CreateColorElement( | 771 LayerAnimationElement* LayerAnimationElement::CreateColorElement( |
699 SkColor color, | 772 SkColor color, |
700 base::TimeDelta duration) { | 773 base::TimeDelta duration) { |
701 return new ColorTransition(color, duration); | 774 return new ColorTransition(color, duration); |
702 } | 775 } |
703 | 776 |
704 } // namespace ui | 777 } // namespace ui |
OLD | NEW |