#ifndef CC_ANIMATION_ANIMATION_TRIGGER_H_
#define CC_ANIMATION_ANIMATION_TRIGGER_H_
#include "base/containers/flat_map.h"
#include "base/memory/ref_counted.h"
#include "cc/animation/animation.h"
#include "cc/animation/animation_export.h"
#include "cc/base/protected_sequence_synchronizer.h"
namespace cc {
class AnimationHost;
class CC_ANIMATION_EXPORT AnimationTrigger
: public base::RefCounted<AnimationTrigger>,
public ProtectedSequenceSynchronizer {
public:
AnimationTrigger(const AnimationTrigger&) = delete;
AnimationTrigger& operator=(const AnimationTrigger&) = delete;
virtual scoped_refptr<AnimationTrigger> CreateImplInstance(
AnimationHost& host) const = 0;
virtual bool IsEventTrigger() const;
virtual bool IsTimelineTrigger() const;
int id() const { return id_; }
AnimationHost* GetAnimationHost() { return animation_host_; }
void SetAnimationHost(AnimationHost* animation_host) {
animation_host_ = animation_host;
}
bool IsOwnerThread() const override;
bool InProtectedSequence() const override;
void WaitForProtectedSequenceCompletion() const override;
void SetNeedsPushProperties();
protected:
explicit AnimationTrigger(int id);
~AnimationTrigger() override;
private:
friend class base::RefCounted<AnimationTrigger>;
const int id_;
raw_ptr<AnimationHost> animation_host_;
};
}
#endif