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/EffectInput.h" | |
| 7 | |
| 8 #include "bindings/v8/Dictionary.h" | |
| 9 #include "core/animation/AnimationHelpers.h" | |
| 10 #include "core/animation/css/CSSAnimations.h" | |
| 11 #include "core/css/parser/BisonCSSParser.h" | |
| 12 #include "core/css/resolver/StyleResolver.h" | |
| 13 #include "core/dom/Element.h" | |
| 14 | |
| 15 namespace WebCore { | |
| 16 | |
| 17 static bool checkDocumentAndRenderer(Element* element) | |
| 18 { | |
| 19 if (!element->inActiveDocument()) | |
| 20 return false; | |
| 21 element->document().updateStyleIfNeeded(); | |
| 22 return element->renderer(); | |
| 23 } | |
| 24 | |
| 25 PassRefPtrWillBeRawPtr<AnimationEffect> EffectInput::convert(Element* element, V ector<Dictionary> keyframeDictionaryVector, bool unsafe) | |
|
esprehn
2014/03/04 00:59:42
You almost certainly want to pass const Vector<Dic
alancutter (OOO until 2018)
2014/03/04 01:21:41
Done.
| |
| 26 { | |
| 27 // FIXME: This test will not be neccessary once resolution of keyframe value s occurs at | |
| 28 // animation application time. | |
| 29 if (!unsafe && !checkDocumentAndRenderer(element)) | |
| 30 return nullptr; | |
| 31 | |
| 32 // FIXME: Move this code into KeyframeEffectModel, it will be used by the ID L constructor for that class. | |
| 33 KeyframeEffectModel::KeyframeVector keyframes; | |
| 34 Vector<RefPtr<MutableStylePropertySet> > propertySetVector; | |
| 35 | |
| 36 for (size_t i = 0; i < keyframeDictionaryVector.size(); ++i) { | |
| 37 RefPtr<MutableStylePropertySet> propertySet = MutableStylePropertySet::c reate(); | |
| 38 propertySetVector.append(propertySet); | |
| 39 | |
| 40 RefPtrWillBeRawPtr<Keyframe> keyframe = Keyframe::create(); | |
| 41 keyframes.append(keyframe); | |
| 42 | |
| 43 double offset; | |
| 44 if (keyframeDictionaryVector[i].get("offset", offset)) { | |
|
esprehn
2014/03/04 00:59:42
no braces on a one line if
alancutter (OOO until 2018)
2014/03/04 01:21:41
Done.
dstockwell
2014/03/04 01:29:31
The blink style guide was relaxed about this a lon
| |
| 45 keyframe->setOffset(offset); | |
| 46 } | |
| 47 | |
| 48 String compositeString; | |
| 49 keyframeDictionaryVector[i].get("composite", compositeString); | |
| 50 if (compositeString == "add") | |
| 51 keyframe->setComposite(AnimationEffect::CompositeAdd); | |
| 52 | |
| 53 String timingFunctionString; | |
| 54 if (keyframeDictionaryVector[i].get("easing", timingFunctionString)) { | |
| 55 RefPtrWillBeRawPtr<CSSValue> timingFunctionValue = BisonCSSParser::p arseAnimationTimingFunctionValue(timingFunctionString); | |
| 56 if (timingFunctionValue) { | |
|
esprehn
2014/03/04 00:59:42
ditto
alancutter (OOO until 2018)
2014/03/04 01:21:41
Done.
| |
| 57 keyframe->setEasing(CSSToStyleMap::animationTimingFunction(timin gFunctionValue.get(), false)); | |
| 58 } | |
| 59 } | |
| 60 | |
| 61 Vector<String> keyframeProperties; | |
| 62 keyframeDictionaryVector[i].getOwnPropertyNames(keyframeProperties); | |
| 63 | |
| 64 for (size_t j = 0; j < keyframeProperties.size(); ++j) { | |
| 65 String property = keyframeProperties[j]; | |
| 66 CSSPropertyID id = camelCaseCSSPropertyNameToID(property); | |
| 67 | |
| 68 // FIXME: There is no way to store invalid properties or invalid val ues | |
| 69 // in a Keyframe object, so for now I just skip over them. Eventuall y we | |
| 70 // will need to support getFrames(), which should return exactly the | |
| 71 // keyframes that were input through the API. We will add a layer to wrap | |
| 72 // KeyframeEffectModel, store input keyframes and implement getFrame s. | |
| 73 if (id == CSSPropertyInvalid || !CSSAnimations::isAnimatableProperty (id)) | |
| 74 continue; | |
| 75 | |
| 76 String value; | |
| 77 keyframeDictionaryVector[i].get(property, value); | |
| 78 propertySet->setProperty(id, value); | |
| 79 } | |
| 80 } | |
| 81 | |
| 82 // FIXME: Replace this with code that just parses, when that code is availab le. | |
| 83 return StyleResolver::createKeyframeEffectModel(*element, propertySetVector, keyframes); | |
| 84 } | |
| 85 | |
| 86 } // namespace WebCore | |
| OLD | NEW |