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 return Timing::fillModeString(m_parent
->specifiedTiming().fillMode
);
40 double AnimationNodeTiming::iterationStart()
42 return m_parent
->specifiedTiming().iterationStart
;
45 double AnimationNodeTiming::iterations()
47 return m_parent
->specifiedTiming().iterationCount
;
50 void AnimationNodeTiming::duration(UnrestrictedDoubleOrString
& returnValue
)
52 if (std::isnan(m_parent
->specifiedTiming().iterationDuration
))
53 returnValue
.setString("auto");
55 returnValue
.setUnrestrictedDouble(m_parent
->specifiedTiming().iterationDuration
* 1000);
58 double AnimationNodeTiming::playbackRate()
60 return m_parent
->specifiedTiming().playbackRate
;
63 String
AnimationNodeTiming::direction()
65 return Timing::playbackDirectionString(m_parent
->specifiedTiming().direction
);
68 String
AnimationNodeTiming::easing()
70 return m_parent
->specifiedTiming().timingFunction
->toString();
73 void AnimationNodeTiming::setDelay(double delay
)
75 Timing timing
= m_parent
->specifiedTiming();
76 TimingInput::setStartDelay(timing
, delay
);
77 m_parent
->updateSpecifiedTiming(timing
);
80 void AnimationNodeTiming::setEndDelay(double endDelay
)
82 Timing timing
= m_parent
->specifiedTiming();
83 TimingInput::setEndDelay(timing
, endDelay
);
84 m_parent
->updateSpecifiedTiming(timing
);
87 void AnimationNodeTiming::setFill(String fill
)
89 Timing timing
= m_parent
->specifiedTiming();
90 TimingInput::setFillMode(timing
, fill
);
91 m_parent
->updateSpecifiedTiming(timing
);
94 void AnimationNodeTiming::setIterationStart(double iterationStart
)
96 Timing timing
= m_parent
->specifiedTiming();
97 TimingInput::setIterationStart(timing
, iterationStart
);
98 m_parent
->updateSpecifiedTiming(timing
);
101 void AnimationNodeTiming::setIterations(double iterations
)
103 Timing timing
= m_parent
->specifiedTiming();
104 TimingInput::setIterationCount(timing
, iterations
);
105 m_parent
->updateSpecifiedTiming(timing
);
108 void AnimationNodeTiming::setDuration(const UnrestrictedDoubleOrString
& durationOrAuto
)
110 // Any strings other than "auto" are coerced to "auto".
111 double duration
= durationOrAuto
.isString() ? std::numeric_limits
<double>::quiet_NaN() : durationOrAuto
.getAsUnrestrictedDouble();
112 Timing timing
= m_parent
->specifiedTiming();
113 TimingInput::setIterationDuration(timing
, duration
);
114 m_parent
->updateSpecifiedTiming(timing
);
117 void AnimationNodeTiming::setPlaybackRate(double playbackRate
)
119 Timing timing
= m_parent
->specifiedTiming();
120 TimingInput::setPlaybackRate(timing
, playbackRate
);
121 m_parent
->updateSpecifiedTiming(timing
);
124 void AnimationNodeTiming::setDirection(String direction
)
126 Timing timing
= m_parent
->specifiedTiming();
127 TimingInput::setPlaybackDirection(timing
, direction
);
128 m_parent
->updateSpecifiedTiming(timing
);
131 void AnimationNodeTiming::setEasing(String easing
)
133 Timing timing
= m_parent
->specifiedTiming();
134 TimingInput::setTimingFunction(timing
, easing
);
135 m_parent
->updateSpecifiedTiming(timing
);
138 DEFINE_TRACE(AnimationNodeTiming
)
140 visitor
->trace(m_parent
);