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

Side by Side Diff: Source/core/css/CSSComputedStyleDeclaration.cpp

Issue 23011009: Implement computed style for animation shorthand and align parsing with the spec. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Test modified according to Tab's comments Created 7 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004 Zack Rusin <zack@kde.org> 2 * Copyright (C) 2004 Zack Rusin <zack@kde.org>
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com>
6 * Copyright (C) 2011 Sencha, Inc. All rights reserved. 6 * Copyright (C) 2011 Sencha, Inc. All rights reserved.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public 9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 1171 matching lines...) Expand 10 before | Expand all | Expand 10 after
1182 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 1182 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated();
1183 if (animList) { 1183 if (animList) {
1184 for (size_t i = 0; i < animList->size(); ++i) 1184 for (size_t i = 0; i < animList->size(); ++i)
1185 list->append(createTimingFunctionValue(animList->animation(i)->timin gFunction().get())); 1185 list->append(createTimingFunctionValue(animList->animation(i)->timin gFunction().get()));
1186 } else 1186 } else
1187 // Note that initialAnimationTimingFunction() is used for both transitio ns and animations 1187 // Note that initialAnimationTimingFunction() is used for both transitio ns and animations
1188 list->append(createTimingFunctionValue(CSSAnimationData::initialAnimatio nTimingFunction().get())); 1188 list->append(createTimingFunctionValue(CSSAnimationData::initialAnimatio nTimingFunction().get()));
1189 return list.release(); 1189 return list.release();
1190 } 1190 }
1191 1191
1192 static PassRefPtr<CSSValue> valueForAnimationFillMode(unsigned fillMode)
1193 {
1194 switch (fillMode) {
1195 case AnimationFillModeNone:
1196 return cssValuePool().createIdentifierValue(CSSValueNone);
1197 case AnimationFillModeForwards:
1198 return cssValuePool().createIdentifierValue(CSSValueForwards);
1199 case AnimationFillModeBackwards:
1200 return cssValuePool().createIdentifierValue(CSSValueBackwards);
1201 case AnimationFillModeBoth:
1202 return cssValuePool().createIdentifierValue(CSSValueBoth);
1203 default:
1204 ASSERT_NOT_REACHED();
1205 return 0;
1206 }
1207 }
1208
1209 static PassRefPtr<CSSValue> valueForAnimationDirection(CSSAnimationData::Animati onDirection direction)
1210 {
1211 switch (direction) {
1212 case CSSAnimationData::AnimationDirectionNormal:
1213 return cssValuePool().createIdentifierValue(CSSValueNormal);
1214 case CSSAnimationData::AnimationDirectionAlternate:
1215 return cssValuePool().createIdentifierValue(CSSValueAlternate);
1216 case CSSAnimationData::AnimationDirectionReverse:
1217 return cssValuePool().createIdentifierValue(CSSValueReverse);
1218 case CSSAnimationData::AnimationDirectionAlternateReverse:
1219 return cssValuePool().createIdentifierValue(CSSValueAlternateReverse);
1220 default:
1221 ASSERT_NOT_REACHED();
1222 return 0;
1223 }
1224 }
1225
1192 static PassRefPtr<CSSValue> createLineBoxContainValue(unsigned lineBoxContain) 1226 static PassRefPtr<CSSValue> createLineBoxContainValue(unsigned lineBoxContain)
1193 { 1227 {
1194 if (!lineBoxContain) 1228 if (!lineBoxContain)
1195 return cssValuePool().createIdentifierValue(CSSValueNone); 1229 return cssValuePool().createIdentifierValue(CSSValueNone);
1196 return CSSLineBoxContainValue::create(lineBoxContain); 1230 return CSSLineBoxContainValue::create(lineBoxContain);
1197 } 1231 }
1198 1232
1199 CSSComputedStyleDeclaration::CSSComputedStyleDeclaration(PassRefPtr<Node> n, boo l allowVisitedStyle, const String& pseudoElementName) 1233 CSSComputedStyleDeclaration::CSSComputedStyleDeclaration(PassRefPtr<Node> n, boo l allowVisitedStyle, const String& pseudoElementName)
1200 : m_node(n) 1234 : m_node(n)
1201 , m_allowVisitedStyle(allowVisitedStyle) 1235 , m_allowVisitedStyle(allowVisitedStyle)
(...skipping 1141 matching lines...) Expand 10 before | Expand all | Expand 10 after
2343 break; 2377 break;
2344 case CSSPropertyWebkitAnimationDelay: 2378 case CSSPropertyWebkitAnimationDelay:
2345 return getDelayValue(style->animations()); 2379 return getDelayValue(style->animations());
2346 case CSSPropertyAnimationDirection: 2380 case CSSPropertyAnimationDirection:
2347 if (!RuntimeEnabledFeatures::cssAnimationUnprefixedEnabled()) 2381 if (!RuntimeEnabledFeatures::cssAnimationUnprefixedEnabled())
2348 break; 2382 break;
2349 case CSSPropertyWebkitAnimationDirection: { 2383 case CSSPropertyWebkitAnimationDirection: {
2350 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 2384 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated();
2351 const CSSAnimationDataList* t = style->animations(); 2385 const CSSAnimationDataList* t = style->animations();
2352 if (t) { 2386 if (t) {
2353 for (size_t i = 0; i < t->size(); ++i) { 2387 for (size_t i = 0; i < t->size(); ++i)
2354 switch (t->animation(i)->direction()) { 2388 list->append(valueForAnimationDirection(t->animation(i)->dir ection()));
2355 case CSSAnimationData::AnimationDirectionNormal:
2356 list->append(cssValuePool().createIdentifierValue(CSSVal ueNormal));
2357 break;
2358 case CSSAnimationData::AnimationDirectionAlternate:
2359 list->append(cssValuePool().createIdentifierValue(CSSVal ueAlternate));
2360 break;
2361 case CSSAnimationData::AnimationDirectionReverse:
2362 list->append(cssValuePool().createIdentifierValue(CSSVal ueReverse));
2363 break;
2364 case CSSAnimationData::AnimationDirectionAlternateReverse:
2365 list->append(cssValuePool().createIdentifierValue(CSSVal ueAlternateReverse));
2366 break;
2367 default:
2368 ASSERT_NOT_REACHED();
2369 }
2370 }
2371 } else 2389 } else
2372 list->append(cssValuePool().createIdentifierValue(CSSValueNormal )); 2390 list->append(cssValuePool().createIdentifierValue(CSSValueNormal ));
2373 return list.release(); 2391 return list.release();
2374 } 2392 }
2375 case CSSPropertyAnimationDuration: 2393 case CSSPropertyAnimationDuration:
2376 if (!RuntimeEnabledFeatures::cssAnimationUnprefixedEnabled()) 2394 if (!RuntimeEnabledFeatures::cssAnimationUnprefixedEnabled())
2377 break; 2395 break;
2378 case CSSPropertyWebkitAnimationDuration: 2396 case CSSPropertyWebkitAnimationDuration:
2379 return getDurationValue(style->animations()); 2397 return getDurationValue(style->animations());
2380 case CSSPropertyAnimationFillMode: 2398 case CSSPropertyAnimationFillMode:
2381 if (!RuntimeEnabledFeatures::cssAnimationUnprefixedEnabled()) 2399 if (!RuntimeEnabledFeatures::cssAnimationUnprefixedEnabled())
2382 break; 2400 break;
2383 case CSSPropertyWebkitAnimationFillMode: { 2401 case CSSPropertyWebkitAnimationFillMode: {
2384 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 2402 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated();
2385 const CSSAnimationDataList* t = style->animations(); 2403 const CSSAnimationDataList* t = style->animations();
2386 if (t) { 2404 if (t) {
2387 for (size_t i = 0; i < t->size(); ++i) { 2405 for (size_t i = 0; i < t->size(); ++i)
2388 switch (t->animation(i)->fillMode()) { 2406 list->append(valueForAnimationFillMode(t->animation(i)->fill Mode()));
2389 case AnimationFillModeNone:
2390 list->append(cssValuePool().createIdentifierValue(CSSVal ueNone));
2391 break;
2392 case AnimationFillModeForwards:
2393 list->append(cssValuePool().createIdentifierValue(CSSVal ueForwards));
2394 break;
2395 case AnimationFillModeBackwards:
2396 list->append(cssValuePool().createIdentifierValue(CSSVal ueBackwards));
2397 break;
2398 case AnimationFillModeBoth:
2399 list->append(cssValuePool().createIdentifierValue(CSSVal ueBoth));
2400 break;
2401 }
2402 }
2403 } else 2407 } else
2404 list->append(cssValuePool().createIdentifierValue(CSSValueNone)) ; 2408 list->append(cssValuePool().createIdentifierValue(CSSValueNone)) ;
2405 return list.release(); 2409 return list.release();
2406 } 2410 }
2407 case CSSPropertyAnimationIterationCount: 2411 case CSSPropertyAnimationIterationCount:
2408 if (!RuntimeEnabledFeatures::cssAnimationUnprefixedEnabled()) 2412 if (!RuntimeEnabledFeatures::cssAnimationUnprefixedEnabled())
2409 break; 2413 break;
2410 case CSSPropertyWebkitAnimationIterationCount: { 2414 case CSSPropertyWebkitAnimationIterationCount: {
2411 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 2415 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated();
2412 const CSSAnimationDataList* t = style->animations(); 2416 const CSSAnimationDataList* t = style->animations();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2451 } 2455 }
2452 } else 2456 } else
2453 list->append(cssValuePool().createIdentifierValue(CSSValueRunnin g)); 2457 list->append(cssValuePool().createIdentifierValue(CSSValueRunnin g));
2454 return list.release(); 2458 return list.release();
2455 } 2459 }
2456 case CSSPropertyAnimationTimingFunction: 2460 case CSSPropertyAnimationTimingFunction:
2457 if (!RuntimeEnabledFeatures::cssAnimationUnprefixedEnabled()) 2461 if (!RuntimeEnabledFeatures::cssAnimationUnprefixedEnabled())
2458 break; 2462 break;
2459 case CSSPropertyWebkitAnimationTimingFunction: 2463 case CSSPropertyWebkitAnimationTimingFunction:
2460 return getTimingFunctionValue(style->animations()); 2464 return getTimingFunctionValue(style->animations());
2465 case CSSPropertyAnimation:
2466 case CSSPropertyWebkitAnimation: {
2467 const CSSAnimationDataList* animations = style->animations();
2468 if (animations) {
2469 RefPtr<CSSValueList> animationsList = CSSValueList::createCommaS eparated();
2470 for (size_t i = 0; i < animations->size(); ++i) {
2471 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparat ed();
2472 const CSSAnimationData* animation = animations->animation(i) ;
2473 list->append(cssValuePool().createValue(animation->name(), C SSPrimitiveValue::CSS_STRING));
2474 list->append(cssValuePool().createValue(animation->duration( ), CSSPrimitiveValue::CSS_S));
2475 list->append(createTimingFunctionValue(animation->timingFunc tion().get()));
2476 list->append(cssValuePool().createValue(animation->delay(), CSSPrimitiveValue::CSS_S));
2477 if (animation->iterationCount() == CSSAnimationData::Iterati onCountInfinite)
2478 list->append(cssValuePool().createIdentifierValue(CSSVal ueInfinite));
2479 else
2480 list->append(cssValuePool().createValue(animation->itera tionCount(), CSSPrimitiveValue::CSS_NUMBER));
2481 list->append(valueForAnimationDirection(animation->direction ()));
2482 list->append(valueForAnimationFillMode(animation->fillMode() ));
2483 if (animation->playState() == AnimPlayStatePaused)
2484 list->append(cssValuePool().createIdentifierValue(CSSVal uePaused));
2485 else
2486 list->append(cssValuePool().createIdentifierValue(CSSVal ueRunning));
2487 animationsList->append(list);
2488 }
2489 return animationsList.release();
2490 }
2491
2492 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated();
2493 // animation-name default value.
2494 list->append(cssValuePool().createIdentifierValue(CSSValueNone));
2495 list->append(cssValuePool().createValue(CSSAnimationData::initialAni mationDuration(), CSSPrimitiveValue::CSS_S));
2496 list->append(createTimingFunctionValue(CSSAnimationData::initialAnim ationTimingFunction().get()));
2497 list->append(cssValuePool().createValue(CSSAnimationData::initialAni mationDelay(), CSSPrimitiveValue::CSS_S));
2498 list->append(cssValuePool().createValue(CSSAnimationData::initialAni mationIterationCount(), CSSPrimitiveValue::CSS_NUMBER));
2499 list->append(valueForAnimationDirection(CSSAnimationData::initialAni mationDirection()));
2500 list->append(valueForAnimationFillMode(CSSAnimationData::initialAnim ationFillMode()));
2501 // Initial animation-play-state.
2502 list->append(cssValuePool().createIdentifierValue(CSSValueRunning));
2503 return list.release();
2504 }
2461 case CSSPropertyWebkitAppearance: 2505 case CSSPropertyWebkitAppearance:
2462 return cssValuePool().createValue(style->appearance()); 2506 return cssValuePool().createValue(style->appearance());
2463 case CSSPropertyWebkitAspectRatio: 2507 case CSSPropertyWebkitAspectRatio:
2464 if (!style->hasAspectRatio()) 2508 if (!style->hasAspectRatio())
2465 return cssValuePool().createIdentifierValue(CSSValueNone); 2509 return cssValuePool().createIdentifierValue(CSSValueNone);
2466 return CSSAspectRatioValue::create(style->aspectRatioNumerator(), st yle->aspectRatioDenominator()); 2510 return CSSAspectRatioValue::create(style->aspectRatioNumerator(), st yle->aspectRatioDenominator());
2467 case CSSPropertyWebkitBackfaceVisibility: 2511 case CSSPropertyWebkitBackfaceVisibility:
2468 return cssValuePool().createIdentifierValue((style->backfaceVisibili ty() == BackfaceVisibilityHidden) ? CSSValueHidden : CSSValueVisible); 2512 return cssValuePool().createIdentifierValue((style->backfaceVisibili ty() == BackfaceVisibilityHidden) ? CSSValueHidden : CSSValueVisible);
2469 case CSSPropertyWebkitBorderImage: 2513 case CSSPropertyWebkitBorderImage:
2470 return valueForNinePieceImage(style->borderImage()); 2514 return valueForNinePieceImage(style->borderImage());
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
2803 case CSSPropertyUnicodeRange: 2847 case CSSPropertyUnicodeRange:
2804 break; 2848 break;
2805 2849
2806 /* Other unimplemented properties */ 2850 /* Other unimplemented properties */
2807 case CSSPropertyPage: // for @page 2851 case CSSPropertyPage: // for @page
2808 case CSSPropertyQuotes: // FIXME: needs implementation 2852 case CSSPropertyQuotes: // FIXME: needs implementation
2809 case CSSPropertySize: // for @page 2853 case CSSPropertySize: // for @page
2810 break; 2854 break;
2811 2855
2812 /* Unimplemented -webkit- properties */ 2856 /* Unimplemented -webkit- properties */
2813 case CSSPropertyAnimation:
2814 case CSSPropertyWebkitAnimation:
2815 case CSSPropertyWebkitBorderRadius: 2857 case CSSPropertyWebkitBorderRadius:
2816 case CSSPropertyWebkitMarginCollapse: 2858 case CSSPropertyWebkitMarginCollapse:
2817 case CSSPropertyWebkitMarquee: 2859 case CSSPropertyWebkitMarquee:
2818 case CSSPropertyWebkitMarqueeSpeed: 2860 case CSSPropertyWebkitMarqueeSpeed:
2819 case CSSPropertyWebkitMask: 2861 case CSSPropertyWebkitMask:
2820 case CSSPropertyWebkitMaskRepeatX: 2862 case CSSPropertyWebkitMaskRepeatX:
2821 case CSSPropertyWebkitMaskRepeatY: 2863 case CSSPropertyWebkitMaskRepeatY:
2822 case CSSPropertyWebkitPerspectiveOriginX: 2864 case CSSPropertyWebkitPerspectiveOriginX:
2823 case CSSPropertyWebkitPerspectiveOriginY: 2865 case CSSPropertyWebkitPerspectiveOriginY:
2824 case CSSPropertyWebkitTextStroke: 2866 case CSSPropertyWebkitTextStroke:
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
3116 static const CSSPropertyID propertiesAfterSlashSeperator[3] = { CSSPropertyB ackgroundSize, CSSPropertyBackgroundOrigin, 3158 static const CSSPropertyID propertiesAfterSlashSeperator[3] = { CSSPropertyB ackgroundSize, CSSPropertyBackgroundOrigin,
3117 CSSPropertyB ackgroundClip }; 3159 CSSPropertyB ackgroundClip };
3118 3160
3119 RefPtr<CSSValueList> list = CSSValueList::createSlashSeparated(); 3161 RefPtr<CSSValueList> list = CSSValueList::createSlashSeparated();
3120 list->append(getCSSPropertyValuesForShorthandProperties(StylePropertyShortha nd(CSSPropertyBackground, propertiesBeforeSlashSeperator, WTF_ARRAY_LENGTH(prope rtiesBeforeSlashSeperator)))); 3162 list->append(getCSSPropertyValuesForShorthandProperties(StylePropertyShortha nd(CSSPropertyBackground, propertiesBeforeSlashSeperator, WTF_ARRAY_LENGTH(prope rtiesBeforeSlashSeperator))));
3121 list->append(getCSSPropertyValuesForShorthandProperties(StylePropertyShortha nd(CSSPropertyBackground, propertiesAfterSlashSeperator, WTF_ARRAY_LENGTH(proper tiesAfterSlashSeperator)))); 3163 list->append(getCSSPropertyValuesForShorthandProperties(StylePropertyShortha nd(CSSPropertyBackground, propertiesAfterSlashSeperator, WTF_ARRAY_LENGTH(proper tiesAfterSlashSeperator))));
3122 return list.release(); 3164 return list.release();
3123 } 3165 }
3124 3166
3125 } // namespace WebCore 3167 } // namespace WebCore
OLDNEW
« no previous file with comments | « LayoutTests/animations/animations-parsing-expected.txt ('k') | Source/core/css/CSSParser-in.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698