| // Copyright 2017 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. |
| |
| #ifndef CC_ANIMATION_SINGLE_KEYFRAME_EFFECT_ANIMATION_H_ |
| #define CC_ANIMATION_SINGLE_KEYFRAME_EFFECT_ANIMATION_H_ |
| |
| #include <vector> |
| |
| #include <memory> |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/time/time.h" |
| #include "cc/animation/animation.h" |
| #include "cc/animation/animation_curve.h" |
| #include "cc/animation/animation_export.h" |
| #include "cc/animation/element_animations.h" |
| #include "cc/animation/keyframe_model.h" |
| #include "cc/trees/element_id.h" |
| |
| namespace cc { |
| |
| class KeyframeEffect; |
| |
| // SingleKeyframeEffectAnimation is a sub-class of Animation. It |
| // serves as a bridge between the cc animation clients and cc because we |
| // previously only supported single effect(keyframe_effect) per animation. |
| // |
| // There is a 1:1 relationship between SingleKeyframeEffectAnimation and |
| // the KeyframeEffect. In general, the base class Animation is a 1:N |
| // relationship to allow for grouped animations. |
| // |
| // TODO(yigu): Deprecate SingleKeyframeEffectAnimation once grouped |
| // animations are fully supported by all clients. |
| class CC_ANIMATION_EXPORT SingleKeyframeEffectAnimation : public Animation { |
| public: |
| static scoped_refptr<SingleKeyframeEffectAnimation> Create(int id); |
| scoped_refptr<Animation> CreateImplInstance() const override; |
| |
| ElementId element_id() const; |
| |
| void AttachElement(ElementId element_id); |
| |
| KeyframeEffect* keyframe_effect() const; |
| void AddKeyframeModel(std::unique_ptr<KeyframeModel> keyframe_model); |
| void PauseKeyframeModel(int keyframe_model_id, double time_offset); |
| virtual void RemoveKeyframeModel(int keyframe_model_id); |
| void AbortKeyframeModel(int keyframe_model_id); |
| |
| bool NotifyKeyframeModelFinishedForTesting( |
| TargetProperty::Type target_property, |
| int group_id); |
| KeyframeModel* GetKeyframeModel(TargetProperty::Type target_property) const; |
| |
| private: |
| friend class base::RefCounted<SingleKeyframeEffectAnimation>; |
| |
| KeyframeEffect* GetKeyframeEffect() const; |
| |
| protected: |
| explicit SingleKeyframeEffectAnimation(int id); |
| explicit SingleKeyframeEffectAnimation(int id, size_t keyframe_effect_id); |
| explicit SingleKeyframeEffectAnimation(int id, |
| std::unique_ptr<KeyframeEffect>); |
| |
| ~SingleKeyframeEffectAnimation() override; |
| |
| DISALLOW_COPY_AND_ASSIGN(SingleKeyframeEffectAnimation); |
| }; |
| |
| } // namespace cc |
| |
| #endif // CC_ANIMATION_SINGLE_KEYFRAME_EFFECT_ANIMATION_H_ |