Index: cc/animation/keyframed_animation_curve.cc |
diff --git a/cc/animation/keyframed_animation_curve.cc b/cc/animation/keyframed_animation_curve.cc |
deleted file mode 100644 |
index bf65df8f20f00ca694b0f7b604ece794f76fdede..0000000000000000000000000000000000000000 |
--- a/cc/animation/keyframed_animation_curve.cc |
+++ /dev/null |
@@ -1,465 +0,0 @@ |
-// Copyright 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <algorithm> |
- |
-#include "cc/animation/keyframed_animation_curve.h" |
-#include "cc/base/time_util.h" |
-#include "ui/gfx/animation/tween.h" |
-#include "ui/gfx/geometry/box_f.h" |
- |
-namespace cc { |
- |
-namespace { |
- |
-template <class KeyframeType> |
-void InsertKeyframe(scoped_ptr<KeyframeType> keyframe, |
- ScopedPtrVector<KeyframeType>* keyframes) { |
- // Usually, the keyframes will be added in order, so this loop would be |
- // unnecessary and we should skip it if possible. |
- if (!keyframes->empty() && keyframe->Time() < keyframes->back()->Time()) { |
- for (size_t i = 0; i < keyframes->size(); ++i) { |
- if (keyframe->Time() < keyframes->at(i)->Time()) { |
- keyframes->insert(keyframes->begin() + i, keyframe.Pass()); |
- return; |
- } |
- } |
- } |
- |
- keyframes->push_back(keyframe.Pass()); |
-} |
- |
-template <typename KeyframeType> |
-base::TimeDelta TransformedAnimationTime( |
- const ScopedPtrVector<KeyframeType>& keyframes, |
- const scoped_ptr<TimingFunction>& timing_function, |
- base::TimeDelta time) { |
- if (timing_function) { |
- base::TimeDelta start_time = keyframes.front()->Time(); |
- base::TimeDelta duration = |
- keyframes.back()->Time() - keyframes.front()->Time(); |
- double progress = TimeUtil::Divide(time - start_time, duration); |
- |
- time = TimeUtil::Scale(duration, timing_function->GetValue(progress)) + |
- start_time; |
- } |
- |
- return time; |
-} |
- |
-template <typename KeyframeType> |
-size_t GetActiveKeyframe(const ScopedPtrVector<KeyframeType>& keyframes, |
- base::TimeDelta time) { |
- DCHECK_GE(keyframes.size(), 2ul); |
- size_t i = 0; |
- for (; i < keyframes.size() - 2; ++i) { // Last keyframe is never active. |
- if (time < keyframes[i + 1]->Time()) |
- break; |
- } |
- |
- return i; |
-} |
- |
-template <typename KeyframeType> |
-double TransformedKeyframeProgress( |
- const ScopedPtrVector<KeyframeType>& keyframes, |
- base::TimeDelta time, |
- size_t i) { |
- double progress = |
- TimeUtil::Divide(time - keyframes[i]->Time(), |
- keyframes[i + 1]->Time() - keyframes[i]->Time()); |
- |
- if (keyframes[i]->timing_function()) { |
- progress = keyframes[i]->timing_function()->GetValue(progress); |
- } |
- |
- return progress; |
-} |
- |
-} // namespace |
- |
-Keyframe::Keyframe(base::TimeDelta time, |
- scoped_ptr<TimingFunction> timing_function) |
- : time_(time), timing_function_(timing_function.Pass()) { |
-} |
- |
-Keyframe::~Keyframe() {} |
- |
-base::TimeDelta Keyframe::Time() const { |
- return time_; |
-} |
- |
-scoped_ptr<ColorKeyframe> ColorKeyframe::Create( |
- base::TimeDelta time, |
- SkColor value, |
- scoped_ptr<TimingFunction> timing_function) { |
- return make_scoped_ptr( |
- new ColorKeyframe(time, value, timing_function.Pass())); |
-} |
- |
-ColorKeyframe::ColorKeyframe(base::TimeDelta time, |
- SkColor value, |
- scoped_ptr<TimingFunction> timing_function) |
- : Keyframe(time, timing_function.Pass()), value_(value) { |
-} |
- |
-ColorKeyframe::~ColorKeyframe() {} |
- |
-SkColor ColorKeyframe::Value() const { return value_; } |
- |
-scoped_ptr<ColorKeyframe> ColorKeyframe::Clone() const { |
- scoped_ptr<TimingFunction> func; |
- if (timing_function()) |
- func = timing_function()->Clone(); |
- return ColorKeyframe::Create(Time(), Value(), func.Pass()); |
-} |
- |
-scoped_ptr<FloatKeyframe> FloatKeyframe::Create( |
- base::TimeDelta time, |
- float value, |
- scoped_ptr<TimingFunction> timing_function) { |
- return make_scoped_ptr( |
- new FloatKeyframe(time, value, timing_function.Pass())); |
-} |
- |
-FloatKeyframe::FloatKeyframe(base::TimeDelta time, |
- float value, |
- scoped_ptr<TimingFunction> timing_function) |
- : Keyframe(time, timing_function.Pass()), value_(value) { |
-} |
- |
-FloatKeyframe::~FloatKeyframe() {} |
- |
-float FloatKeyframe::Value() const { |
- return value_; |
-} |
- |
-scoped_ptr<FloatKeyframe> FloatKeyframe::Clone() const { |
- scoped_ptr<TimingFunction> func; |
- if (timing_function()) |
- func = timing_function()->Clone(); |
- return FloatKeyframe::Create(Time(), Value(), func.Pass()); |
-} |
- |
-scoped_ptr<TransformKeyframe> TransformKeyframe::Create( |
- base::TimeDelta time, |
- const TransformOperations& value, |
- scoped_ptr<TimingFunction> timing_function) { |
- return make_scoped_ptr( |
- new TransformKeyframe(time, value, timing_function.Pass())); |
-} |
- |
-TransformKeyframe::TransformKeyframe(base::TimeDelta time, |
- const TransformOperations& value, |
- scoped_ptr<TimingFunction> timing_function) |
- : Keyframe(time, timing_function.Pass()), value_(value) { |
-} |
- |
-TransformKeyframe::~TransformKeyframe() {} |
- |
-const TransformOperations& TransformKeyframe::Value() const { |
- return value_; |
-} |
- |
-scoped_ptr<TransformKeyframe> TransformKeyframe::Clone() const { |
- scoped_ptr<TimingFunction> func; |
- if (timing_function()) |
- func = timing_function()->Clone(); |
- return TransformKeyframe::Create(Time(), Value(), func.Pass()); |
-} |
- |
-scoped_ptr<FilterKeyframe> FilterKeyframe::Create( |
- base::TimeDelta time, |
- const FilterOperations& value, |
- scoped_ptr<TimingFunction> timing_function) { |
- return make_scoped_ptr( |
- new FilterKeyframe(time, value, timing_function.Pass())); |
-} |
- |
-FilterKeyframe::FilterKeyframe(base::TimeDelta time, |
- const FilterOperations& value, |
- scoped_ptr<TimingFunction> timing_function) |
- : Keyframe(time, timing_function.Pass()), value_(value) { |
-} |
- |
-FilterKeyframe::~FilterKeyframe() {} |
- |
-const FilterOperations& FilterKeyframe::Value() const { |
- return value_; |
-} |
- |
-scoped_ptr<FilterKeyframe> FilterKeyframe::Clone() const { |
- scoped_ptr<TimingFunction> func; |
- if (timing_function()) |
- func = timing_function()->Clone(); |
- return FilterKeyframe::Create(Time(), Value(), func.Pass()); |
-} |
- |
-scoped_ptr<KeyframedColorAnimationCurve> KeyframedColorAnimationCurve:: |
- Create() { |
- return make_scoped_ptr(new KeyframedColorAnimationCurve); |
-} |
- |
-KeyframedColorAnimationCurve::KeyframedColorAnimationCurve() {} |
- |
-KeyframedColorAnimationCurve::~KeyframedColorAnimationCurve() {} |
- |
-void KeyframedColorAnimationCurve::AddKeyframe( |
- scoped_ptr<ColorKeyframe> keyframe) { |
- InsertKeyframe(keyframe.Pass(), &keyframes_); |
-} |
- |
-base::TimeDelta KeyframedColorAnimationCurve::Duration() const { |
- return keyframes_.back()->Time() - keyframes_.front()->Time(); |
-} |
- |
-scoped_ptr<AnimationCurve> KeyframedColorAnimationCurve::Clone() const { |
- scoped_ptr<KeyframedColorAnimationCurve> to_return = |
- KeyframedColorAnimationCurve::Create(); |
- for (size_t i = 0; i < keyframes_.size(); ++i) |
- to_return->AddKeyframe(keyframes_[i]->Clone()); |
- |
- if (timing_function_) |
- to_return->SetTimingFunction(timing_function_->Clone()); |
- |
- return to_return.Pass(); |
-} |
- |
-SkColor KeyframedColorAnimationCurve::GetValue(base::TimeDelta t) const { |
- if (t <= keyframes_.front()->Time()) |
- return keyframes_.front()->Value(); |
- |
- if (t >= keyframes_.back()->Time()) |
- return keyframes_.back()->Value(); |
- |
- t = TransformedAnimationTime(keyframes_, timing_function_, t); |
- size_t i = GetActiveKeyframe(keyframes_, t); |
- double progress = TransformedKeyframeProgress(keyframes_, t, i); |
- |
- return gfx::Tween::ColorValueBetween( |
- progress, keyframes_[i]->Value(), keyframes_[i + 1]->Value()); |
-} |
- |
-// KeyframedFloatAnimationCurve |
- |
-scoped_ptr<KeyframedFloatAnimationCurve> KeyframedFloatAnimationCurve:: |
- Create() { |
- return make_scoped_ptr(new KeyframedFloatAnimationCurve); |
-} |
- |
-KeyframedFloatAnimationCurve::KeyframedFloatAnimationCurve() {} |
- |
-KeyframedFloatAnimationCurve::~KeyframedFloatAnimationCurve() {} |
- |
-void KeyframedFloatAnimationCurve::AddKeyframe( |
- scoped_ptr<FloatKeyframe> keyframe) { |
- InsertKeyframe(keyframe.Pass(), &keyframes_); |
-} |
- |
-base::TimeDelta KeyframedFloatAnimationCurve::Duration() const { |
- return keyframes_.back()->Time() - keyframes_.front()->Time(); |
-} |
- |
-scoped_ptr<AnimationCurve> KeyframedFloatAnimationCurve::Clone() const { |
- scoped_ptr<KeyframedFloatAnimationCurve> to_return = |
- KeyframedFloatAnimationCurve::Create(); |
- for (size_t i = 0; i < keyframes_.size(); ++i) |
- to_return->AddKeyframe(keyframes_[i]->Clone()); |
- |
- if (timing_function_) |
- to_return->SetTimingFunction(timing_function_->Clone()); |
- |
- return to_return.Pass(); |
-} |
- |
-float KeyframedFloatAnimationCurve::GetValue(base::TimeDelta t) const { |
- if (t <= keyframes_.front()->Time()) |
- return keyframes_.front()->Value(); |
- |
- if (t >= keyframes_.back()->Time()) |
- return keyframes_.back()->Value(); |
- |
- t = TransformedAnimationTime(keyframes_, timing_function_, t); |
- size_t i = GetActiveKeyframe(keyframes_, t); |
- double progress = TransformedKeyframeProgress(keyframes_, t, i); |
- |
- return keyframes_[i]->Value() + |
- (keyframes_[i+1]->Value() - keyframes_[i]->Value()) * progress; |
-} |
- |
-scoped_ptr<KeyframedTransformAnimationCurve> KeyframedTransformAnimationCurve:: |
- Create() { |
- return make_scoped_ptr(new KeyframedTransformAnimationCurve); |
-} |
- |
-KeyframedTransformAnimationCurve::KeyframedTransformAnimationCurve() {} |
- |
-KeyframedTransformAnimationCurve::~KeyframedTransformAnimationCurve() {} |
- |
-void KeyframedTransformAnimationCurve::AddKeyframe( |
- scoped_ptr<TransformKeyframe> keyframe) { |
- InsertKeyframe(keyframe.Pass(), &keyframes_); |
-} |
- |
-base::TimeDelta KeyframedTransformAnimationCurve::Duration() const { |
- return keyframes_.back()->Time() - keyframes_.front()->Time(); |
-} |
- |
-scoped_ptr<AnimationCurve> KeyframedTransformAnimationCurve::Clone() const { |
- scoped_ptr<KeyframedTransformAnimationCurve> to_return = |
- KeyframedTransformAnimationCurve::Create(); |
- for (size_t i = 0; i < keyframes_.size(); ++i) |
- to_return->AddKeyframe(keyframes_[i]->Clone()); |
- |
- if (timing_function_) |
- to_return->SetTimingFunction(timing_function_->Clone()); |
- |
- return to_return.Pass(); |
-} |
- |
-gfx::Transform KeyframedTransformAnimationCurve::GetValue( |
- base::TimeDelta t) const { |
- if (t <= keyframes_.front()->Time()) |
- return keyframes_.front()->Value().Apply(); |
- |
- if (t >= keyframes_.back()->Time()) |
- return keyframes_.back()->Value().Apply(); |
- |
- t = TransformedAnimationTime(keyframes_, timing_function_, t); |
- size_t i = GetActiveKeyframe(keyframes_, t); |
- double progress = TransformedKeyframeProgress(keyframes_, t, i); |
- |
- return keyframes_[i + 1]->Value().Blend(keyframes_[i]->Value(), progress); |
-} |
- |
-bool KeyframedTransformAnimationCurve::AnimatedBoundsForBox( |
- const gfx::BoxF& box, |
- gfx::BoxF* bounds) const { |
- DCHECK_GE(keyframes_.size(), 2ul); |
- *bounds = gfx::BoxF(); |
- for (size_t i = 0; i < keyframes_.size() - 1; ++i) { |
- gfx::BoxF bounds_for_step; |
- float min_progress = 0.0; |
- float max_progress = 1.0; |
- if (keyframes_[i]->timing_function()) |
- keyframes_[i]->timing_function()->Range(&min_progress, &max_progress); |
- if (!keyframes_[i+1]->Value().BlendedBoundsForBox(box, |
- keyframes_[i]->Value(), |
- min_progress, |
- max_progress, |
- &bounds_for_step)) |
- return false; |
- bounds->Union(bounds_for_step); |
- } |
- return true; |
-} |
- |
-bool KeyframedTransformAnimationCurve::AffectsScale() const { |
- for (size_t i = 0; i < keyframes_.size(); ++i) { |
- if (keyframes_[i]->Value().AffectsScale()) |
- return true; |
- } |
- return false; |
-} |
- |
-bool KeyframedTransformAnimationCurve::PreservesAxisAlignment() const { |
- for (size_t i = 0; i < keyframes_.size(); ++i) { |
- if (!keyframes_[i]->Value().PreservesAxisAlignment()) |
- return false; |
- } |
- return true; |
-} |
- |
-bool KeyframedTransformAnimationCurve::IsTranslation() const { |
- for (size_t i = 0; i < keyframes_.size(); ++i) { |
- if (!keyframes_[i]->Value().IsTranslation() && |
- !keyframes_[i]->Value().IsIdentity()) |
- return false; |
- } |
- return true; |
-} |
- |
-bool KeyframedTransformAnimationCurve::MaximumTargetScale( |
- bool forward_direction, |
- float* max_scale) const { |
- DCHECK_GE(keyframes_.size(), 2ul); |
- *max_scale = 0.f; |
- |
- // If |forward_direction| is true, then skip the first frame, otherwise |
- // skip the last frame, since that is the original position in the animation. |
- size_t start = 1; |
- size_t end = keyframes_.size(); |
- if (!forward_direction) { |
- --start; |
- --end; |
- } |
- |
- for (size_t i = start; i < end; ++i) { |
- gfx::Vector3dF target_scale_for_segment; |
- if (!keyframes_[i]->Value().ScaleComponent(&target_scale_for_segment)) |
- return false; |
- float max_scale_for_segment = |
- fmax(std::abs(target_scale_for_segment.x()), |
- fmax(std::abs(target_scale_for_segment.y()), |
- std::abs(target_scale_for_segment.z()))); |
- *max_scale = fmax(*max_scale, max_scale_for_segment); |
- } |
- return true; |
-} |
- |
-scoped_ptr<KeyframedFilterAnimationCurve> KeyframedFilterAnimationCurve:: |
- Create() { |
- return make_scoped_ptr(new KeyframedFilterAnimationCurve); |
-} |
- |
-KeyframedFilterAnimationCurve::KeyframedFilterAnimationCurve() {} |
- |
-KeyframedFilterAnimationCurve::~KeyframedFilterAnimationCurve() {} |
- |
-void KeyframedFilterAnimationCurve::AddKeyframe( |
- scoped_ptr<FilterKeyframe> keyframe) { |
- InsertKeyframe(keyframe.Pass(), &keyframes_); |
-} |
- |
-base::TimeDelta KeyframedFilterAnimationCurve::Duration() const { |
- return keyframes_.back()->Time() - keyframes_.front()->Time(); |
-} |
- |
-scoped_ptr<AnimationCurve> KeyframedFilterAnimationCurve::Clone() const { |
- scoped_ptr<KeyframedFilterAnimationCurve> to_return = |
- KeyframedFilterAnimationCurve::Create(); |
- for (size_t i = 0; i < keyframes_.size(); ++i) |
- to_return->AddKeyframe(keyframes_[i]->Clone()); |
- |
- if (timing_function_) |
- to_return->SetTimingFunction(timing_function_->Clone()); |
- |
- return to_return.Pass(); |
-} |
- |
-FilterOperations KeyframedFilterAnimationCurve::GetValue( |
- base::TimeDelta t) const { |
- if (t <= keyframes_.front()->Time()) |
- return keyframes_.front()->Value(); |
- |
- if (t >= keyframes_.back()->Time()) |
- return keyframes_.back()->Value(); |
- |
- t = TransformedAnimationTime(keyframes_, timing_function_, t); |
- size_t i = GetActiveKeyframe(keyframes_, t); |
- double progress = TransformedKeyframeProgress(keyframes_, t, i); |
- |
- return keyframes_[i + 1]->Value().Blend(keyframes_[i]->Value(), progress); |
-} |
- |
-bool KeyframedFilterAnimationCurve::HasFilterThatMovesPixels() const { |
- for (size_t i = 0; i < keyframes_.size(); ++i) { |
- if (keyframes_[i]->Value().HasFilterThatMovesPixels()) { |
- return true; |
- } |
- } |
- return false; |
-} |
- |
-} // namespace cc |