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/AnimationNodeTiming.h"
8 #include "bindings/core/v8/UnionTypesCore.h"
9 #include "core/animation/Animation.h"
10 #include "core/animation/AnimationNode.h"
11 #include "platform/animation/TimingFunction.h"
15 PassRefPtrWillBeRawPtr<AnimationNodeTiming> AnimationNodeTiming::create(AnimationNode* parent)
17 return adoptRefWillBeNoop(new AnimationNodeTiming(parent));
20 AnimationNodeTiming::AnimationNodeTiming(AnimationNode* parent)
25 double AnimationNodeTiming::delay()
27 return m_parent->specifiedTiming().startDelay * 1000;
30 double AnimationNodeTiming::endDelay()
32 return m_parent->specifiedTiming().endDelay * 1000;
35 String AnimationNodeTiming::fill()
37 Timing::FillMode fillMode = m_parent->specifiedTiming().fillMode;
39 case Timing::FillModeNone:
41 case Timing::FillModeForwards:
43 case Timing::FillModeBackwards:
45 case Timing::FillModeBoth:
47 case Timing::FillModeAuto:
54 double AnimationNodeTiming::iterationStart()
56 return m_parent->specifiedTiming().iterationStart;
59 double AnimationNodeTiming::iterations()
61 return m_parent->specifiedTiming().iterationCount;
64 // This logic was copied from the example in bindings/tests/idls/TestInterface.idl
65 // and bindings/tests/results/V8TestInterface.cpp.
66 // FIXME: It might be possible to have 'duration' defined as an attribute in the idl.
67 // If possible, fix will be in a follow-up patch.
68 // http://crbug.com/240176
69 void AnimationNodeTiming::getDuration(String propertyName, DoubleOrString& returnValue)
71 if (propertyName != "duration")
74 if (std::isnan(m_parent->specifiedTiming().iterationDuration)) {
75 returnValue.setString("auto");
78 returnValue.setDouble(m_parent->specifiedTiming().iterationDuration * 1000);
82 double AnimationNodeTiming::playbackRate()
84 return m_parent->specifiedTiming().playbackRate;
87 String AnimationNodeTiming::direction()
89 Timing::PlaybackDirection direction = m_parent->specifiedTiming().direction;
91 case Timing::PlaybackDirectionNormal:
93 case Timing::PlaybackDirectionReverse:
95 case Timing::PlaybackDirectionAlternate:
97 case Timing::PlaybackDirectionAlternateReverse:
98 return "alternate-reverse";
100 ASSERT_NOT_REACHED();
104 String AnimationNodeTiming::easing()
106 return m_parent->specifiedTiming().timingFunction->toString();
109 void AnimationNodeTiming::setDelay(double delay)
111 Timing timing = m_parent->specifiedTiming();
112 TimingInput::setStartDelay(timing, delay);
113 m_parent->updateSpecifiedTiming(timing);
116 void AnimationNodeTiming::setEndDelay(double endDelay)
118 Timing timing = m_parent->specifiedTiming();
119 TimingInput::setEndDelay(timing, endDelay);
120 m_parent->updateSpecifiedTiming(timing);
123 void AnimationNodeTiming::setFill(String fill)
125 Timing timing = m_parent->specifiedTiming();
126 TimingInput::setFillMode(timing, fill);
127 m_parent->updateSpecifiedTiming(timing);
130 void AnimationNodeTiming::setIterationStart(double iterationStart)
132 Timing timing = m_parent->specifiedTiming();
133 TimingInput::setIterationStart(timing, iterationStart);
134 m_parent->updateSpecifiedTiming(timing);
137 void AnimationNodeTiming::setIterations(double iterations)
139 Timing timing = m_parent->specifiedTiming();
140 TimingInput::setIterationCount(timing, iterations);
141 m_parent->updateSpecifiedTiming(timing);
144 bool AnimationNodeTiming::setDuration(String name, double duration)
146 if (name != "duration")
148 Timing timing = m_parent->specifiedTiming();
149 TimingInput::setIterationDuration(timing, duration);
150 m_parent->updateSpecifiedTiming(timing);
154 void AnimationNodeTiming::setPlaybackRate(double playbackRate)
156 Timing timing = m_parent->specifiedTiming();
157 TimingInput::setPlaybackRate(timing, playbackRate);
158 m_parent->updateSpecifiedTiming(timing);
161 void AnimationNodeTiming::setDirection(String direction)
163 Timing timing = m_parent->specifiedTiming();
164 TimingInput::setPlaybackDirection(timing, direction);
165 m_parent->updateSpecifiedTiming(timing);
168 void AnimationNodeTiming::setEasing(String easing)
170 Timing timing = m_parent->specifiedTiming();
171 TimingInput::setTimingFunction(timing, easing);
172 m_parent->updateSpecifiedTiming(timing);
175 void AnimationNodeTiming::trace(Visitor* visitor)
177 visitor->trace(m_parent);