Index: ui/gfx/compositor/layer_animator.cc |
diff --git a/ui/gfx/compositor/layer_animator.cc b/ui/gfx/compositor/layer_animator.cc |
index e737377c86c600ca0674470eba190fc75b18ee7f..8004c5cdea2d08439903dcbcbde340f8e4605d5b 100644 |
--- a/ui/gfx/compositor/layer_animator.cc |
+++ b/ui/gfx/compositor/layer_animator.cc |
@@ -10,7 +10,7 @@ |
#include "ui/base/animation/animation_container.h" |
#include "ui/gfx/compositor/compositor.h" |
#include "ui/gfx/compositor/layer.h" |
-#include "ui/gfx/compositor/layer_animation_delegate.h" |
+#include "ui/gfx/compositor/layer_animator_delegate.h" |
#include "ui/gfx/compositor/layer_animation_sequence.h" |
namespace ui { |
@@ -20,7 +20,7 @@ class LayerAnimator; |
namespace { |
static const base::TimeDelta kDefaultTransitionDuration = |
- base::TimeDelta::FromMilliseconds(250); |
+ base::TimeDelta::FromMilliseconds(200); |
static const base::TimeDelta kTimerInterval = |
base::TimeDelta::FromMilliseconds(10); |
@@ -55,30 +55,45 @@ void LayerAnimator::SetTransform(const Transform& transform) { |
if (transition_duration_ == base::TimeDelta()) |
delegate_->SetTransformFromAnimation(transform); |
else |
- StartAnimation(new LayerAnimationSequence( |
- LayerAnimationElement::CreateTransformElement(transform, |
- transition_duration_))); |
+ StartAnimationElement(LayerAnimationElement::CreateTransformElement( |
+ transform, transition_duration_)); |
+} |
+ |
+Transform LayerAnimator::GetTargetTransform() const { |
+ LayerAnimationElement::TargetValue target; |
+ GetTargetValue(&target); |
+ return target.transform; |
} |
void LayerAnimator::SetBounds(const gfx::Rect& bounds) { |
if (transition_duration_ == base::TimeDelta()) |
delegate_->SetBoundsFromAnimation(bounds); |
else |
- StartAnimation(new LayerAnimationSequence( |
- LayerAnimationElement::CreateBoundsElement(bounds, |
- transition_duration_))); |
+ StartAnimationElement(LayerAnimationElement::CreateBoundsElement( |
+ bounds, transition_duration_)); |
+} |
+ |
+gfx::Rect LayerAnimator::GetTargetBounds() const { |
+ LayerAnimationElement::TargetValue target; |
+ GetTargetValue(&target); |
+ return target.bounds; |
} |
void LayerAnimator::SetOpacity(float opacity) { |
if (transition_duration_ == base::TimeDelta()) |
delegate_->SetOpacityFromAnimation(opacity); |
else |
- StartAnimation(new LayerAnimationSequence( |
- LayerAnimationElement::CreateOpacityElement(opacity, |
- transition_duration_))); |
+ StartAnimationElement(LayerAnimationElement::CreateOpacityElement( |
+ opacity, transition_duration_)); |
} |
-void LayerAnimator::SetDelegate(LayerAnimationDelegate* delegate) { |
+float LayerAnimator::GetTargetOpacity() const { |
+ LayerAnimationElement::TargetValue target; |
+ GetTargetValue(&target); |
+ return target.opacity; |
+} |
+ |
+void LayerAnimator::SetDelegate(LayerAnimatorDelegate* delegate) { |
DCHECK(delegate); |
delegate_ = delegate; |
} |
@@ -107,6 +122,7 @@ void LayerAnimator::StartAnimation(LayerAnimationSequence* animation) { |
} |
} |
FinishAnyAnimationWithZeroDuration(); |
+ UpdateAnimationState(); |
} |
void LayerAnimator::ScheduleAnimation(LayerAnimationSequence* animation) { |
@@ -116,6 +132,7 @@ void LayerAnimator::ScheduleAnimation(LayerAnimationSequence* animation) { |
} else { |
StartSequenceImmediately(animation); |
} |
+ UpdateAnimationState(); |
} |
void LayerAnimator::ScheduleTogether( |
@@ -141,6 +158,24 @@ void LayerAnimator::ScheduleTogether( |
for (iter = animations.begin(); iter != animations.end(); ++iter) { |
ScheduleAnimation(*iter); |
} |
+ |
+ UpdateAnimationState(); |
+} |
+ |
+void LayerAnimator::StartAnimationElement(LayerAnimationElement* animation) { |
+ StartAnimation(new LayerAnimationSequence(animation)); |
+} |
+ |
+void LayerAnimator::ScheduleAnimationElement(LayerAnimationElement* animation) { |
+ ScheduleAnimation(new LayerAnimationSequence(animation)); |
+} |
+ |
+void LayerAnimator::ScheduleElementsTogether( |
+ const std::vector<LayerAnimationElement*>& animations) { |
+ std::vector<LayerAnimationSequence*> sequences; |
+ for (size_t i = 0; i < animations.size(); ++i) |
+ sequences.push_back(new LayerAnimationSequence(animations[i])); |
+ ScheduleTogether(sequences); |
} |
void LayerAnimator::StopAnimatingProperty( |
@@ -158,10 +193,24 @@ void LayerAnimator::StopAnimating() { |
FinishAnimation(running_animations_[0].sequence); |
} |
+LayerAnimator::ScopedSettings::ScopedSettings(LayerAnimator* animator) |
+ : animator_(animator), |
+ old_transition_duration_(animator->transition_duration_) { |
+ SetTransitionDuration(kDefaultTransitionDuration); |
+} |
+ |
+LayerAnimator::ScopedSettings::~ScopedSettings() { |
+ animator_->transition_duration_ = old_transition_duration_; |
+} |
+ |
+void LayerAnimator::ScopedSettings::SetTransitionDuration( |
+ base::TimeDelta duration) { |
+ animator_->transition_duration_ = duration; |
+} |
+ |
// LayerAnimator private ------------------------------------------------------- |
void LayerAnimator::Step(base::TimeTicks now) { |
- TRACE_EVENT0("LayerAnimator", "Step"); |
last_step_time_ = now; |
std::vector<LayerAnimationSequence*> to_finish; |
for (RunningAnimations::iterator iter = running_animations_.begin(); |
@@ -228,6 +277,7 @@ void LayerAnimator::RemoveAnimation(LayerAnimationSequence* sequence) { |
void LayerAnimator::FinishAnimation(LayerAnimationSequence* sequence) { |
sequence->Progress(sequence->duration(), delegate()); |
+ delegate()->OnLayerAnimationEnded(sequence); |
RemoveAnimation(sequence); |
ProcessQueue(); |
UpdateAnimationState(); |
@@ -243,6 +293,7 @@ void LayerAnimator::FinishAnyAnimationWithZeroDuration() { |
if (running_animations_[i].sequence->duration() == base::TimeDelta()) { |
running_animations_[i].sequence->Progress( |
running_animations_[i].sequence->duration(), delegate()); |
+ delegate()->OnLayerAnimationEnded(running_animations_[i].sequence); |
RemoveAnimation(running_animations_[i].sequence); |
} else { |
++i; |
@@ -300,11 +351,13 @@ void LayerAnimator::RemoveAllAnimationsWithACommonProperty( |
if (running_animations_[i].sequence->HasCommonProperty( |
sequence->properties())) { |
// Finish the animation. |
- if (abort) |
+ if (abort){ |
running_animations_[i].sequence->Abort(); |
- else |
+ } else { |
running_animations_[i].sequence->Progress( |
running_animations_[i].sequence->duration(), delegate()); |
+ delegate()->OnLayerAnimationEnded(running_animations_[i].sequence); |
+ } |
RemoveAnimation(running_animations_[i].sequence); |
} else { |
++i; |
@@ -331,6 +384,7 @@ void LayerAnimator::ImmediatelySetNewTarget(LayerAnimationSequence* sequence) { |
const bool abort = false; |
RemoveAllAnimationsWithACommonProperty(sequence, abort); |
sequence->Progress(sequence->duration(), delegate()); |
+ delegate()->OnLayerAnimationEnded(sequence); |
RemoveAnimation(sequence); |
} |
@@ -377,10 +431,8 @@ void LayerAnimator::ProcessQueue() { |
bool started_sequence = false; |
do { |
started_sequence = false; |
- |
// Build a list of all currently animated properties. |
LayerAnimationElement::AnimatableProperties animated; |
- |
for (RunningAnimations::const_iterator iter = running_animations_.begin(); |
iter != running_animations_.end(); ++iter) { |
animated.insert((*iter).sequence->properties().begin(), |
@@ -440,4 +492,12 @@ bool LayerAnimator::StartSequenceImmediately(LayerAnimationSequence* sequence) { |
return true; |
} |
+void LayerAnimator::GetTargetValue( |
+ LayerAnimationElement::TargetValue* target) const { |
+ for (RunningAnimations::const_iterator iter = running_animations_.begin(); |
+ iter != running_animations_.end(); ++iter) { |
+ (*iter).sequence->GetTargetValue(target); |
+ } |
+} |
+ |
} // namespace ui |