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/base/animation/tween.h" | 10 #include "ui/base/animation/tween.h" |
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
556 } | 556 } |
557 | 557 |
558 gfx::Transform start_; | 558 gfx::Transform start_; |
559 gfx::Transform cc_start_; | 559 gfx::Transform cc_start_; |
560 const gfx::Transform target_; | 560 const gfx::Transform target_; |
561 gfx::Transform cc_target_; | 561 gfx::Transform cc_target_; |
562 | 562 |
563 DISALLOW_COPY_AND_ASSIGN(ThreadedTransformTransition); | 563 DISALLOW_COPY_AND_ASSIGN(ThreadedTransformTransition); |
564 }; | 564 }; |
565 | 565 |
566 // ChildCounterTransformTransition --------------------------------------------- | |
567 | |
568 class ChildCounterTransformTransition : public ThreadedLayerAnimationElement { | |
569 public: | |
570 ChildCounterTransformTransition(const gfx::Transform& parent_start, | |
571 const gfx::Transform& parent_target, | |
572 base::TimeDelta duration) | |
573 : ThreadedLayerAnimationElement(GetProperties(), duration), | |
574 parent_start_(parent_start), | |
575 parent_target_(parent_target) { | |
576 } | |
577 virtual ~ChildCounterTransformTransition() {} | |
578 | |
579 protected: | |
580 virtual void OnStart(LayerAnimationDelegate* delegate) OVERRIDE { | |
581 start_ = delegate->GetTransformForAnimation(); | |
582 effective_start_ = start_ * parent_start_; | |
583 float device_scale_factor = delegate->GetDeviceScaleFactor(); | |
584 cc_start_ = Layer::ConvertTransformToCCTransform(start_, | |
585 device_scale_factor); | |
586 cc_effective_start_ = Layer::ConvertTransformToCCTransform( | |
587 effective_start_, | |
588 device_scale_factor); | |
589 cc_parent_start_ = Layer::ConvertTransformToCCTransform( | |
590 parent_start_, | |
591 device_scale_factor); | |
592 cc_parent_target_ = Layer::ConvertTransformToCCTransform( | |
593 parent_target_, | |
594 device_scale_factor); | |
595 } | |
596 | |
597 virtual void OnAbort(LayerAnimationDelegate* delegate) OVERRIDE { | |
598 if (delegate && Started()) { | |
599 ThreadedLayerAnimationElement::OnAbort(delegate); | |
600 delegate->SetTransformFromAnimation(ComputeCurrentTransform()); | |
601 } | |
602 } | |
603 | |
604 virtual void OnEnd(LayerAnimationDelegate* delegate) OVERRIDE { | |
605 delegate->SetTransformFromAnimation( | |
606 ComputeWithParentTransform(start_, parent_target_)); | |
607 } | |
608 | |
609 virtual scoped_ptr<cc::Animation> CreateCCAnimation() OVERRIDE { | |
610 gfx::Transform target = ComputeWithParentTransform(cc_effective_start_, | |
611 cc_parent_target_); | |
612 scoped_ptr<cc::AnimationCurve> animation_curve( | |
613 new TransformAnimationCurveAdapter(tween_type(), | |
ajuma
2013/08/20 15:32:41
I think we'll to perform matrix inversion in the c
avallee
2013/08/22 22:21:59
Done.
| |
614 cc_start_, | |
615 target, | |
616 duration())); | |
617 scoped_ptr<cc::Animation> animation( | |
618 cc::Animation::Create(animation_curve.Pass(), | |
619 animation_id(), | |
620 animation_group_id(), | |
621 cc::Animation::Transform)); | |
622 return animation.Pass(); | |
623 } | |
624 | |
625 virtual void OnGetTarget(TargetValue* target) const OVERRIDE { | |
626 target->transform = ComputeWithParentTransform(start_, parent_target_); | |
ajuma
2013/08/20 15:32:41
If ComputeWithParentTransform turns out to be more
avallee
2013/08/22 22:21:59
I'll leave this here for now. We could compute the
| |
627 } | |
628 | |
629 private: | |
630 gfx::Transform ComputeCurrentTransform() const { | |
631 gfx::Transform parent_current = Tween::ValueBetween( | |
632 Tween::CalculateValue(tween_type(), last_progressed_fraction()), | |
633 parent_start_, | |
634 parent_target_); | |
635 return ComputeWithParentTransform(effective_start_, parent_current); | |
636 } | |
637 | |
638 gfx::Transform ComputeWithParentTransform(gfx::Transform start, | |
639 gfx::Transform parent) const { | |
640 gfx::Transform to_return(gfx::Transform::kSkipInitialization); | |
641 if (!parent.GetInverse(&to_return)) { | |
642 DLOG(WARNING) << "Parent transform not invertible."; | |
ajuma
2013/08/20 15:32:41
Use a DCHECK instead of a DLOG (so that we crash a
avallee
2013/08/22 22:21:59
Done.
| |
643 to_return.MakeIdentity(); | |
644 } | |
645 to_return.ConcatTransform(start); | |
ajuma
2013/08/20 15:32:41
Since we're skipping initialization above, this is
avallee
2013/08/22 22:21:59
It's initialized either by successfully getting th
| |
646 return to_return; | |
ajuma
2013/08/20 15:32:41
This method isn't using |parent| anywhere. Is some
avallee
2013/08/22 22:21:59
parent.GetInverse inside the if statement.
| |
647 } | |
648 | |
649 static AnimatableProperties GetProperties() { | |
650 AnimatableProperties properties; | |
651 properties.insert(LayerAnimationElement::TRANSFORM); | |
652 return properties; | |
653 } | |
654 | |
655 gfx::Transform start_; | |
656 gfx::Transform cc_start_; | |
657 gfx::Transform effective_start_; | |
658 gfx::Transform cc_effective_start_; | |
659 | |
660 const gfx::Transform parent_start_; | |
661 gfx::Transform cc_parent_start_; | |
662 const gfx::Transform parent_target_; | |
663 gfx::Transform cc_parent_target_; | |
664 | |
665 DISALLOW_COPY_AND_ASSIGN(ChildCounterTransformTransition); | |
666 }; | |
667 | |
566 } // namespace | 668 } // namespace |
567 | 669 |
568 // LayerAnimationElement::TargetValue ------------------------------------------ | 670 // LayerAnimationElement::TargetValue ------------------------------------------ |
569 | 671 |
570 LayerAnimationElement::TargetValue::TargetValue() | 672 LayerAnimationElement::TargetValue::TargetValue() |
571 : opacity(0.0f), | 673 : opacity(0.0f), |
572 visibility(false), | 674 visibility(false), |
573 brightness(0.0f), | 675 brightness(0.0f), |
574 grayscale(0.0f), | 676 grayscale(0.0f), |
575 color(SK_ColorBLACK) { | 677 color(SK_ColorBLACK) { |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
722 } | 824 } |
723 | 825 |
724 // static | 826 // static |
725 LayerAnimationElement* LayerAnimationElement::CreateTransformElement( | 827 LayerAnimationElement* LayerAnimationElement::CreateTransformElement( |
726 const gfx::Transform& transform, | 828 const gfx::Transform& transform, |
727 base::TimeDelta duration) { | 829 base::TimeDelta duration) { |
728 return new ThreadedTransformTransition(transform, duration); | 830 return new ThreadedTransformTransition(transform, duration); |
729 } | 831 } |
730 | 832 |
731 // static | 833 // static |
834 LayerAnimationElement* LayerAnimationElement::CreateInverseTransformElement( | |
835 const gfx::Transform& parent_start, | |
836 const gfx::Transform& parent_end, | |
837 base::TimeDelta duration) { | |
838 return new ChildCounterTransformTransition(parent_start, | |
839 parent_end, | |
840 duration); | |
841 } | |
842 | |
843 // static | |
732 LayerAnimationElement* | 844 LayerAnimationElement* |
733 LayerAnimationElement::CreateInterpolatedTransformElement( | 845 LayerAnimationElement::CreateInterpolatedTransformElement( |
734 InterpolatedTransform* interpolated_transform, | 846 InterpolatedTransform* interpolated_transform, |
735 base::TimeDelta duration) { | 847 base::TimeDelta duration) { |
736 return new InterpolatedTransformTransition(interpolated_transform, duration); | 848 return new InterpolatedTransformTransition(interpolated_transform, duration); |
737 } | 849 } |
738 | 850 |
739 // static | 851 // static |
740 LayerAnimationElement* LayerAnimationElement::CreateBoundsElement( | 852 LayerAnimationElement* LayerAnimationElement::CreateBoundsElement( |
741 const gfx::Rect& bounds, | 853 const gfx::Rect& bounds, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
779 } | 891 } |
780 | 892 |
781 // static | 893 // static |
782 LayerAnimationElement* LayerAnimationElement::CreateColorElement( | 894 LayerAnimationElement* LayerAnimationElement::CreateColorElement( |
783 SkColor color, | 895 SkColor color, |
784 base::TimeDelta duration) { | 896 base::TimeDelta duration) { |
785 return new ColorTransition(color, duration); | 897 return new ColorTransition(color, duration); |
786 } | 898 } |
787 | 899 |
788 } // namespace ui | 900 } // namespace ui |
OLD | NEW |