1 /** 2 * (C) 1999-2003 Lars Knoll (knoll (at) kde.org) 3 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Library General Public 7 * License as published by the Free Software Foundation; either 8 * version 2 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Library General Public License for more details. 14 * 15 * You should have received a copy of the GNU Library General Public License 16 * along with this library; see the file COPYING.LIB. If not, write to 17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18 * Boston, MA 02110-1301, USA. 19 */ 20 21 #include "config.h" 22 #include "core/css/CSSProperty.h" 23 24 #include "core/StylePropertyShorthand.h" 25 #include "core/css/CSSValueList.h" 26 #include "core/rendering/style/RenderStyleConstants.h" 27 28 namespace WebCore { 29 30 struct SameSizeAsCSSProperty { 31 uint32_t bitfields; 32 void* value; 33 }; 34 35 COMPILE_ASSERT(sizeof(CSSProperty) == sizeof(SameSizeAsCSSProperty), CSSProperty_should_stay_small); 36 37 CSSPropertyID StylePropertyMetadata::shorthandID() const 38 { 39 if (!m_isSetFromShorthand) 40 return CSSPropertyInvalid; 41 42 Vector<StylePropertyShorthand, 4> shorthands; 43 getMatchingShorthandsForLonghand(static_cast<CSSPropertyID>(m_propertyID), &shorthands); 44 ASSERT(shorthands.size() && m_indexInShorthandsVector >= 0 && m_indexInShorthandsVector < shorthands.size()); 45 return shorthands.at(m_indexInShorthandsVector).id(); 46 } 47 48 void CSSProperty::wrapValueInCommaSeparatedList() 49 { 50 RefPtrWillBeRawPtr<CSSValue> value = m_value.release(); 51 m_value = CSSValueList::createCommaSeparated(); 52 toCSSValueList(m_value.get())->append(value.release()); 53 } 54 55 enum LogicalBoxSide { BeforeSide, EndSide, AfterSide, StartSide }; 56 enum PhysicalBoxSide { TopSide, RightSide, BottomSide, LeftSide }; 57 58 static CSSPropertyID resolveToPhysicalProperty(TextDirection direction, WritingMode writingMode, LogicalBoxSide logicalSide, const StylePropertyShorthand& shorthand) 59 { 60 if (direction == LTR) { 61 if (writingMode == TopToBottomWritingMode) { 62 // The common case. The logical and physical box sides match. 63 // Left = Start, Right = End, Before = Top, After = Bottom 64 return shorthand.properties()[logicalSide]; 65 } 66 67 if (writingMode == BottomToTopWritingMode) { 68 // Start = Left, End = Right, Before = Bottom, After = Top. 69 switch (logicalSide) { 70 case StartSide: 71 return shorthand.properties()[LeftSide]; 72 case EndSide: 73 return shorthand.properties()[RightSide]; 74 case BeforeSide: 75 return shorthand.properties()[BottomSide]; 76 default: 77 return shorthand.properties()[TopSide]; 78 } 79 } 80 81 if (writingMode == LeftToRightWritingMode) { 82 // Start = Top, End = Bottom, Before = Left, After = Right. 83 switch (logicalSide) { 84 case StartSide: 85 return shorthand.properties()[TopSide]; 86 case EndSide: 87 return shorthand.properties()[BottomSide]; 88 case BeforeSide: 89 return shorthand.properties()[LeftSide]; 90 default: 91 return shorthand.properties()[RightSide]; 92 } 93 } 94 95 // Start = Top, End = Bottom, Before = Right, After = Left 96 switch (logicalSide) { 97 case StartSide: 98 return shorthand.properties()[TopSide]; 99 case EndSide: 100 return shorthand.properties()[BottomSide]; 101 case BeforeSide: 102 return shorthand.properties()[RightSide]; 103 default: 104 return shorthand.properties()[LeftSide]; 105 } 106 } 107 108 if (writingMode == TopToBottomWritingMode) { 109 // Start = Right, End = Left, Before = Top, After = Bottom 110 switch (logicalSide) { 111 case StartSide: 112 return shorthand.properties()[RightSide]; 113 case EndSide: 114 return shorthand.properties()[LeftSide]; 115 case BeforeSide: 116 return shorthand.properties()[TopSide]; 117 default: 118 return shorthand.properties()[BottomSide]; 119 } 120 } 121 122 if (writingMode == BottomToTopWritingMode) { 123 // Start = Right, End = Left, Before = Bottom, After = Top 124 switch (logicalSide) { 125 case StartSide: 126 return shorthand.properties()[RightSide]; 127 case EndSide: 128 return shorthand.properties()[LeftSide]; 129 case BeforeSide: 130 return shorthand.properties()[BottomSide]; 131 default: 132 return shorthand.properties()[TopSide]; 133 } 134 } 135 136 if (writingMode == LeftToRightWritingMode) { 137 // Start = Bottom, End = Top, Before = Left, After = Right 138 switch (logicalSide) { 139 case StartSide: 140 return shorthand.properties()[BottomSide]; 141 case EndSide: 142 return shorthand.properties()[TopSide]; 143 case BeforeSide: 144 return shorthand.properties()[LeftSide]; 145 default: 146 return shorthand.properties()[RightSide]; 147 } 148 } 149 150 // Start = Bottom, End = Top, Before = Right, After = Left 151 switch (logicalSide) { 152 case StartSide: 153 return shorthand.properties()[BottomSide]; 154 case EndSide: 155 return shorthand.properties()[TopSide]; 156 case BeforeSide: 157 return shorthand.properties()[RightSide]; 158 default: 159 return shorthand.properties()[LeftSide]; 160 } 161 } 162 163 enum LogicalExtent { LogicalWidth, LogicalHeight }; 164 165 static CSSPropertyID resolveToPhysicalProperty(WritingMode writingMode, LogicalExtent logicalSide, const CSSPropertyID* properties) 166 { 167 if (writingMode == TopToBottomWritingMode || writingMode == BottomToTopWritingMode) 168 return properties[logicalSide]; 169 return logicalSide == LogicalWidth ? properties[1] : properties[0]; 170 } 171 172 static const StylePropertyShorthand& borderDirections() 173 { 174 static const CSSPropertyID properties[4] = { CSSPropertyBorderTop, CSSPropertyBorderRight, CSSPropertyBorderBottom, CSSPropertyBorderLeft }; 175 DEFINE_STATIC_LOCAL(StylePropertyShorthand, borderDirections, (CSSPropertyBorder, properties, WTF_ARRAY_LENGTH(properties))); 176 return borderDirections; 177 } 178 179 CSSPropertyID CSSProperty::resolveDirectionAwareProperty(CSSPropertyID propertyID, TextDirection direction, WritingMode writingMode) 180 { 181 switch (propertyID) { 182 case CSSPropertyWebkitMarginEnd: 183 return resolveToPhysicalProperty(direction, writingMode, EndSide, marginShorthand()); 184 case CSSPropertyWebkitMarginStart: 185 return resolveToPhysicalProperty(direction, writingMode, StartSide, marginShorthand()); 186 case CSSPropertyWebkitMarginBefore: 187 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, marginShorthand()); 188 case CSSPropertyWebkitMarginAfter: 189 return resolveToPhysicalProperty(direction, writingMode, AfterSide, marginShorthand()); 190 case CSSPropertyWebkitPaddingEnd: 191 return resolveToPhysicalProperty(direction, writingMode, EndSide, paddingShorthand()); 192 case CSSPropertyWebkitPaddingStart: 193 return resolveToPhysicalProperty(direction, writingMode, StartSide, paddingShorthand()); 194 case CSSPropertyWebkitPaddingBefore: 195 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, paddingShorthand()); 196 case CSSPropertyWebkitPaddingAfter: 197 return resolveToPhysicalProperty(direction, writingMode, AfterSide, paddingShorthand()); 198 case CSSPropertyWebkitBorderEnd: 199 return resolveToPhysicalProperty(direction, writingMode, EndSide, borderDirections()); 200 case CSSPropertyWebkitBorderStart: 201 return resolveToPhysicalProperty(direction, writingMode, StartSide, borderDirections()); 202 case CSSPropertyWebkitBorderBefore: 203 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderDirections()); 204 case CSSPropertyWebkitBorderAfter: 205 return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderDirections()); 206 case CSSPropertyWebkitBorderEndColor: 207 return resolveToPhysicalProperty(direction, writingMode, EndSide, borderColorShorthand()); 208 case CSSPropertyWebkitBorderStartColor: 209 return resolveToPhysicalProperty(direction, writingMode, StartSide, borderColorShorthand()); 210 case CSSPropertyWebkitBorderBeforeColor: 211 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderColorShorthand()); 212 case CSSPropertyWebkitBorderAfterColor: 213 return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderColorShorthand()); 214 case CSSPropertyWebkitBorderEndStyle: 215 return resolveToPhysicalProperty(direction, writingMode, EndSide, borderStyleShorthand()); 216 case CSSPropertyWebkitBorderStartStyle: 217 return resolveToPhysicalProperty(direction, writingMode, StartSide, borderStyleShorthand()); 218 case CSSPropertyWebkitBorderBeforeStyle: 219 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderStyleShorthand()); 220 case CSSPropertyWebkitBorderAfterStyle: 221 return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderStyleShorthand()); 222 case CSSPropertyWebkitBorderEndWidth: 223 return resolveToPhysicalProperty(direction, writingMode, EndSide, borderWidthShorthand()); 224 case CSSPropertyWebkitBorderStartWidth: 225 return resolveToPhysicalProperty(direction, writingMode, StartSide, borderWidthShorthand()); 226 case CSSPropertyWebkitBorderBeforeWidth: 227 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderWidthShorthand()); 228 case CSSPropertyWebkitBorderAfterWidth: 229 return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderWidthShorthand()); 230 case CSSPropertyWebkitLogicalWidth: { 231 const CSSPropertyID properties[2] = { CSSPropertyWidth, CSSPropertyHeight }; 232 return resolveToPhysicalProperty(writingMode, LogicalWidth, properties); 233 } 234 case CSSPropertyWebkitLogicalHeight: { 235 const CSSPropertyID properties[2] = { CSSPropertyWidth, CSSPropertyHeight }; 236 return resolveToPhysicalProperty(writingMode, LogicalHeight, properties); 237 } 238 case CSSPropertyWebkitMinLogicalWidth: { 239 const CSSPropertyID properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight }; 240 return resolveToPhysicalProperty(writingMode, LogicalWidth, properties); 241 } 242 case CSSPropertyWebkitMinLogicalHeight: { 243 const CSSPropertyID properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight }; 244 return resolveToPhysicalProperty(writingMode, LogicalHeight, properties); 245 } 246 case CSSPropertyWebkitMaxLogicalWidth: { 247 const CSSPropertyID properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight }; 248 return resolveToPhysicalProperty(writingMode, LogicalWidth, properties); 249 } 250 case CSSPropertyWebkitMaxLogicalHeight: { 251 const CSSPropertyID properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight }; 252 return resolveToPhysicalProperty(writingMode, LogicalHeight, properties); 253 } 254 default: 255 return propertyID; 256 } 257 } 258 259 bool CSSProperty::isInheritedProperty(CSSPropertyID propertyID) 260 { 261 switch (propertyID) { 262 case CSSPropertyBorderCollapse: 263 case CSSPropertyBorderSpacing: 264 case CSSPropertyCaptionSide: 265 case CSSPropertyClipRule: 266 case CSSPropertyColor: 267 case CSSPropertyColorInterpolation: 268 case CSSPropertyColorInterpolationFilters: 269 case CSSPropertyColorRendering: 270 case CSSPropertyCursor: 271 case CSSPropertyDirection: 272 case CSSPropertyEmptyCells: 273 case CSSPropertyFill: 274 case CSSPropertyFillOpacity: 275 case CSSPropertyFillRule: 276 case CSSPropertyFont: 277 case CSSPropertyFontFamily: 278 case CSSPropertyFontSize: 279 case CSSPropertyFontStyle: 280 case CSSPropertyFontVariant: 281 case CSSPropertyFontWeight: 282 case CSSPropertyGlyphOrientationHorizontal: 283 case CSSPropertyGlyphOrientationVertical: 284 case CSSPropertyImageRendering: 285 case CSSPropertyLetterSpacing: 286 case CSSPropertyLineHeight: 287 case CSSPropertyListStyle: 288 case CSSPropertyListStyleImage: 289 case CSSPropertyListStylePosition: 290 case CSSPropertyListStyleType: 291 case CSSPropertyMarker: 292 case CSSPropertyMarkerEnd: 293 case CSSPropertyMarkerMid: 294 case CSSPropertyMarkerStart: 295 case CSSPropertyOrphans: 296 case CSSPropertyPointerEvents: 297 case CSSPropertyQuotes: 298 case CSSPropertyResize: 299 case CSSPropertyShapeRendering: 300 case CSSPropertySpeak: 301 case CSSPropertyStroke: 302 case CSSPropertyStrokeDasharray: 303 case CSSPropertyStrokeDashoffset: 304 case CSSPropertyStrokeLinecap: 305 case CSSPropertyStrokeLinejoin: 306 case CSSPropertyStrokeMiterlimit: 307 case CSSPropertyStrokeOpacity: 308 case CSSPropertyStrokeWidth: 309 case CSSPropertyTabSize: 310 case CSSPropertyTextAlign: 311 case CSSPropertyTextAlignLast: 312 case CSSPropertyTextJustify: 313 case CSSPropertyTextAnchor: 314 case CSSPropertyTextIndent: 315 case CSSPropertyTextRendering: 316 case CSSPropertyTextShadow: 317 case CSSPropertyTextTransform: 318 case CSSPropertyTouchActionDelay: 319 case CSSPropertyVisibility: 320 case CSSPropertyWebkitAspectRatio: 321 case CSSPropertyWebkitBorderHorizontalSpacing: 322 case CSSPropertyWebkitBorderVerticalSpacing: 323 case CSSPropertyWebkitBoxDirection: 324 case CSSPropertyWebkitFontFeatureSettings: 325 case CSSPropertyFontKerning: 326 case CSSPropertyWebkitFontSmoothing: 327 case CSSPropertyFontVariantLigatures: 328 case CSSPropertyWebkitLocale: 329 case CSSPropertyWebkitHighlight: 330 case CSSPropertyWebkitHyphenateCharacter: 331 case CSSPropertyWebkitLineBoxContain: 332 case CSSPropertyWebkitLineBreak: 333 case CSSPropertyWebkitPrintColorAdjust: 334 case CSSPropertyWebkitRtlOrdering: 335 case CSSPropertyWebkitRubyPosition: 336 case CSSPropertyWebkitTapHighlightColor: 337 case CSSPropertyWebkitTextCombine: 338 case CSSPropertyTextUnderlinePosition: 339 case CSSPropertyWebkitTextDecorationsInEffect: 340 case CSSPropertyWebkitTextEmphasis: 341 case CSSPropertyWebkitTextEmphasisColor: 342 case CSSPropertyWebkitTextEmphasisPosition: 343 case CSSPropertyWebkitTextEmphasisStyle: 344 case CSSPropertyWebkitTextFillColor: 345 case CSSPropertyWebkitTextOrientation: 346 case CSSPropertyWebkitTextSecurity: 347 case CSSPropertyWebkitTextStroke: 348 case CSSPropertyWebkitTextStrokeColor: 349 case CSSPropertyWebkitTextStrokeWidth: 350 case CSSPropertyWebkitUserModify: 351 case CSSPropertyWebkitUserSelect: 352 case CSSPropertyWebkitWritingMode: 353 case CSSPropertyWhiteSpace: 354 case CSSPropertyWidows: 355 case CSSPropertyWordBreak: 356 case CSSPropertyWordSpacing: 357 case CSSPropertyWordWrap: 358 case CSSPropertyWritingMode: 359 return true; 360 case CSSPropertyAnimation: 361 case CSSPropertyAnimationDelay: 362 case CSSPropertyAnimationDirection: 363 case CSSPropertyAnimationDuration: 364 case CSSPropertyAnimationFillMode: 365 case CSSPropertyAnimationIterationCount: 366 case CSSPropertyAnimationName: 367 case CSSPropertyAnimationPlayState: 368 case CSSPropertyAnimationTimingFunction: 369 case CSSPropertyAlignmentBaseline: 370 case CSSPropertyBackground: 371 case CSSPropertyBackgroundAttachment: 372 case CSSPropertyBackgroundBlendMode: 373 case CSSPropertyBackgroundClip: 374 case CSSPropertyBackgroundColor: 375 case CSSPropertyBackgroundImage: 376 case CSSPropertyBackgroundOrigin: 377 case CSSPropertyBackgroundPosition: 378 case CSSPropertyBackgroundPositionX: 379 case CSSPropertyBackgroundPositionY: 380 case CSSPropertyBackgroundRepeat: 381 case CSSPropertyBackgroundRepeatX: 382 case CSSPropertyBackgroundRepeatY: 383 case CSSPropertyBackgroundSize: 384 case CSSPropertyBaselineShift: 385 case CSSPropertyBorder: 386 case CSSPropertyBorderBottom: 387 case CSSPropertyBorderBottomColor: 388 case CSSPropertyBorderBottomLeftRadius: 389 case CSSPropertyBorderBottomRightRadius: 390 case CSSPropertyBorderBottomStyle: 391 case CSSPropertyBorderBottomWidth: 392 case CSSPropertyBorderColor: 393 case CSSPropertyBorderImage: 394 case CSSPropertyBorderImageOutset: 395 case CSSPropertyBorderImageRepeat: 396 case CSSPropertyBorderImageSlice: 397 case CSSPropertyBorderImageSource: 398 case CSSPropertyBorderImageWidth: 399 case CSSPropertyBorderLeft: 400 case CSSPropertyBorderLeftColor: 401 case CSSPropertyBorderLeftStyle: 402 case CSSPropertyBorderLeftWidth: 403 case CSSPropertyBorderRadius: 404 case CSSPropertyBorderRight: 405 case CSSPropertyBorderRightColor: 406 case CSSPropertyBorderRightStyle: 407 case CSSPropertyBorderRightWidth: 408 case CSSPropertyBorderStyle: 409 case CSSPropertyBorderTop: 410 case CSSPropertyBorderTopColor: 411 case CSSPropertyBorderTopLeftRadius: 412 case CSSPropertyBorderTopRightRadius: 413 case CSSPropertyBorderTopStyle: 414 case CSSPropertyBorderTopWidth: 415 case CSSPropertyBorderWidth: 416 case CSSPropertyBottom: 417 case CSSPropertyBoxShadow: 418 case CSSPropertyBoxSizing: 419 case CSSPropertyBufferedRendering: 420 case CSSPropertyClear: 421 case CSSPropertyClip: 422 case CSSPropertyClipPath: 423 case CSSPropertyContent: 424 case CSSPropertyCounterIncrement: 425 case CSSPropertyCounterReset: 426 case CSSPropertyDisplay: 427 case CSSPropertyDominantBaseline: 428 case CSSPropertyEnableBackground: 429 case CSSPropertyFilter: 430 case CSSPropertyFloat: 431 case CSSPropertyFloodColor: 432 case CSSPropertyFloodOpacity: 433 case CSSPropertyFontStretch: 434 case CSSPropertyHeight: 435 case CSSPropertyIsolation: 436 case CSSPropertyJustifySelf: 437 case CSSPropertyLeft: 438 case CSSPropertyLightingColor: 439 case CSSPropertyMargin: 440 case CSSPropertyMarginBottom: 441 case CSSPropertyMarginLeft: 442 case CSSPropertyMarginRight: 443 case CSSPropertyMarginTop: 444 case CSSPropertyMask: 445 case CSSPropertyMaskType: 446 case CSSPropertyMaskSourceType: 447 case CSSPropertyMaxHeight: 448 case CSSPropertyMaxWidth: 449 case CSSPropertyMinHeight: 450 case CSSPropertyMinWidth: 451 case CSSPropertyMixBlendMode: 452 case CSSPropertyObjectFit: 453 case CSSPropertyObjectPosition: 454 case CSSPropertyOpacity: 455 case CSSPropertyOutline: 456 case CSSPropertyOutlineColor: 457 case CSSPropertyOutlineOffset: 458 case CSSPropertyOutlineStyle: 459 case CSSPropertyOutlineWidth: 460 case CSSPropertyOverflow: 461 case CSSPropertyOverflowWrap: 462 case CSSPropertyOverflowX: 463 case CSSPropertyOverflowY: 464 case CSSPropertyPadding: 465 case CSSPropertyPaddingBottom: 466 case CSSPropertyPaddingLeft: 467 case CSSPropertyPaddingRight: 468 case CSSPropertyPaddingTop: 469 case CSSPropertyPage: 470 case CSSPropertyPageBreakAfter: 471 case CSSPropertyPageBreakBefore: 472 case CSSPropertyPageBreakInside: 473 case CSSPropertyPaintOrder: 474 case CSSPropertyPosition: 475 case CSSPropertyRight: 476 case CSSPropertyScrollBehavior: 477 case CSSPropertySize: 478 case CSSPropertySrc: 479 case CSSPropertyStopColor: 480 case CSSPropertyStopOpacity: 481 case CSSPropertyTableLayout: 482 case CSSPropertyTextDecoration: 483 case CSSPropertyTextDecorationLine: 484 case CSSPropertyTextDecorationStyle: 485 case CSSPropertyTextDecorationColor: 486 case CSSPropertyTextLineThroughColor: 487 case CSSPropertyTextLineThroughMode: 488 case CSSPropertyTextLineThroughStyle: 489 case CSSPropertyTextLineThroughWidth: 490 case CSSPropertyTextOverflow: 491 case CSSPropertyTextOverlineColor: 492 case CSSPropertyTextOverlineMode: 493 case CSSPropertyTextOverlineStyle: 494 case CSSPropertyTextOverlineWidth: 495 case CSSPropertyTextUnderlineColor: 496 case CSSPropertyTextUnderlineMode: 497 case CSSPropertyTextUnderlineStyle: 498 case CSSPropertyTextUnderlineWidth: 499 case CSSPropertyTop: 500 case CSSPropertyTouchAction: 501 case CSSPropertyTransition: 502 case CSSPropertyTransitionDelay: 503 case CSSPropertyTransitionDuration: 504 case CSSPropertyTransitionProperty: 505 case CSSPropertyTransitionTimingFunction: 506 case CSSPropertyUnicodeBidi: 507 case CSSPropertyUnicodeRange: 508 case CSSPropertyVectorEffect: 509 case CSSPropertyVerticalAlign: 510 case CSSPropertyAlignContent: 511 case CSSPropertyAlignItems: 512 case CSSPropertyAlignSelf: 513 case CSSPropertyWebkitAnimation: 514 case CSSPropertyWebkitAnimationDelay: 515 case CSSPropertyWebkitAnimationDirection: 516 case CSSPropertyWebkitAnimationDuration: 517 case CSSPropertyWebkitAnimationFillMode: 518 case CSSPropertyWebkitAnimationIterationCount: 519 case CSSPropertyWebkitAnimationName: 520 case CSSPropertyWebkitAnimationPlayState: 521 case CSSPropertyWebkitAnimationTimingFunction: 522 case CSSPropertyWebkitAppearance: 523 case CSSPropertyBackfaceVisibility: 524 case CSSPropertyWebkitBackfaceVisibility: 525 case CSSPropertyWebkitBackgroundClip: 526 case CSSPropertyWebkitBackgroundComposite: 527 case CSSPropertyWebkitBackgroundOrigin: 528 case CSSPropertyWebkitBackgroundSize: 529 case CSSPropertyWebkitBorderAfter: 530 case CSSPropertyWebkitBorderAfterColor: 531 case CSSPropertyWebkitBorderAfterStyle: 532 case CSSPropertyWebkitBorderAfterWidth: 533 case CSSPropertyWebkitBorderBefore: 534 case CSSPropertyWebkitBorderBeforeColor: 535 case CSSPropertyWebkitBorderBeforeStyle: 536 case CSSPropertyWebkitBorderBeforeWidth: 537 case CSSPropertyWebkitBorderEnd: 538 case CSSPropertyWebkitBorderEndColor: 539 case CSSPropertyWebkitBorderEndStyle: 540 case CSSPropertyWebkitBorderEndWidth: 541 case CSSPropertyWebkitBorderFit: 542 case CSSPropertyWebkitBorderImage: 543 case CSSPropertyWebkitBorderRadius: 544 case CSSPropertyWebkitBorderStart: 545 case CSSPropertyWebkitBorderStartColor: 546 case CSSPropertyWebkitBorderStartStyle: 547 case CSSPropertyWebkitBorderStartWidth: 548 case CSSPropertyWebkitBoxAlign: 549 case CSSPropertyWebkitBoxDecorationBreak: 550 case CSSPropertyWebkitBoxFlex: 551 case CSSPropertyWebkitBoxFlexGroup: 552 case CSSPropertyWebkitBoxLines: 553 case CSSPropertyWebkitBoxOrdinalGroup: 554 case CSSPropertyWebkitBoxOrient: 555 case CSSPropertyWebkitBoxPack: 556 case CSSPropertyWebkitBoxReflect: 557 case CSSPropertyWebkitBoxShadow: 558 case CSSPropertyInternalCallback: 559 case CSSPropertyWebkitClipPath: 560 case CSSPropertyWebkitColumnBreakAfter: 561 case CSSPropertyWebkitColumnBreakBefore: 562 case CSSPropertyWebkitColumnBreakInside: 563 case CSSPropertyWebkitColumnCount: 564 case CSSPropertyColumnFill: 565 case CSSPropertyWebkitColumnGap: 566 case CSSPropertyWebkitColumnRule: 567 case CSSPropertyWebkitColumnRuleColor: 568 case CSSPropertyWebkitColumnRuleStyle: 569 case CSSPropertyWebkitColumnRuleWidth: 570 case CSSPropertyWebkitColumnSpan: 571 case CSSPropertyWebkitColumnWidth: 572 case CSSPropertyWebkitColumns: 573 case CSSPropertyWebkitFilter: 574 case CSSPropertyFlex: 575 case CSSPropertyFlexBasis: 576 case CSSPropertyFlexDirection: 577 case CSSPropertyFlexFlow: 578 case CSSPropertyFlexGrow: 579 case CSSPropertyFlexShrink: 580 case CSSPropertyFlexWrap: 581 case CSSPropertyWebkitFontSizeDelta: 582 case CSSPropertyGridArea: 583 case CSSPropertyGridAutoColumns: 584 case CSSPropertyGridAutoFlow: 585 case CSSPropertyGridAutoRows: 586 case CSSPropertyGridColumn: 587 case CSSPropertyGridColumnEnd: 588 case CSSPropertyGridColumnStart: 589 case CSSPropertyGrid: 590 case CSSPropertyGridTemplate: 591 case CSSPropertyGridTemplateColumns: 592 case CSSPropertyGridTemplateRows: 593 case CSSPropertyGridRow: 594 case CSSPropertyGridRowEnd: 595 case CSSPropertyGridRowStart: 596 case CSSPropertyGridTemplateAreas: 597 case CSSPropertyJustifyContent: 598 case CSSPropertyWebkitLineClamp: 599 case CSSPropertyWebkitLogicalHeight: 600 case CSSPropertyWebkitLogicalWidth: 601 case CSSPropertyWebkitMarginAfter: 602 case CSSPropertyWebkitMarginAfterCollapse: 603 case CSSPropertyWebkitMarginBefore: 604 case CSSPropertyWebkitMarginBeforeCollapse: 605 case CSSPropertyWebkitMarginBottomCollapse: 606 case CSSPropertyWebkitMarginCollapse: 607 case CSSPropertyWebkitMarginEnd: 608 case CSSPropertyWebkitMarginStart: 609 case CSSPropertyWebkitMarginTopCollapse: 610 case CSSPropertyInternalMarqueeDirection: 611 case CSSPropertyInternalMarqueeIncrement: 612 case CSSPropertyInternalMarqueeRepetition: 613 case CSSPropertyInternalMarqueeSpeed: 614 case CSSPropertyOrder: 615 case CSSPropertyInternalMarqueeStyle: 616 case CSSPropertyWebkitMask: 617 case CSSPropertyWebkitMaskBoxImage: 618 case CSSPropertyWebkitMaskBoxImageOutset: 619 case CSSPropertyWebkitMaskBoxImageRepeat: 620 case CSSPropertyWebkitMaskBoxImageSlice: 621 case CSSPropertyWebkitMaskBoxImageSource: 622 case CSSPropertyWebkitMaskBoxImageWidth: 623 case CSSPropertyWebkitMaskClip: 624 case CSSPropertyWebkitMaskComposite: 625 case CSSPropertyWebkitMaskImage: 626 case CSSPropertyWebkitMaskOrigin: 627 case CSSPropertyWebkitMaskPosition: 628 case CSSPropertyWebkitMaskPositionX: 629 case CSSPropertyWebkitMaskPositionY: 630 case CSSPropertyWebkitMaskRepeat: 631 case CSSPropertyWebkitMaskRepeatX: 632 case CSSPropertyWebkitMaskRepeatY: 633 case CSSPropertyWebkitMaskSize: 634 case CSSPropertyWebkitMaxLogicalWidth: 635 case CSSPropertyWebkitMaxLogicalHeight: 636 case CSSPropertyWebkitMinLogicalWidth: 637 case CSSPropertyWebkitMinLogicalHeight: 638 case CSSPropertyWebkitPaddingAfter: 639 case CSSPropertyWebkitPaddingBefore: 640 case CSSPropertyWebkitPaddingEnd: 641 case CSSPropertyWebkitPaddingStart: 642 case CSSPropertyPerspective: 643 case CSSPropertyWebkitPerspective: 644 case CSSPropertyPerspectiveOrigin: 645 case CSSPropertyWebkitPerspectiveOrigin: 646 case CSSPropertyWebkitPerspectiveOriginX: 647 case CSSPropertyWebkitPerspectiveOriginY: 648 case CSSPropertyTransform: 649 case CSSPropertyWebkitTransform: 650 case CSSPropertyTransformOrigin: 651 case CSSPropertyWebkitTransformOrigin: 652 case CSSPropertyWebkitTransformOriginX: 653 case CSSPropertyWebkitTransformOriginY: 654 case CSSPropertyWebkitTransformOriginZ: 655 case CSSPropertyTransformStyle: 656 case CSSPropertyWebkitTransformStyle: 657 case CSSPropertyWebkitTransition: 658 case CSSPropertyWebkitTransitionDelay: 659 case CSSPropertyWebkitTransitionDuration: 660 case CSSPropertyWebkitTransitionProperty: 661 case CSSPropertyWebkitTransitionTimingFunction: 662 case CSSPropertyWebkitUserDrag: 663 case CSSPropertyWebkitWrapFlow: 664 case CSSPropertyShapeMargin: 665 case CSSPropertyShapeImageThreshold: 666 case CSSPropertyShapeOutside: 667 case CSSPropertyWebkitWrapThrough: 668 case CSSPropertyWebkitAppRegion: 669 case CSSPropertyWidth: 670 case CSSPropertyWillChange: 671 case CSSPropertyMaxZoom: 672 case CSSPropertyMinZoom: 673 case CSSPropertyOrientation: 674 case CSSPropertyUserZoom: 675 case CSSPropertyZIndex: 676 case CSSPropertyZoom: 677 case CSSPropertyAll: 678 return false; 679 case CSSPropertyInvalid: 680 ASSERT_NOT_REACHED(); 681 return false; 682 } 683 ASSERT_NOT_REACHED(); 684 return false; 685 } 686 687 bool CSSProperty::isAffectedByAllProperty(CSSPropertyID propertyID) 688 { 689 if (propertyID == CSSPropertyAll) 690 return false; 691 692 // all shorthand spec says: 693 // The all property is a shorthand that resets all CSS properties except 694 // direction and unicode-bidi. It only accepts the CSS-wide keywords. 695 // c.f. http://dev.w3.org/csswg/css-cascade/#all-shorthand 696 // So CSSPropertyUnicodeBidi and CSSPropertyDirection are not 697 // affected by all property. 698 return propertyID != CSSPropertyUnicodeBidi && propertyID != CSSPropertyDirection; 699 } 700 701 } // namespace WebCore 702