#ifndef AnimationValue_h
#define AnimationValue_h
#include "platform/animation/TimingFunction.h"
#include "platform/graphics/filters/FilterOperations.h"
#include "platform/transforms/TransformOperations.h"
#include "wtf/PassRefPtr.h"
#include "wtf/RefPtr.h"
namespace WebCore {
class AnimationValue {
WTF_MAKE_FAST_ALLOCATED;
public:
explicit AnimationValue(double keyTime, PassRefPtr<TimingFunction> timingFunction = nullptr)
: m_keyTime(keyTime)
, m_timingFunction(timingFunction)
{
}
virtual ~AnimationValue() { }
double keyTime() const { return m_keyTime; }
const TimingFunction* timingFunction() const { return m_timingFunction.get(); }
virtual PassOwnPtr<AnimationValue> clone() const = 0;
private:
double m_keyTime;
RefPtr<TimingFunction> m_timingFunction;
};
class FloatAnimationValue FINAL : public AnimationValue {
public:
FloatAnimationValue(double keyTime, float value, PassRefPtr<TimingFunction> timingFunction = nullptr)
: AnimationValue(keyTime, timingFunction)
, m_value(value)
{
}
virtual PassOwnPtr<AnimationValue> clone() const OVERRIDE { return adoptPtr(new FloatAnimationValue(*this)); }
float value() const { return m_value; }
private:
float m_value;
};
class TransformAnimationValue FINAL : public AnimationValue {
public:
explicit TransformAnimationValue(double keyTime, const TransformOperations* value = 0, PassRefPtr<TimingFunction> timingFunction = nullptr)
: AnimationValue(keyTime, timingFunction)
{
if (value)
m_value = *value;
}
virtual PassOwnPtr<AnimationValue> clone() const OVERRIDE { return adoptPtr(new TransformAnimationValue(*this)); }
const TransformOperations* value() const { return &m_value; }
private:
TransformOperations m_value;
};
class FilterAnimationValue FINAL : public AnimationValue {
public:
explicit FilterAnimationValue(double keyTime, const FilterOperations* value = 0, PassRefPtr<TimingFunction> timingFunction = nullptr)
: AnimationValue(keyTime, timingFunction)
{
if (value)
m_value = *value;
}
virtual PassOwnPtr<AnimationValue> clone() const OVERRIDE { return adoptPtr(new FilterAnimationValue(*this)); }
const FilterOperations* value() const { return &m_value; }
private:
FilterOperations m_value;
};
}
#endif