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

Unified Diff: Source/core/animation/css/CSSAnimatableValueFactory.cpp

Issue 26247003: Web Animations CSS: Support animation of background-position and background-image (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Review changes Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/animation/css/CSSAnimatableValueFactory.cpp
diff --git a/Source/core/animation/css/CSSAnimatableValueFactory.cpp b/Source/core/animation/css/CSSAnimatableValueFactory.cpp
index 373221847314d6ed53bf9a38258b7178e72a85cf..dfe9bd03842e92724f5d8fd9661e11487fd99ff9 100644
--- a/Source/core/animation/css/CSSAnimatableValueFactory.cpp
+++ b/Source/core/animation/css/CSSAnimatableValueFactory.cpp
@@ -39,6 +39,7 @@
#include "core/animation/AnimatableLength.h"
#include "core/animation/AnimatableLengthBox.h"
#include "core/animation/AnimatableLengthSize.h"
+#include "core/animation/AnimatableRepeatable.h"
#include "core/animation/AnimatableSVGLength.h"
#include "core/animation/AnimatableSVGPaint.h"
#include "core/animation/AnimatableShapeValue.h"
@@ -112,6 +113,46 @@ inline static PassRefPtr<AnimatableValue> createFromLengthSize(const LengthSize
createFromLength(lengthSize.height(), style));
}
+template<CSSPropertyID property>
+inline static PassRefPtr<AnimatableValue> createFromFillLayers(const FillLayer* fillLayer, const RenderStyle* style)
+{
+ ASSERT(fillLayer);
+ Vector<RefPtr<AnimatableValue> > values;
+ while (fillLayer) {
dstockwell 2013/10/09 23:15:07 Hmm, yeah I guess there's a bit too much going on
alancutter (OOO until 2018) 2013/10/10 00:58:38 Merged the switch statements using an if chain.
+ bool isSet;
+ switch (property) {
+ case CSSPropertyBackgroundImage:
+ isSet = fillLayer->isImageSet();
+ break;
+ case CSSPropertyBackgroundPositionX:
+ isSet = fillLayer->isXPositionSet();
+ break;
+ case CSSPropertyBackgroundPositionY:
+ isSet = fillLayer->isYPositionSet();
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ }
+ if (!isSet)
+ break;
+ switch (property) {
+ case CSSPropertyBackgroundImage:
+ values.append(AnimatableImage::create(fillLayer->image()));
+ break;
+ case CSSPropertyBackgroundPositionX:
+ values.append(createFromLength(fillLayer->xPosition(), style));
+ break;
+ case CSSPropertyBackgroundPositionY:
+ values.append(createFromLength(fillLayer->yPosition(), style));
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ }
+ fillLayer = fillLayer->next();
+ }
+ return AnimatableRepeatable::create(values);
+}
+
PassRefPtr<AnimatableValue> CSSAnimatableValueFactory::createFromColor(CSSPropertyID property, const RenderStyle* style)
{
Color color = style->colorIncludingFallback(property, false);
@@ -137,6 +178,12 @@ PassRefPtr<AnimatableValue> CSSAnimatableValueFactory::create(CSSPropertyID prop
switch (property) {
case CSSPropertyBackgroundColor:
return createFromColor(property, style);
+ case CSSPropertyBackgroundImage:
+ return createFromFillLayers<CSSPropertyBackgroundImage>(style->backgroundLayers(), style);
+ case CSSPropertyBackgroundPositionX:
+ return createFromFillLayers<CSSPropertyBackgroundPositionX>(style->backgroundLayers(), style);
+ case CSSPropertyBackgroundPositionY:
+ return createFromFillLayers<CSSPropertyBackgroundPositionY>(style->backgroundLayers(), style);
case CSSPropertyBaselineShift:
return AnimatableSVGLength::create(style->baselineShiftValue());
case CSSPropertyBorderBottomColor:

Powered by Google App Engine
This is Rietveld 408576698