// 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 AnimatableValueKeyframe_h #define AnimatableValueKeyframe_h #include "core/animation/Keyframe.h" #include "core/animation/animatable/AnimatableValue.h" namespace blink { class AnimatableValueKeyframe : public Keyframe { public: static PassRefPtrWillBeRawPtr create() { return adoptRefWillBeNoop(new AnimatableValueKeyframe); } void setPropertyValue(CSSPropertyID property, PassRefPtrWillBeRawPtr 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; virtual void trace(Visitor*) OVERRIDE; class PropertySpecificKeyframe : public Keyframe::PropertySpecificKeyframe { public: PropertySpecificKeyframe(double offset, PassRefPtr easing, const AnimatableValue*, AnimationEffect::CompositeOperation); AnimatableValue* value() const { return m_value.get(); } virtual const PassRefPtrWillBeRawPtr getAnimatableValue() const OVERRIDE FINAL { return m_value; } virtual PassOwnPtrWillBeRawPtr neutralKeyframe(double offset, PassRefPtr easing) const OVERRIDE FINAL; virtual PassRefPtrWillBeRawPtr createInterpolation(CSSPropertyID, blink::Keyframe::PropertySpecificKeyframe* end, Element*) const OVERRIDE FINAL; virtual void trace(Visitor*) OVERRIDE; private: PropertySpecificKeyframe(double offset, PassRefPtr easing, PassRefPtrWillBeRawPtr); virtual PassOwnPtrWillBeRawPtr cloneWithOffset(double offset) const OVERRIDE; virtual bool isAnimatableValuePropertySpecificKeyframe() const OVERRIDE { return true; } RefPtrWillBeMember m_value; }; private: AnimatableValueKeyframe() { } AnimatableValueKeyframe(const AnimatableValueKeyframe& copyFrom); virtual PassRefPtrWillBeRawPtr clone() const OVERRIDE; virtual PassOwnPtrWillBeRawPtr createPropertySpecificKeyframe(CSSPropertyID) const OVERRIDE; virtual bool isAnimatableValueKeyframe() const OVERRIDE { return true; } typedef WillBeHeapHashMap > 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