Chromium Code Reviews| Index: Source/core/animation/Animation.cpp |
| diff --git a/Source/core/animation/Animation.cpp b/Source/core/animation/Animation.cpp |
| index f77e9f63c8fd9f64bb8adc920520b279b3f28b65..daed5ae49dc418da5889fa6802eb99d5c64f1d7c 100644 |
| --- a/Source/core/animation/Animation.cpp |
| +++ b/Source/core/animation/Animation.cpp |
| @@ -56,184 +56,17 @@ static bool checkDocumentAndRenderer(Element* element) |
| if (!element->inActiveDocument()) |
| return false; |
| element->document().updateStyleIfNeeded(); |
|
esprehn
2014/02/28 00:57:16
Animation::create is called from CSSAnimations::ma
alancutter (OOO until 2018)
2014/03/03 05:09:45
This particular check only occurs when an Animatio
|
| - if (!element->renderer()) |
| - return false; |
| - return true; |
| -} |
| - |
| -PassRefPtr<Animation> Animation::create(Element* element, Vector<Dictionary> keyframeDictionaryVector, Dictionary timingInput) |
| -{ |
| - ASSERT(RuntimeEnabledFeatures::webAnimationsAPIEnabled()); |
| - |
| - // FIXME: This test will not be neccessary once resolution of keyframe values occurs at |
| - // animation application time. |
| - if (!checkDocumentAndRenderer(element)) |
| - return nullptr; |
| - |
| - return createUnsafe(element, keyframeDictionaryVector, timingInput); |
| + return element->renderer(); |
| } |
| -PassRefPtr<Animation> Animation::create(Element* element, Vector<Dictionary> keyframeDictionaryVector, double timingInput) |
| +PassRefPtrWillBeRawPtr<AnimationEffect> Animation::convertEffectInput(Element* element, Vector<Dictionary> keyframeDictionaryVector, bool unsafe) |
| { |
| - ASSERT(RuntimeEnabledFeatures::webAnimationsAPIEnabled()); |
| - |
| - // FIXME: This test will not be neccessary once resolution of keyframe values occurs at |
| - // animation application time. |
| - if (!checkDocumentAndRenderer(element)) |
| - return nullptr; |
| - |
| - return createUnsafe(element, keyframeDictionaryVector, timingInput); |
| -} |
| - |
| -PassRefPtr<Animation> Animation::create(Element* element, Vector<Dictionary> keyframeDictionaryVector) |
| -{ |
| - ASSERT(RuntimeEnabledFeatures::webAnimationsAPIEnabled()); |
| - |
| // FIXME: This test will not be neccessary once resolution of keyframe values occurs at |
| // animation application time. |
| - if (!checkDocumentAndRenderer(element)) |
| + if (!unsafe && !checkDocumentAndRenderer(element)) |
| return nullptr; |
| - return createUnsafe(element, keyframeDictionaryVector); |
| -} |
| - |
| -void Animation::setStartDelay(Timing& timing, double startDelay) |
| -{ |
| - if (std::isfinite(startDelay)) |
| - timing.startDelay = startDelay; |
| - else |
| - timing.startDelay = 0; |
| -} |
| - |
| -void Animation::setEndDelay(Timing& timing, double endDelay) |
| -{ |
| - if (std::isfinite(endDelay)) |
| - timing.endDelay = endDelay; |
| - else |
| - timing.endDelay = 0; |
| -} |
| - |
| -void Animation::setFillMode(Timing& timing, String fillMode) |
| -{ |
| - if (fillMode == "none") { |
| - timing.fillMode = Timing::FillModeNone; |
| - } else if (fillMode == "backwards") { |
| - timing.fillMode = Timing::FillModeBackwards; |
| - } else if (fillMode == "both") { |
| - timing.fillMode = Timing::FillModeBoth; |
| - } else if (fillMode == "forwards") { |
| - timing.fillMode = Timing::FillModeForwards; |
| - } else { |
| - timing.fillMode = Timing::FillModeAuto; |
| - } |
| -} |
| - |
| -void Animation::setIterationStart(Timing& timing, double iterationStart) |
| -{ |
| - if (!std::isnan(iterationStart) && !std::isinf(iterationStart)) |
| - timing.iterationStart = std::max<double>(iterationStart, 0); |
| - else |
| - timing.iterationStart = 0; |
| -} |
| - |
| -void Animation::setIterationCount(Timing& timing, double iterationCount) |
| -{ |
| - if (!std::isnan(iterationCount)) |
| - timing.iterationCount = std::max<double>(iterationCount, 0); |
| - else |
| - timing.iterationCount = 1; |
| -} |
| - |
| -void Animation::setIterationDuration(Timing& timing, double iterationDuration) |
| -{ |
| - if (!std::isnan(iterationDuration) && iterationDuration >= 0) |
| - timing.iterationDuration = iterationDuration; |
| - else |
| - timing.iterationDuration = std::numeric_limits<double>::quiet_NaN(); |
| -} |
| - |
| -void Animation::setPlaybackRate(Timing& timing, double playbackRate) |
| -{ |
| - if (!std::isnan(playbackRate) && !std::isinf(playbackRate)) |
| - timing.playbackRate = playbackRate; |
| - else |
| - timing.playbackRate = 1; |
| -} |
| - |
| -void Animation::setPlaybackDirection(Timing& timing, String direction) |
| -{ |
| - if (direction == "reverse") { |
| - timing.direction = Timing::PlaybackDirectionReverse; |
| - } else if (direction == "alternate") { |
| - timing.direction = Timing::PlaybackDirectionAlternate; |
| - } else if (direction == "alternate-reverse") { |
| - timing.direction = Timing::PlaybackDirectionAlternateReverse; |
| - } else { |
| - timing.direction = Timing::PlaybackDirectionNormal; |
| - } |
| -} |
| - |
| -void Animation::setTimingFunction(Timing& timing, String timingFunctionString) |
| -{ |
| - RefPtrWillBeRawPtr<CSSValue> timingFunctionValue = BisonCSSParser::parseAnimationTimingFunctionValue(timingFunctionString); |
| - if (timingFunctionValue) { |
| - RefPtr<TimingFunction> timingFunction = CSSToStyleMap::animationTimingFunction(timingFunctionValue.get(), false); |
| - if (timingFunction) { |
| - timing.timingFunction = timingFunction; |
| - return; |
| - } |
| - } |
| - timing.timingFunction = LinearTimingFunction::create(); |
| -} |
| - |
| -void Animation::populateTiming(Timing& timing, Dictionary timingInputDictionary) |
| -{ |
| - // FIXME: This method needs to be refactored to handle invalid |
| - // null, NaN, Infinity values better. |
| - // See: http://www.w3.org/TR/WebIDL/#es-double |
| - double startDelay = 0; |
| - timingInputDictionary.get("delay", startDelay); |
| - setStartDelay(timing, startDelay); |
| - |
| - double endDelay = 0; |
| - timingInputDictionary.get("endDelay", endDelay); |
| - setEndDelay(timing, endDelay); |
| - |
| - String fillMode; |
| - timingInputDictionary.get("fill", fillMode); |
| - setFillMode(timing, fillMode); |
| - |
| - double iterationStart = 0; |
| - timingInputDictionary.get("iterationStart", iterationStart); |
| - setIterationStart(timing, iterationStart); |
| - |
| - double iterationCount = 1; |
| - timingInputDictionary.get("iterations", iterationCount); |
| - setIterationCount(timing, iterationCount); |
| - |
| - v8::Local<v8::Value> iterationDurationValue; |
| - if (timingInputDictionary.get("duration", iterationDurationValue)) { |
| - double iterationDuration = iterationDurationValue->NumberValue(); |
| - setIterationDuration(timing, iterationDuration); |
| - } |
| - |
| - double playbackRate = 1; |
| - timingInputDictionary.get("playbackRate", playbackRate); |
| - setPlaybackRate(timing, playbackRate); |
| - |
| - String direction; |
| - timingInputDictionary.get("direction", direction); |
| - setPlaybackDirection(timing, direction); |
| - |
| - String timingFunctionString; |
| - timingInputDictionary.get("easing", timingFunctionString); |
| - setTimingFunction(timing, timingFunctionString); |
| - |
| - timing.assertValid(); |
| -} |
| - |
| -static PassRefPtrWillBeRawPtr<KeyframeEffectModel> createKeyframeEffectModel(Element* element, Vector<Dictionary> keyframeDictionaryVector) |
| -{ |
| + // FIXME: Move this code into KeyframeEffectModel, it will be used by the IDL constructor for that class. |
| KeyframeEffectModel::KeyframeVector keyframes; |
| Vector<RefPtr<MutableStylePropertySet> > propertySetVector; |
| @@ -284,37 +117,7 @@ static PassRefPtrWillBeRawPtr<KeyframeEffectModel> createKeyframeEffectModel(Ele |
| } |
| // FIXME: Replace this with code that just parses, when that code is available. |
| - RefPtrWillBeRawPtr<KeyframeEffectModel> effect = StyleResolver::createKeyframeEffectModel(*element, propertySetVector, keyframes); |
| - return effect; |
| -} |
| - |
| -PassRefPtr<Animation> Animation::createUnsafe(Element* element, Vector<Dictionary> keyframeDictionaryVector, Dictionary timingInput) |
| -{ |
| - RefPtrWillBeRawPtr<KeyframeEffectModel> effect = createKeyframeEffectModel(element, keyframeDictionaryVector); |
| - |
| - Timing timing; |
| - populateTiming(timing, timingInput); |
| - |
| - return create(element, effect, timing); |
| -} |
| - |
| -PassRefPtr<Animation> Animation::createUnsafe(Element* element, Vector<Dictionary> keyframeDictionaryVector, double timingInput) |
| -{ |
| - RefPtrWillBeRawPtr<KeyframeEffectModel> effect = createKeyframeEffectModel(element, keyframeDictionaryVector); |
| - |
| - Timing timing; |
| - if (!std::isnan(timingInput)) |
| - timing.iterationDuration = std::max<double>(timingInput, 0); |
| - |
| - return create(element, effect, timing); |
| -} |
| - |
| -PassRefPtr<Animation> Animation::createUnsafe(Element* element, Vector<Dictionary> keyframeDictionaryVector) |
| -{ |
| - RefPtrWillBeRawPtr<KeyframeEffectModel> effect = createKeyframeEffectModel(element, keyframeDictionaryVector); |
| - Timing timing; |
| - |
| - return create(element, effect, timing); |
| + return StyleResolver::createKeyframeEffectModel(*element, propertySetVector, keyframes); |
| } |
| Animation::Animation(PassRefPtr<Element> target, PassRefPtrWillBeRawPtr<AnimationEffect> effect, const Timing& timing, Priority priority, PassOwnPtr<EventDelegate> eventDelegate) |