Changeset 278985 in webkit for trunk/Source/WebCore/css/CSSProperty.cpp
- Timestamp:
- Jun 17, 2021, 6:13:49 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/css/CSSProperty.cpp
r278611 r278985 24 24 #include "CSSValueList.h" 25 25 #include "StylePropertyShorthand.h" 26 #include "StylePropertyShorthandFunctions.h"27 26 #include <wtf/NeverDestroyed.h> 28 27 … … 53 52 } 54 53 55 static CSSPropertyID resolveToPhysicalProperty(TextDirection direction, WritingMode writingMode, LogicalBoxSide logicalSide, const StylePropertyShorthand& shorthand)56 {57 RELEASE_ASSERT(shorthand.length() == 4);58 return shorthand.properties()[static_cast<size_t>(mapLogicalSideToPhysicalSide(makeTextFlow(writingMode, direction), logicalSide))];59 }60 61 static CSSPropertyID resolveToPhysicalProperty(TextDirection direction, WritingMode writingMode, LogicalBoxCorner logicalBoxCorner, const StylePropertyShorthand& shorthand)62 {63 RELEASE_ASSERT(shorthand.length() == 4);64 return shorthand.properties()[static_cast<size_t>(mapLogicalCornerToPhysicalCorner(makeTextFlow(writingMode, direction), logicalBoxCorner))];65 }66 67 enum LogicalExtent { LogicalWidth, LogicalHeight };68 69 static CSSPropertyID resolveToPhysicalProperty(WritingMode writingMode, LogicalExtent logicalSide, const CSSPropertyID (&properties)[2])70 {71 if (writingMode == WritingMode::TopToBottom || writingMode == WritingMode::BottomToTop)72 return properties[logicalSide];73 return logicalSide == LogicalWidth ? properties[1] : properties[0];74 }75 76 static const StylePropertyShorthand& borderDirections()77 {78 static const CSSPropertyID properties[4] = { CSSPropertyBorderTop, CSSPropertyBorderRight, CSSPropertyBorderBottom, CSSPropertyBorderLeft };79 static const StylePropertyShorthand borderDirections(CSSPropertyBorder, properties);80 return borderDirections;81 }82 83 CSSPropertyID CSSProperty::resolveDirectionAwareProperty(CSSPropertyID propertyID, TextDirection direction, WritingMode writingMode)84 {85 switch (propertyID) {86 case CSSPropertyInsetInlineEnd:87 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::End, insetShorthand());88 case CSSPropertyInsetInlineStart:89 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Start, insetShorthand());90 case CSSPropertyInsetBlockStart:91 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Before, insetShorthand());92 case CSSPropertyInsetBlockEnd:93 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::After, insetShorthand());94 case CSSPropertyMarginInlineEnd:95 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::End, marginShorthand());96 case CSSPropertyMarginInlineStart:97 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Start, marginShorthand());98 case CSSPropertyMarginBlockStart:99 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Before, marginShorthand());100 case CSSPropertyMarginBlockEnd:101 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::After, marginShorthand());102 case CSSPropertyPaddingInlineEnd:103 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::End, paddingShorthand());104 case CSSPropertyPaddingInlineStart:105 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Start, paddingShorthand());106 case CSSPropertyPaddingBlockStart:107 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Before, paddingShorthand());108 case CSSPropertyPaddingBlockEnd:109 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::After, paddingShorthand());110 case CSSPropertyBorderInlineEnd:111 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::End, borderDirections());112 case CSSPropertyBorderInlineStart:113 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Start, borderDirections());114 case CSSPropertyBorderBlockStart:115 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Before, borderDirections());116 case CSSPropertyBorderBlockEnd:117 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::After, borderDirections());118 case CSSPropertyBorderInlineEndColor:119 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::End, borderColorShorthand());120 case CSSPropertyBorderInlineStartColor:121 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Start, borderColorShorthand());122 case CSSPropertyBorderBlockStartColor:123 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Before, borderColorShorthand());124 case CSSPropertyBorderBlockEndColor:125 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::After, borderColorShorthand());126 case CSSPropertyBorderInlineEndStyle:127 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::End, borderStyleShorthand());128 case CSSPropertyBorderInlineStartStyle:129 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Start, borderStyleShorthand());130 case CSSPropertyBorderBlockStartStyle:131 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Before, borderStyleShorthand());132 case CSSPropertyBorderBlockEndStyle:133 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::After, borderStyleShorthand());134 case CSSPropertyBorderInlineEndWidth:135 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::End, borderWidthShorthand());136 case CSSPropertyBorderInlineStartWidth:137 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Start, borderWidthShorthand());138 case CSSPropertyBorderBlockStartWidth:139 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Before, borderWidthShorthand());140 case CSSPropertyBorderBlockEndWidth:141 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::After, borderWidthShorthand());142 case CSSPropertyInlineSize: {143 const CSSPropertyID properties[2] = { CSSPropertyWidth, CSSPropertyHeight };144 return resolveToPhysicalProperty(writingMode, LogicalWidth, properties);145 }146 case CSSPropertyBlockSize: {147 const CSSPropertyID properties[2] = { CSSPropertyWidth, CSSPropertyHeight };148 return resolveToPhysicalProperty(writingMode, LogicalHeight, properties);149 }150 case CSSPropertyMinInlineSize: {151 const CSSPropertyID properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight };152 return resolveToPhysicalProperty(writingMode, LogicalWidth, properties);153 }154 case CSSPropertyMinBlockSize: {155 const CSSPropertyID properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight };156 return resolveToPhysicalProperty(writingMode, LogicalHeight, properties);157 }158 case CSSPropertyMaxInlineSize: {159 const CSSPropertyID properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight };160 return resolveToPhysicalProperty(writingMode, LogicalWidth, properties);161 }162 case CSSPropertyMaxBlockSize: {163 const CSSPropertyID properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight };164 return resolveToPhysicalProperty(writingMode, LogicalHeight, properties);165 }166 case CSSPropertyBorderStartStartRadius:167 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxCorner::StartStart, borderRadiusShorthand());168 case CSSPropertyBorderStartEndRadius:169 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxCorner::StartEnd, borderRadiusShorthand());170 case CSSPropertyBorderEndStartRadius:171 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxCorner::EndStart, borderRadiusShorthand());172 case CSSPropertyBorderEndEndRadius:173 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxCorner::EndEnd, borderRadiusShorthand());174 case CSSPropertyScrollMarginInlineStart:175 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Start, scrollMarginShorthand());176 case CSSPropertyScrollMarginInlineEnd:177 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::End, scrollMarginShorthand());178 case CSSPropertyScrollMarginBlockStart:179 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Before, scrollMarginShorthand());180 case CSSPropertyScrollMarginBlockEnd:181 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::After, scrollMarginShorthand());182 case CSSPropertyScrollPaddingInlineStart:183 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Start, scrollPaddingShorthand());184 case CSSPropertyScrollPaddingInlineEnd:185 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::End, scrollPaddingShorthand());186 case CSSPropertyScrollPaddingBlockStart:187 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::Before, scrollPaddingShorthand());188 case CSSPropertyScrollPaddingBlockEnd:189 return resolveToPhysicalProperty(direction, writingMode, LogicalBoxSide::After, scrollPaddingShorthand());190 default:191 return propertyID;192 }193 }194 195 54 } // namespace WebCore
Note:
See TracChangeset
for help on using the changeset viewer.