OLD | NEW |
---|---|
(Empty) | |
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. | |
4 | |
5 #include "config.h" | |
6 #include "core/animation/TimingInput.h" | |
7 | |
8 #include "bindings/v8/Dictionary.h" | |
9 #include "core/css/parser/BisonCSSParser.h" | |
10 #include "core/css/resolver/CSSToStyleMap.h" | |
11 | |
12 namespace WebCore { | |
13 | |
14 void TimingInput::setStartDelay(Timing& timing, double startDelay) | |
esprehn
2014/03/04 00:59:42
This is really weird, why not make Timing a class
alancutter (OOO until 2018)
2014/03/04 01:21:41
dstockwell suggested separating these methods into
| |
15 { | |
16 if (std::isfinite(startDelay)) | |
17 timing.startDelay = startDelay; | |
18 else | |
19 timing.startDelay = Timing::defaults().startDelay; | |
20 } | |
21 | |
22 void TimingInput::setEndDelay(Timing& timing, double endDelay) | |
23 { | |
24 if (std::isfinite(endDelay)) | |
25 timing.endDelay = endDelay; | |
26 else | |
27 timing.endDelay = Timing::defaults().endDelay; | |
28 } | |
29 | |
30 void TimingInput::setFillMode(Timing& timing, const String& fillMode) | |
31 { | |
32 if (fillMode == "none") { | |
33 timing.fillMode = Timing::FillModeNone; | |
34 } else if (fillMode == "backwards") { | |
35 timing.fillMode = Timing::FillModeBackwards; | |
36 } else if (fillMode == "both") { | |
37 timing.fillMode = Timing::FillModeBoth; | |
38 } else if (fillMode == "forwards") { | |
39 timing.fillMode = Timing::FillModeForwards; | |
40 } else { | |
41 timing.fillMode = Timing::defaults().fillMode; | |
42 } | |
43 } | |
44 | |
45 void TimingInput::setIterationStart(Timing& timing, double iterationStart) | |
46 { | |
47 if (std::isfinite(iterationStart)) | |
48 timing.iterationStart = std::max<double>(iterationStart, 0); | |
49 else | |
50 timing.iterationStart = Timing::defaults().iterationStart; | |
51 } | |
52 | |
53 void TimingInput::setIterationCount(Timing& timing, double iterationCount) | |
54 { | |
55 if (!std::isnan(iterationCount)) | |
56 timing.iterationCount = std::max<double>(iterationCount, 0); | |
57 else | |
58 timing.iterationCount = Timing::defaults().iterationCount; | |
59 } | |
60 | |
61 void TimingInput::setIterationDuration(Timing& timing, double iterationDuration) | |
62 { | |
63 if (!std::isnan(iterationDuration) && iterationDuration >= 0) | |
64 timing.iterationDuration = iterationDuration; | |
65 else | |
66 timing.iterationDuration = Timing::defaults().iterationDuration; | |
67 } | |
68 | |
69 void TimingInput::setPlaybackRate(Timing& timing, double playbackRate) | |
70 { | |
71 if (std::isfinite(playbackRate)) | |
72 timing.playbackRate = playbackRate; | |
73 else | |
74 timing.playbackRate = Timing::defaults().playbackRate; | |
75 } | |
76 | |
77 void TimingInput::setPlaybackDirection(Timing& timing, const String& direction) | |
78 { | |
79 if (direction == "reverse") { | |
80 timing.direction = Timing::PlaybackDirectionReverse; | |
81 } else if (direction == "alternate") { | |
82 timing.direction = Timing::PlaybackDirectionAlternate; | |
83 } else if (direction == "alternate-reverse") { | |
84 timing.direction = Timing::PlaybackDirectionAlternateReverse; | |
85 } else { | |
86 timing.direction = Timing::defaults().direction; | |
87 } | |
88 } | |
89 | |
90 void TimingInput::setTimingFunction(Timing& timing, const String& timingFunction String) | |
91 { | |
92 RefPtrWillBeRawPtr<CSSValue> timingFunctionValue = BisonCSSParser::parseAnim ationTimingFunctionValue(timingFunctionString); | |
93 if (timingFunctionValue) { | |
94 RefPtr<TimingFunction> timingFunction = CSSToStyleMap::animationTimingFu nction(timingFunctionValue.get(), false); | |
95 if (timingFunction) { | |
96 timing.timingFunction = timingFunction; | |
97 return; | |
98 } | |
99 } | |
100 timing.timingFunction = Timing::defaults().timingFunction; | |
101 } | |
102 | |
103 Timing TimingInput::convert(const Dictionary& timingInputDictionary) | |
104 { | |
105 Timing result; | |
106 | |
107 // FIXME: This method needs to be refactored to handle invalid | |
108 // null, NaN, Infinity values better. | |
109 // See: http://www.w3.org/TR/WebIDL/#es-double | |
110 double startDelay = 0; | |
111 timingInputDictionary.get("delay", startDelay); | |
112 setStartDelay(result, startDelay); | |
113 | |
114 double endDelay = 0; | |
115 timingInputDictionary.get("endDelay", endDelay); | |
116 setEndDelay(result, endDelay); | |
117 | |
118 String fillMode; | |
119 timingInputDictionary.get("fill", fillMode); | |
120 setFillMode(result, fillMode); | |
121 | |
122 double iterationStart = 0; | |
123 timingInputDictionary.get("iterationStart", iterationStart); | |
124 setIterationStart(result, iterationStart); | |
125 | |
126 double iterationCount = 1; | |
127 timingInputDictionary.get("iterations", iterationCount); | |
128 setIterationCount(result, iterationCount); | |
129 | |
130 v8::Local<v8::Value> iterationDurationValue; | |
131 if (timingInputDictionary.get("duration", iterationDurationValue)) { | |
132 double iterationDuration = iterationDurationValue->NumberValue(); | |
133 setIterationDuration(result, iterationDuration); | |
134 } | |
135 | |
136 double playbackRate = 1; | |
137 timingInputDictionary.get("playbackRate", playbackRate); | |
138 setPlaybackRate(result, playbackRate); | |
139 | |
140 String direction; | |
141 timingInputDictionary.get("direction", direction); | |
142 setPlaybackDirection(result, direction); | |
143 | |
144 String timingFunctionString; | |
145 timingInputDictionary.get("easing", timingFunctionString); | |
146 setTimingFunction(result, timingFunctionString); | |
147 | |
148 result.assertValid(); | |
149 | |
150 return result; | |
151 } | |
152 | |
153 Timing TimingInput::convert(double duration) | |
154 { | |
155 Timing result; | |
156 setIterationDuration(result, duration); | |
157 return result; | |
158 } | |
159 | |
160 Timing TimingInput::convert() | |
esprehn
2014/03/04 00:59:42
This seems like it wants to be createDefault() and
alancutter (OOO until 2018)
2014/03/04 01:21:41
Not sure what I was thinking here.
Removed this an
| |
161 { | |
162 return convert(Timing::defaults().iterationDuration); | |
163 } | |
164 | |
165 } // namespace WebCore | |
OLD | NEW |