Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(578)

Side by Side Diff: Source/core/animation/TimingInput.cpp

Issue 182063005: Web Animations API: Refactor IDL input conversion out of Animation (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Remove templates Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698