Chromium Code Reviews| 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 |