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/TimedItemTiming.h"
8 #include "core/animation/Animation.h"
9 #include "core/animation/TimedItem.h"
10 #include "platform/animation/TimingFunction.h"
14 PassRefPtr<TimedItemTiming> TimedItemTiming::create(TimedItem* parent)
16 return adoptRef(new TimedItemTiming(parent));
19 TimedItemTiming::TimedItemTiming(TimedItem* parent)
24 double TimedItemTiming::delay()
26 return m_parent->specifiedTiming().startDelay * 1000;
29 double TimedItemTiming::endDelay()
31 return m_parent->specifiedTiming().endDelay * 1000;
34 String TimedItemTiming::fill()
36 Timing::FillMode fillMode = m_parent->specifiedTiming().fillMode;
38 case Timing::FillModeNone:
40 case Timing::FillModeForwards:
42 case Timing::FillModeBackwards:
44 case Timing::FillModeBoth:
46 case Timing::FillModeAuto:
53 double TimedItemTiming::iterationStart()
55 return m_parent->specifiedTiming().iterationStart;
58 double TimedItemTiming::iterations()
60 return m_parent->specifiedTiming().iterationCount;
63 // This logic was copied from the example in bindings/tests/idls/TestInterface.idl
64 // and bindings/tests/results/V8TestInterface.cpp.
65 // FIXME: It might be possible to have 'duration' defined as an attribute in the idl.
66 // If possible, fix will be in a follow-up patch.
67 void TimedItemTiming::getDuration(String propertyName, bool& element0Enabled, double& element0, bool& element1Enabled, String& element1)
69 if (propertyName != "duration")
72 if (std::isnan(m_parent->specifiedTiming().iterationDuration)) {
73 element1Enabled = true;
77 element0Enabled = true;
78 element0 = m_parent->specifiedTiming().iterationDuration * 1000;
82 double TimedItemTiming::playbackRate()
84 return m_parent->specifiedTiming().playbackRate;
87 String TimedItemTiming::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 TimedItemTiming::easing()
106 return m_parent->specifiedTiming().timingFunction->toString();
109 void TimedItemTiming::setDelay(double delay)
111 Timing timing = m_parent->specifiedTiming();
112 TimingInput::setStartDelay(timing, delay);
113 m_parent->updateSpecifiedTiming(timing);
116 void TimedItemTiming::setEndDelay(double endDelay)
118 Timing timing = m_parent->specifiedTiming();
119 TimingInput::setEndDelay(timing, endDelay);
120 m_parent->updateSpecifiedTiming(timing);
123 void TimedItemTiming::setFill(String fill)
125 Timing timing = m_parent->specifiedTiming();
126 TimingInput::setFillMode(timing, fill);
127 m_parent->updateSpecifiedTiming(timing);
130 void TimedItemTiming::setIterationStart(double iterationStart)
132 Timing timing = m_parent->specifiedTiming();
133 TimingInput::setIterationStart(timing, iterationStart);
134 m_parent->updateSpecifiedTiming(timing);
137 void TimedItemTiming::setIterations(double iterations)
139 Timing timing = m_parent->specifiedTiming();
140 TimingInput::setIterationCount(timing, iterations);
141 m_parent->updateSpecifiedTiming(timing);
144 bool TimedItemTiming::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 TimedItemTiming::setPlaybackRate(double playbackRate)
156 Timing timing = m_parent->specifiedTiming();
157 TimingInput::setPlaybackRate(timing, playbackRate);
158 m_parent->updateSpecifiedTiming(timing);
161 void TimedItemTiming::setDirection(String direction)
163 Timing timing = m_parent->specifiedTiming();
164 TimingInput::setPlaybackDirection(timing, direction);
165 m_parent->updateSpecifiedTiming(timing);
168 void TimedItemTiming::setEasing(String easing)
170 Timing timing = m_parent->specifiedTiming();
171 TimingInput::setTimingFunction(timing, easing);
172 m_parent->updateSpecifiedTiming(timing);
175 } // namespace WebCore