Index: Source/core/css/CSSComputedStyleDeclaration.cpp |
diff --git a/Source/core/css/CSSComputedStyleDeclaration.cpp b/Source/core/css/CSSComputedStyleDeclaration.cpp |
index 7285c6033ca4cc77f552f9d731120713533752ab..ffd5c8af11b410c7c77cf8a23333ef733d6e0d23 100644 |
--- a/Source/core/css/CSSComputedStyleDeclaration.cpp |
+++ b/Source/core/css/CSSComputedStyleDeclaration.cpp |
@@ -1189,6 +1189,40 @@ static PassRefPtr<CSSValue> getTimingFunctionValue(const CSSAnimationDataList* a |
return list.release(); |
} |
+static PassRefPtr<CSSValue> valueForAnimationFillMode(unsigned fillMode) |
+{ |
+ switch (fillMode) { |
+ case AnimationFillModeNone: |
+ return cssValuePool().createIdentifierValue(CSSValueNone); |
+ case AnimationFillModeForwards: |
+ return cssValuePool().createIdentifierValue(CSSValueForwards); |
+ case AnimationFillModeBackwards: |
+ return cssValuePool().createIdentifierValue(CSSValueBackwards); |
+ case AnimationFillModeBoth: |
+ return cssValuePool().createIdentifierValue(CSSValueBoth); |
+ default: |
+ ASSERT_NOT_REACHED(); |
+ return 0; |
+ } |
+} |
+ |
+static PassRefPtr<CSSValue> valueForAnimationDirection(CSSAnimationData::AnimationDirection direction) |
+{ |
+ switch (direction) { |
+ case CSSAnimationData::AnimationDirectionNormal: |
+ return cssValuePool().createIdentifierValue(CSSValueNormal); |
+ case CSSAnimationData::AnimationDirectionAlternate: |
+ return cssValuePool().createIdentifierValue(CSSValueAlternate); |
+ case CSSAnimationData::AnimationDirectionReverse: |
+ return cssValuePool().createIdentifierValue(CSSValueReverse); |
+ case CSSAnimationData::AnimationDirectionAlternateReverse: |
+ return cssValuePool().createIdentifierValue(CSSValueAlternateReverse); |
+ default: |
+ ASSERT_NOT_REACHED(); |
+ return 0; |
+ } |
+} |
+ |
static PassRefPtr<CSSValue> createLineBoxContainValue(unsigned lineBoxContain) |
{ |
if (!lineBoxContain) |
@@ -2350,24 +2384,8 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert |
RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); |
const CSSAnimationDataList* t = style->animations(); |
if (t) { |
- for (size_t i = 0; i < t->size(); ++i) { |
- switch (t->animation(i)->direction()) { |
- case CSSAnimationData::AnimationDirectionNormal: |
- list->append(cssValuePool().createIdentifierValue(CSSValueNormal)); |
- break; |
- case CSSAnimationData::AnimationDirectionAlternate: |
- list->append(cssValuePool().createIdentifierValue(CSSValueAlternate)); |
- break; |
- case CSSAnimationData::AnimationDirectionReverse: |
- list->append(cssValuePool().createIdentifierValue(CSSValueReverse)); |
- break; |
- case CSSAnimationData::AnimationDirectionAlternateReverse: |
- list->append(cssValuePool().createIdentifierValue(CSSValueAlternateReverse)); |
- break; |
- default: |
- ASSERT_NOT_REACHED(); |
- } |
- } |
+ for (size_t i = 0; i < t->size(); ++i) |
+ list->append(valueForAnimationDirection(t->animation(i)->direction())); |
} else |
list->append(cssValuePool().createIdentifierValue(CSSValueNormal)); |
return list.release(); |
@@ -2384,22 +2402,8 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert |
RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); |
const CSSAnimationDataList* t = style->animations(); |
if (t) { |
- for (size_t i = 0; i < t->size(); ++i) { |
- switch (t->animation(i)->fillMode()) { |
- case AnimationFillModeNone: |
- list->append(cssValuePool().createIdentifierValue(CSSValueNone)); |
- break; |
- case AnimationFillModeForwards: |
- list->append(cssValuePool().createIdentifierValue(CSSValueForwards)); |
- break; |
- case AnimationFillModeBackwards: |
- list->append(cssValuePool().createIdentifierValue(CSSValueBackwards)); |
- break; |
- case AnimationFillModeBoth: |
- list->append(cssValuePool().createIdentifierValue(CSSValueBoth)); |
- break; |
- } |
- } |
+ for (size_t i = 0; i < t->size(); ++i) |
+ list->append(valueForAnimationFillMode(t->animation(i)->fillMode())); |
} else |
list->append(cssValuePool().createIdentifierValue(CSSValueNone)); |
return list.release(); |
@@ -2458,6 +2462,46 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert |
break; |
case CSSPropertyWebkitAnimationTimingFunction: |
return getTimingFunctionValue(style->animations()); |
+ case CSSPropertyAnimation: |
+ case CSSPropertyWebkitAnimation: { |
+ const CSSAnimationDataList* animations = style->animations(); |
+ if (animations) { |
+ RefPtr<CSSValueList> animationsList = CSSValueList::createCommaSeparated(); |
+ for (size_t i = 0; i < animations->size(); ++i) { |
+ RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); |
+ const CSSAnimationData* animation = animations->animation(i); |
+ list->append(cssValuePool().createValue(animation->name(), CSSPrimitiveValue::CSS_STRING)); |
+ list->append(cssValuePool().createValue(animation->duration(), CSSPrimitiveValue::CSS_S)); |
+ list->append(createTimingFunctionValue(animation->timingFunction().get())); |
+ list->append(cssValuePool().createValue(animation->delay(), CSSPrimitiveValue::CSS_S)); |
+ if (animation->iterationCount() == CSSAnimationData::IterationCountInfinite) |
+ list->append(cssValuePool().createIdentifierValue(CSSValueInfinite)); |
+ else |
+ list->append(cssValuePool().createValue(animation->iterationCount(), CSSPrimitiveValue::CSS_NUMBER)); |
+ list->append(valueForAnimationDirection(animation->direction())); |
+ list->append(valueForAnimationFillMode(animation->fillMode())); |
+ if (animation->playState() == AnimPlayStatePaused) |
+ list->append(cssValuePool().createIdentifierValue(CSSValuePaused)); |
+ else |
+ list->append(cssValuePool().createIdentifierValue(CSSValueRunning)); |
+ animationsList->append(list); |
+ } |
+ return animationsList.release(); |
+ } |
+ |
+ RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); |
+ // animation-name default value. |
+ list->append(cssValuePool().createIdentifierValue(CSSValueNone)); |
+ list->append(cssValuePool().createValue(CSSAnimationData::initialAnimationDuration(), CSSPrimitiveValue::CSS_S)); |
+ list->append(createTimingFunctionValue(CSSAnimationData::initialAnimationTimingFunction().get())); |
+ list->append(cssValuePool().createValue(CSSAnimationData::initialAnimationDelay(), CSSPrimitiveValue::CSS_S)); |
+ list->append(cssValuePool().createValue(CSSAnimationData::initialAnimationIterationCount(), CSSPrimitiveValue::CSS_NUMBER)); |
+ list->append(valueForAnimationDirection(CSSAnimationData::initialAnimationDirection())); |
+ list->append(valueForAnimationFillMode(CSSAnimationData::initialAnimationFillMode())); |
+ // Initial animation-play-state. |
+ list->append(cssValuePool().createIdentifierValue(CSSValueRunning)); |
+ return list.release(); |
+ } |
case CSSPropertyWebkitAppearance: |
return cssValuePool().createValue(style->appearance()); |
case CSSPropertyWebkitAspectRatio: |
@@ -2810,8 +2854,6 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert |
break; |
/* Unimplemented -webkit- properties */ |
- case CSSPropertyAnimation: |
- case CSSPropertyWebkitAnimation: |
case CSSPropertyWebkitBorderRadius: |
case CSSPropertyWebkitMarginCollapse: |
case CSSPropertyWebkitMarquee: |