mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
I wrote a script to do this which is attached to the bug. TBR=abarth@chromium.org BUG=435361 Review URL: https://codereview.chromium.org/736373003
72 lines
3.1 KiB
C++
72 lines
3.1 KiB
C++
// Copyright 2014 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 SKY_ENGINE_CORE_ANIMATION_ANIMATABLE_ANIMATABLEVALUEKEYFRAME_H_
|
|
#define SKY_ENGINE_CORE_ANIMATION_ANIMATABLE_ANIMATABLEVALUEKEYFRAME_H_
|
|
|
|
#include "sky/engine/core/animation/Keyframe.h"
|
|
#include "sky/engine/core/animation/animatable/AnimatableValue.h"
|
|
|
|
namespace blink {
|
|
|
|
class AnimatableValueKeyframe : public Keyframe {
|
|
public:
|
|
static PassRefPtr<AnimatableValueKeyframe> create()
|
|
{
|
|
return adoptRef(new AnimatableValueKeyframe);
|
|
}
|
|
void setPropertyValue(CSSPropertyID property, PassRefPtr<AnimatableValue> value)
|
|
{
|
|
m_propertyValues.add(property, value);
|
|
}
|
|
void clearPropertyValue(CSSPropertyID property) { m_propertyValues.remove(property); }
|
|
AnimatableValue* propertyValue(CSSPropertyID property) const
|
|
{
|
|
ASSERT(m_propertyValues.contains(property));
|
|
return m_propertyValues.get(property);
|
|
}
|
|
virtual PropertySet properties() const override;
|
|
|
|
class PropertySpecificKeyframe : public Keyframe::PropertySpecificKeyframe {
|
|
public:
|
|
PropertySpecificKeyframe(double offset, PassRefPtr<TimingFunction> easing, const AnimatableValue*, AnimationEffect::CompositeOperation);
|
|
|
|
AnimatableValue* value() const { return m_value.get(); }
|
|
virtual const PassRefPtr<AnimatableValue> getAnimatableValue() const override final { return m_value; }
|
|
|
|
virtual PassOwnPtr<Keyframe::PropertySpecificKeyframe> neutralKeyframe(double offset, PassRefPtr<TimingFunction> easing) const override final;
|
|
virtual PassRefPtr<Interpolation> createInterpolation(CSSPropertyID, blink::Keyframe::PropertySpecificKeyframe* end, Element*) const override final;
|
|
|
|
private:
|
|
PropertySpecificKeyframe(double offset, PassRefPtr<TimingFunction> easing, PassRefPtr<AnimatableValue>);
|
|
|
|
virtual PassOwnPtr<Keyframe::PropertySpecificKeyframe> cloneWithOffset(double offset) const override;
|
|
virtual bool isAnimatableValuePropertySpecificKeyframe() const override { return true; }
|
|
|
|
RefPtr<AnimatableValue> m_value;
|
|
};
|
|
|
|
private:
|
|
AnimatableValueKeyframe() { }
|
|
|
|
AnimatableValueKeyframe(const AnimatableValueKeyframe& copyFrom);
|
|
|
|
virtual PassRefPtr<Keyframe> clone() const override;
|
|
virtual PassOwnPtr<Keyframe::PropertySpecificKeyframe> createPropertySpecificKeyframe(CSSPropertyID) const override;
|
|
|
|
virtual bool isAnimatableValueKeyframe() const override { return true; }
|
|
|
|
typedef HashMap<CSSPropertyID, RefPtr<AnimatableValue> > PropertyValueMap;
|
|
PropertyValueMap m_propertyValues;
|
|
};
|
|
|
|
typedef AnimatableValueKeyframe::PropertySpecificKeyframe AnimatableValuePropertySpecificKeyframe;
|
|
|
|
DEFINE_TYPE_CASTS(AnimatableValueKeyframe, Keyframe, value, value->isAnimatableValueKeyframe(), value.isAnimatableValueKeyframe());
|
|
DEFINE_TYPE_CASTS(AnimatableValuePropertySpecificKeyframe, Keyframe::PropertySpecificKeyframe, value, value->isAnimatableValuePropertySpecificKeyframe(), value.isAnimatableValuePropertySpecificKeyframe());
|
|
|
|
}
|
|
|
|
#endif // SKY_ENGINE_CORE_ANIMATION_ANIMATABLE_ANIMATABLEVALUEKEYFRAME_H_
|