1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
6 #include "core/animation/animatable/AnimatableValueKeyframe.h"
8 #include "core/animation/LegacyStyleInterpolation.h"
12 AnimatableValueKeyframe::AnimatableValueKeyframe(const AnimatableValueKeyframe& copyFrom)
13 : Keyframe(copyFrom.m_offset, copyFrom.m_composite, copyFrom.m_easing)
15 for (PropertyValueMap::const_iterator iter = copyFrom.m_propertyValues.begin(); iter != copyFrom.m_propertyValues.end(); ++iter)
16 setPropertyValue(iter->key, iter->value.get());
19 PropertySet AnimatableValueKeyframe::properties() const
21 // This is not used in time-critical code, so we probably don't need to
22 // worry about caching this result.
23 PropertySet properties;
24 for (PropertyValueMap::const_iterator iter = m_propertyValues.begin(); iter != m_propertyValues.end(); ++iter)
25 properties.add(*iter.keys());
29 PassRefPtrWillBeRawPtr<Keyframe> AnimatableValueKeyframe::clone() const
31 return adoptRefWillBeNoop(new AnimatableValueKeyframe(*this));
34 PassOwnPtrWillBeRawPtr<Keyframe::PropertySpecificKeyframe> AnimatableValueKeyframe::createPropertySpecificKeyframe(CSSPropertyID property) const
36 return adoptPtrWillBeNoop(new PropertySpecificKeyframe(offset(), &easing(), propertyValue(property), composite()));
39 void AnimatableValueKeyframe::trace(Visitor* visitor)
42 visitor->trace(m_propertyValues);
44 Keyframe::trace(visitor);
47 AnimatableValueKeyframe::PropertySpecificKeyframe::PropertySpecificKeyframe(double offset, PassRefPtr<TimingFunction> easing, const AnimatableValue* value, AnimationEffect::CompositeOperation op)
48 : Keyframe::PropertySpecificKeyframe(offset, easing, op)
49 , m_value(const_cast<AnimatableValue*>(value))
52 AnimatableValueKeyframe::PropertySpecificKeyframe::PropertySpecificKeyframe(double offset, PassRefPtr<TimingFunction> easing, PassRefPtrWillBeRawPtr<AnimatableValue> value)
53 : Keyframe::PropertySpecificKeyframe(offset, easing, AnimationEffect::CompositeReplace)
56 ASSERT(!isNull(m_offset));
59 PassOwnPtrWillBeRawPtr<Keyframe::PropertySpecificKeyframe> AnimatableValueKeyframe::PropertySpecificKeyframe::cloneWithOffset(double offset) const
61 Keyframe::PropertySpecificKeyframe* theClone = new PropertySpecificKeyframe(offset, m_easing, m_value);
62 return adoptPtrWillBeNoop(theClone);
65 PassRefPtrWillBeRawPtr<Interpolation> AnimatableValueKeyframe::PropertySpecificKeyframe::createInterpolation(CSSPropertyID property, Keyframe::PropertySpecificKeyframe* end, Element*) const
67 AnimatableValuePropertySpecificKeyframe* to = toAnimatableValuePropertySpecificKeyframe(end);
68 return LegacyStyleInterpolation::create(value(), to->value(), property);
71 PassOwnPtrWillBeRawPtr<Keyframe::PropertySpecificKeyframe> AnimatableValueKeyframe::PropertySpecificKeyframe::neutralKeyframe(double offset, PassRefPtr<TimingFunction> easing) const
73 return adoptPtrWillBeNoop(new AnimatableValueKeyframe::PropertySpecificKeyframe(offset, easing, AnimatableValue::neutralValue(), AnimationEffect::CompositeAdd));
76 void AnimatableValueKeyframe::PropertySpecificKeyframe::trace(Visitor* visitor)
78 visitor->trace(m_value);
79 Keyframe::PropertySpecificKeyframe::trace(visitor);