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 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 } | 407 } |
408 } | 408 } |
409 | 409 |
410 virtual void RequestEffectiveStart( | 410 virtual void RequestEffectiveStart( |
411 LayerAnimationDelegate* delegate) OVERRIDE { | 411 LayerAnimationDelegate* delegate) OVERRIDE { |
412 DCHECK(animation_group_id()); | 412 DCHECK(animation_group_id()); |
413 if (duration() == base::TimeDelta()) { | 413 if (duration() == base::TimeDelta()) { |
414 set_effective_start_time(requested_start_time()); | 414 set_effective_start_time(requested_start_time()); |
415 return; | 415 return; |
416 } | 416 } |
417 set_effective_start_time(base::TimeTicks()); | 417 set_effective_start_time(gfx::FrameTime()); |
418 scoped_ptr<cc::Animation> animation = CreateCCAnimation(); | 418 scoped_ptr<cc::Animation> animation = CreateCCAnimation(); |
419 animation->set_needs_synchronized_start_time(true); | 419 animation->set_needs_synchronized_start_time(true); |
420 delegate->AddThreadedAnimation(animation.Pass()); | 420 delegate->AddThreadedAnimation(animation.Pass()); |
421 } | 421 } |
422 | 422 |
423 virtual void OnEnd(LayerAnimationDelegate* delegate) = 0; | 423 virtual void OnEnd(LayerAnimationDelegate* delegate) = 0; |
424 | 424 |
425 virtual scoped_ptr<cc::Animation> CreateCCAnimation() = 0; | 425 virtual scoped_ptr<cc::Animation> CreateCCAnimation() = 0; |
426 | 426 |
427 private: | 427 private: |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
727 animation_group_id_(element.animation_group_id_), | 727 animation_group_id_(element.animation_group_id_), |
728 last_progressed_fraction_(element.last_progressed_fraction_), | 728 last_progressed_fraction_(element.last_progressed_fraction_), |
729 weak_ptr_factory_(this) { | 729 weak_ptr_factory_(this) { |
730 } | 730 } |
731 | 731 |
732 LayerAnimationElement::~LayerAnimationElement() { | 732 LayerAnimationElement::~LayerAnimationElement() { |
733 } | 733 } |
734 | 734 |
735 void LayerAnimationElement::Start(LayerAnimationDelegate* delegate, | 735 void LayerAnimationElement::Start(LayerAnimationDelegate* delegate, |
736 int animation_group_id) { | 736 int animation_group_id) { |
737 DCHECK(requested_start_time_ != base::TimeTicks()); | 737 DCHECK(requested_start_time_ != gfx::FrameTime()); |
738 DCHECK(first_frame_); | 738 DCHECK(first_frame_); |
739 animation_group_id_ = animation_group_id; | 739 animation_group_id_ = animation_group_id; |
740 last_progressed_fraction_ = 0.0; | 740 last_progressed_fraction_ = 0.0; |
741 OnStart(delegate); | 741 OnStart(delegate); |
742 RequestEffectiveStart(delegate); | 742 RequestEffectiveStart(delegate); |
743 first_frame_ = false; | 743 first_frame_ = false; |
744 } | 744 } |
745 | 745 |
746 bool LayerAnimationElement::Progress(base::TimeTicks now, | 746 bool LayerAnimationElement::Progress(gfx::FrameTime now, |
747 LayerAnimationDelegate* delegate) { | 747 LayerAnimationDelegate* delegate) { |
748 DCHECK(requested_start_time_ != base::TimeTicks()); | 748 DCHECK(requested_start_time_ != gfx::FrameTime()); |
749 DCHECK(!first_frame_); | 749 DCHECK(!first_frame_); |
750 | 750 |
751 bool need_draw; | 751 bool need_draw; |
752 double t = 1.0; | 752 double t = 1.0; |
753 | 753 |
754 if ((effective_start_time_ == base::TimeTicks()) || | 754 if ((effective_start_time_ == gfx::FrameTime()) || |
755 (now < effective_start_time_)) { | 755 (now < effective_start_time_)) { |
756 // This hasn't actually started yet. | 756 // This hasn't actually started yet. |
757 need_draw = false; | 757 need_draw = false; |
758 last_progressed_fraction_ = 0.0; | 758 last_progressed_fraction_ = 0.0; |
759 return need_draw; | 759 return need_draw; |
760 } | 760 } |
761 | 761 |
762 base::TimeDelta elapsed = now - effective_start_time_; | 762 base::TimeDelta elapsed = now - effective_start_time_; |
763 if ((duration_ > base::TimeDelta()) && (elapsed < duration_)) | 763 if ((duration_ > base::TimeDelta()) && (elapsed < duration_)) |
764 t = elapsed.InMillisecondsF() / duration_.InMillisecondsF(); | 764 t = elapsed.InMillisecondsF() / duration_.InMillisecondsF(); |
765 base::WeakPtr<LayerAnimationElement> alive(weak_ptr_factory_.GetWeakPtr()); | 765 base::WeakPtr<LayerAnimationElement> alive(weak_ptr_factory_.GetWeakPtr()); |
766 need_draw = OnProgress(gfx::Tween::CalculateValue(tween_type_, t), delegate); | 766 need_draw = OnProgress(gfx::Tween::CalculateValue(tween_type_, t), delegate); |
767 if (!alive) | 767 if (!alive) |
768 return need_draw; | 768 return need_draw; |
769 first_frame_ = t == 1.0; | 769 first_frame_ = t == 1.0; |
770 last_progressed_fraction_ = t; | 770 last_progressed_fraction_ = t; |
771 return need_draw; | 771 return need_draw; |
772 } | 772 } |
773 | 773 |
774 bool LayerAnimationElement::IsFinished(base::TimeTicks time, | 774 bool LayerAnimationElement::IsFinished(gfx::FrameTime time, |
775 base::TimeDelta* total_duration) { | 775 base::TimeDelta* total_duration) { |
776 // If an effective start has been requested but the effective start time | 776 // If an effective start has been requested but the effective start time |
777 // hasn't yet been set, the animation is not finished, regardless of the | 777 // hasn't yet been set, the animation is not finished, regardless of the |
778 // value of |time|. | 778 // value of |time|. |
779 if (!first_frame_ && (effective_start_time_ == base::TimeTicks())) | 779 if (!first_frame_ && (effective_start_time_ == gfx::FrameTime())) |
780 return false; | 780 return false; |
781 | 781 |
782 base::TimeDelta queueing_delay; | 782 base::TimeDelta queueing_delay; |
783 if (!first_frame_) | 783 if (!first_frame_) |
784 queueing_delay = effective_start_time_ - requested_start_time_; | 784 queueing_delay = effective_start_time_ - requested_start_time_; |
785 | 785 |
786 base::TimeDelta elapsed = time - requested_start_time_; | 786 base::TimeDelta elapsed = time - requested_start_time_; |
787 if (elapsed >= duration_ + queueing_delay) { | 787 if (elapsed >= duration_ + queueing_delay) { |
788 *total_duration = duration_ + queueing_delay; | 788 *total_duration = duration_ + queueing_delay; |
789 return true; | 789 return true; |
(...skipping 21 matching lines...) Expand all Loading... |
811 return false; | 811 return false; |
812 } | 812 } |
813 | 813 |
814 void LayerAnimationElement::Abort(LayerAnimationDelegate* delegate) { | 814 void LayerAnimationElement::Abort(LayerAnimationDelegate* delegate) { |
815 OnAbort(delegate); | 815 OnAbort(delegate); |
816 first_frame_ = true; | 816 first_frame_ = true; |
817 } | 817 } |
818 | 818 |
819 void LayerAnimationElement::RequestEffectiveStart( | 819 void LayerAnimationElement::RequestEffectiveStart( |
820 LayerAnimationDelegate* delegate) { | 820 LayerAnimationDelegate* delegate) { |
821 DCHECK(requested_start_time_ != base::TimeTicks()); | 821 DCHECK(requested_start_time_ != gfx::FrameTime()); |
822 effective_start_time_ = requested_start_time_; | 822 effective_start_time_ = requested_start_time_; |
823 } | 823 } |
824 | 824 |
825 // static | 825 // static |
826 LayerAnimationElement::AnimatableProperty | 826 LayerAnimationElement::AnimatableProperty |
827 LayerAnimationElement::ToAnimatableProperty( | 827 LayerAnimationElement::ToAnimatableProperty( |
828 cc::Animation::TargetProperty property) { | 828 cc::Animation::TargetProperty property) { |
829 switch (property) { | 829 switch (property) { |
830 case cc::Animation::Transform: | 830 case cc::Animation::Transform: |
831 return TRANSFORM; | 831 return TRANSFORM; |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
926 } | 926 } |
927 | 927 |
928 // static | 928 // static |
929 LayerAnimationElement* LayerAnimationElement::CreateColorElement( | 929 LayerAnimationElement* LayerAnimationElement::CreateColorElement( |
930 SkColor color, | 930 SkColor color, |
931 base::TimeDelta duration) { | 931 base::TimeDelta duration) { |
932 return new ColorTransition(color, duration); | 932 return new ColorTransition(color, duration); |
933 } | 933 } |
934 | 934 |
935 } // namespace ui | 935 } // namespace ui |
OLD | NEW |