Changeset 112418 in webkit
- Timestamp:
- Mar 28, 2012 11:29:54 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r112416 r112418 1 2012-03-28 Alexis Menard <alexis.menard@openbossa.org> 2 3 Increase code sharing between CSSProperty and CSSPropertyLonghand. 4 https://bugs.webkit.org/show_bug.cgi?id=82479 5 6 Reviewed by Antti Koivisto. 7 8 Use longhands declarations from CSSPropertyLonghand in CSSProperty to avoid 9 code duplication. 10 11 No new tests : refactoring only, we shouldn't have any behavior difference. 12 13 * css/CSSProperty.cpp: 14 (WebCore::resolveToPhysicalProperty): 15 (WebCore::borderDirections): 16 (WebCore): 17 (WebCore::CSSProperty::resolveDirectionAwareProperty): 18 1 19 2012-03-28 Vsevolod Vlasov <vsevik@chromium.org> 2 20 -
trunk/Source/WebCore/css/CSSProperty.cpp
r111342 r112418 22 22 #include "CSSProperty.h" 23 23 24 #include "CSSPropertyLonghand.h" 24 25 #include "CSSPropertyNames.h" 25 26 #include "PlatformString.h" … … 36 37 enum PhysicalBoxSide { TopSide, RightSide, BottomSide, LeftSide }; 37 38 38 static int resolveToPhysicalProperty(TextDirection direction, WritingMode writingMode, LogicalBoxSide logicalSide, const int* properties)39 static int resolveToPhysicalProperty(TextDirection direction, WritingMode writingMode, LogicalBoxSide logicalSide, const CSSPropertyLonghand& longhand) 39 40 { 40 41 if (direction == LTR) { … … 42 43 // The common case. The logical and physical box sides match. 43 44 // Left = Start, Right = End, Before = Top, After = Bottom 44 return properties[logicalSide];45 return longhand.properties()[logicalSide]; 45 46 } 46 47 … … 49 50 switch (logicalSide) { 50 51 case StartSide: 51 return properties[LeftSide];52 return longhand.properties()[LeftSide]; 52 53 case EndSide: 53 return properties[RightSide];54 return longhand.properties()[RightSide]; 54 55 case BeforeSide: 55 return properties[BottomSide];56 return longhand.properties()[BottomSide]; 56 57 default: 57 return properties[TopSide];58 return longhand.properties()[TopSide]; 58 59 } 59 60 } … … 63 64 switch (logicalSide) { 64 65 case StartSide: 65 return properties[TopSide];66 return longhand.properties()[TopSide]; 66 67 case EndSide: 67 return properties[BottomSide];68 return longhand.properties()[BottomSide]; 68 69 case BeforeSide: 69 return properties[LeftSide];70 return longhand.properties()[LeftSide]; 70 71 default: 71 return properties[RightSide];72 return longhand.properties()[RightSide]; 72 73 } 73 74 } … … 76 77 switch (logicalSide) { 77 78 case StartSide: 78 return properties[TopSide];79 return longhand.properties()[TopSide]; 79 80 case EndSide: 80 return properties[BottomSide];81 return longhand.properties()[BottomSide]; 81 82 case BeforeSide: 82 return properties[RightSide];83 return longhand.properties()[RightSide]; 83 84 default: 84 return properties[LeftSide];85 return longhand.properties()[LeftSide]; 85 86 } 86 87 } … … 90 91 switch (logicalSide) { 91 92 case StartSide: 92 return properties[RightSide];93 return longhand.properties()[RightSide]; 93 94 case EndSide: 94 return properties[LeftSide];95 return longhand.properties()[LeftSide]; 95 96 case BeforeSide: 96 return properties[TopSide];97 return longhand.properties()[TopSide]; 97 98 default: 98 return properties[BottomSide];99 return longhand.properties()[BottomSide]; 99 100 } 100 101 } … … 104 105 switch (logicalSide) { 105 106 case StartSide: 106 return properties[RightSide];107 return longhand.properties()[RightSide]; 107 108 case EndSide: 108 return properties[LeftSide];109 return longhand.properties()[LeftSide]; 109 110 case BeforeSide: 110 return properties[BottomSide];111 return longhand.properties()[BottomSide]; 111 112 default: 112 return properties[TopSide];113 return longhand.properties()[TopSide]; 113 114 } 114 115 } … … 118 119 switch (logicalSide) { 119 120 case StartSide: 120 return properties[BottomSide];121 return longhand.properties()[BottomSide]; 121 122 case EndSide: 122 return properties[TopSide];123 return longhand.properties()[TopSide]; 123 124 case BeforeSide: 124 return properties[LeftSide];125 return longhand.properties()[LeftSide]; 125 126 default: 126 return properties[RightSide];127 return longhand.properties()[RightSide]; 127 128 } 128 129 } … … 131 132 switch (logicalSide) { 132 133 case StartSide: 133 return properties[BottomSide];134 return longhand.properties()[BottomSide]; 134 135 case EndSide: 135 return properties[TopSide];136 return longhand.properties()[TopSide]; 136 137 case BeforeSide: 137 return properties[RightSide];138 return longhand.properties()[RightSide]; 138 139 default: 139 return properties[LeftSide];140 return longhand.properties()[LeftSide]; 140 141 } 141 142 } … … 150 151 } 151 152 153 static const CSSPropertyLonghand& borderDirections() 154 { 155 static const int properties[4] = { CSSPropertyBorderTop, CSSPropertyBorderRight, CSSPropertyBorderBottom, CSSPropertyBorderLeft }; 156 DEFINE_STATIC_LOCAL(CSSPropertyLonghand, borderDirections, (properties, WTF_ARRAY_LENGTH(properties))); 157 return borderDirections; 158 } 159 152 160 int CSSProperty::resolveDirectionAwareProperty(int propertyID, TextDirection direction, WritingMode writingMode) 153 161 { 154 162 switch (static_cast<CSSPropertyID>(propertyID)) { 155 case CSSPropertyWebkitMarginEnd: { 156 const int properties[4] = { CSSPropertyMarginTop, CSSPropertyMarginRight, CSSPropertyMarginBottom, CSSPropertyMarginLeft }; 157 return resolveToPhysicalProperty(direction, writingMode, EndSide, properties); 158 } 159 case CSSPropertyWebkitMarginStart: { 160 const int properties[4] = { CSSPropertyMarginTop, CSSPropertyMarginRight, CSSPropertyMarginBottom, CSSPropertyMarginLeft }; 161 return resolveToPhysicalProperty(direction, writingMode, StartSide, properties); 162 } 163 case CSSPropertyWebkitMarginBefore: { 164 const int properties[4] = { CSSPropertyMarginTop, CSSPropertyMarginRight, CSSPropertyMarginBottom, CSSPropertyMarginLeft }; 165 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, properties); 166 } 167 case CSSPropertyWebkitMarginAfter: { 168 const int properties[4] = { CSSPropertyMarginTop, CSSPropertyMarginRight, CSSPropertyMarginBottom, CSSPropertyMarginLeft }; 169 return resolveToPhysicalProperty(direction, writingMode, AfterSide, properties); 170 } 171 case CSSPropertyWebkitPaddingEnd: { 172 const int properties[4] = { CSSPropertyPaddingTop, CSSPropertyPaddingRight, CSSPropertyPaddingBottom, CSSPropertyPaddingLeft }; 173 return resolveToPhysicalProperty(direction, writingMode, EndSide, properties); 174 } 175 case CSSPropertyWebkitPaddingStart: { 176 const int properties[4] = { CSSPropertyPaddingTop, CSSPropertyPaddingRight, CSSPropertyPaddingBottom, CSSPropertyPaddingLeft }; 177 return resolveToPhysicalProperty(direction, writingMode, StartSide, properties); 178 } 179 case CSSPropertyWebkitPaddingBefore: { 180 const int properties[4] = { CSSPropertyPaddingTop, CSSPropertyPaddingRight, CSSPropertyPaddingBottom, CSSPropertyPaddingLeft }; 181 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, properties); 182 } 183 case CSSPropertyWebkitPaddingAfter: { 184 const int properties[4] = { CSSPropertyPaddingTop, CSSPropertyPaddingRight, CSSPropertyPaddingBottom, CSSPropertyPaddingLeft }; 185 return resolveToPhysicalProperty(direction, writingMode, AfterSide, properties); 186 } 187 case CSSPropertyWebkitBorderEnd: { 188 const int properties[4] = { CSSPropertyBorderTop, CSSPropertyBorderRight, CSSPropertyBorderBottom, CSSPropertyBorderLeft }; 189 return resolveToPhysicalProperty(direction, writingMode, EndSide, properties); 190 } 191 case CSSPropertyWebkitBorderStart: { 192 const int properties[4] = { CSSPropertyBorderTop, CSSPropertyBorderRight, CSSPropertyBorderBottom, CSSPropertyBorderLeft }; 193 return resolveToPhysicalProperty(direction, writingMode, StartSide, properties); 194 } 195 case CSSPropertyWebkitBorderBefore: { 196 const int properties[4] = { CSSPropertyBorderTop, CSSPropertyBorderRight, CSSPropertyBorderBottom, CSSPropertyBorderLeft }; 197 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, properties); 198 } 199 case CSSPropertyWebkitBorderAfter: { 200 const int properties[4] = { CSSPropertyBorderTop, CSSPropertyBorderRight, CSSPropertyBorderBottom, CSSPropertyBorderLeft }; 201 return resolveToPhysicalProperty(direction, writingMode, AfterSide, properties); 202 } 203 case CSSPropertyWebkitBorderEndColor: { 204 const int properties[4] = { CSSPropertyBorderTopColor, CSSPropertyBorderRightColor, CSSPropertyBorderBottomColor, CSSPropertyBorderLeftColor }; 205 return resolveToPhysicalProperty(direction, writingMode, EndSide, properties); 206 } 207 case CSSPropertyWebkitBorderStartColor: { 208 const int properties[4] = { CSSPropertyBorderTopColor, CSSPropertyBorderRightColor, CSSPropertyBorderBottomColor, CSSPropertyBorderLeftColor }; 209 return resolveToPhysicalProperty(direction, writingMode, StartSide, properties); 210 } 211 case CSSPropertyWebkitBorderBeforeColor: { 212 const int properties[4] = { CSSPropertyBorderTopColor, CSSPropertyBorderRightColor, CSSPropertyBorderBottomColor, CSSPropertyBorderLeftColor }; 213 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, properties); 214 } 215 case CSSPropertyWebkitBorderAfterColor: { 216 const int properties[4] = { CSSPropertyBorderTopColor, CSSPropertyBorderRightColor, CSSPropertyBorderBottomColor, CSSPropertyBorderLeftColor }; 217 return resolveToPhysicalProperty(direction, writingMode, AfterSide, properties); 218 } 219 case CSSPropertyWebkitBorderEndStyle: { 220 const int properties[4] = { CSSPropertyBorderTopStyle, CSSPropertyBorderRightStyle, CSSPropertyBorderBottomStyle, CSSPropertyBorderLeftStyle }; 221 return resolveToPhysicalProperty(direction, writingMode, EndSide, properties); 222 } 223 case CSSPropertyWebkitBorderStartStyle: { 224 const int properties[4] = { CSSPropertyBorderTopStyle, CSSPropertyBorderRightStyle, CSSPropertyBorderBottomStyle, CSSPropertyBorderLeftStyle }; 225 return resolveToPhysicalProperty(direction, writingMode, StartSide, properties); 226 } 227 case CSSPropertyWebkitBorderBeforeStyle: { 228 const int properties[4] = { CSSPropertyBorderTopStyle, CSSPropertyBorderRightStyle, CSSPropertyBorderBottomStyle, CSSPropertyBorderLeftStyle }; 229 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, properties); 230 } 231 case CSSPropertyWebkitBorderAfterStyle: { 232 const int properties[4] = { CSSPropertyBorderTopStyle, CSSPropertyBorderRightStyle, CSSPropertyBorderBottomStyle, CSSPropertyBorderLeftStyle }; 233 return resolveToPhysicalProperty(direction, writingMode, AfterSide, properties); 234 } 235 case CSSPropertyWebkitBorderEndWidth: { 236 const int properties[4] = { CSSPropertyBorderTopWidth, CSSPropertyBorderRightWidth, CSSPropertyBorderBottomWidth, CSSPropertyBorderLeftWidth }; 237 return resolveToPhysicalProperty(direction, writingMode, EndSide, properties); 238 } 239 case CSSPropertyWebkitBorderStartWidth: { 240 const int properties[4] = { CSSPropertyBorderTopWidth, CSSPropertyBorderRightWidth, CSSPropertyBorderBottomWidth, CSSPropertyBorderLeftWidth }; 241 return resolveToPhysicalProperty(direction, writingMode, StartSide, properties); 242 } 243 case CSSPropertyWebkitBorderBeforeWidth: { 244 const int properties[4] = { CSSPropertyBorderTopWidth, CSSPropertyBorderRightWidth, CSSPropertyBorderBottomWidth, CSSPropertyBorderLeftWidth }; 245 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, properties); 246 } 247 case CSSPropertyWebkitBorderAfterWidth: { 248 const int properties[4] = { CSSPropertyBorderTopWidth, CSSPropertyBorderRightWidth, CSSPropertyBorderBottomWidth, CSSPropertyBorderLeftWidth }; 249 return resolveToPhysicalProperty(direction, writingMode, AfterSide, properties); 250 } 163 case CSSPropertyWebkitMarginEnd: 164 return resolveToPhysicalProperty(direction, writingMode, EndSide, marginLonghand()); 165 case CSSPropertyWebkitMarginStart: 166 return resolveToPhysicalProperty(direction, writingMode, StartSide, marginLonghand()); 167 case CSSPropertyWebkitMarginBefore: 168 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, marginLonghand()); 169 case CSSPropertyWebkitMarginAfter: 170 return resolveToPhysicalProperty(direction, writingMode, AfterSide, marginLonghand()); 171 case CSSPropertyWebkitPaddingEnd: 172 return resolveToPhysicalProperty(direction, writingMode, EndSide, paddingLonghand()); 173 case CSSPropertyWebkitPaddingStart: 174 return resolveToPhysicalProperty(direction, writingMode, StartSide, paddingLonghand()); 175 case CSSPropertyWebkitPaddingBefore: 176 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, paddingLonghand()); 177 case CSSPropertyWebkitPaddingAfter: 178 return resolveToPhysicalProperty(direction, writingMode, AfterSide, paddingLonghand()); 179 case CSSPropertyWebkitBorderEnd: 180 return resolveToPhysicalProperty(direction, writingMode, EndSide, borderDirections()); 181 case CSSPropertyWebkitBorderStart: 182 return resolveToPhysicalProperty(direction, writingMode, StartSide, borderDirections()); 183 case CSSPropertyWebkitBorderBefore: 184 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderDirections()); 185 case CSSPropertyWebkitBorderAfter: 186 return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderDirections()); 187 case CSSPropertyWebkitBorderEndColor: 188 return resolveToPhysicalProperty(direction, writingMode, EndSide, borderColorLonghand()); 189 case CSSPropertyWebkitBorderStartColor: 190 return resolveToPhysicalProperty(direction, writingMode, StartSide, borderColorLonghand()); 191 case CSSPropertyWebkitBorderBeforeColor: 192 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderColorLonghand()); 193 case CSSPropertyWebkitBorderAfterColor: 194 return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderColorLonghand()); 195 case CSSPropertyWebkitBorderEndStyle: 196 return resolveToPhysicalProperty(direction, writingMode, EndSide, borderStyleLonghand()); 197 case CSSPropertyWebkitBorderStartStyle: 198 return resolveToPhysicalProperty(direction, writingMode, StartSide, borderStyleLonghand()); 199 case CSSPropertyWebkitBorderBeforeStyle: 200 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderStyleLonghand()); 201 case CSSPropertyWebkitBorderAfterStyle: 202 return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderStyleLonghand()); 203 case CSSPropertyWebkitBorderEndWidth: 204 return resolveToPhysicalProperty(direction, writingMode, EndSide, borderWidthLonghand()); 205 case CSSPropertyWebkitBorderStartWidth: 206 return resolveToPhysicalProperty(direction, writingMode, StartSide, borderWidthLonghand()); 207 case CSSPropertyWebkitBorderBeforeWidth: 208 return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderWidthLonghand()); 209 case CSSPropertyWebkitBorderAfterWidth: 210 return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderWidthLonghand()); 251 211 case CSSPropertyWebkitLogicalWidth: { 252 212 const int properties[2] = { CSSPropertyWidth, CSSPropertyHeight };
Note: See TracChangeset
for help on using the changeset viewer.