CSSPropertyID CSSProperty::resolveDirectionAwareProperty(CSSPropertyID propertyID, TextDirection direction, WritingMode writingMode) { switch (propertyID) { case CSSPropertyWebkitMarginEnd: return resolveToPhysicalProperty(direction, writingMode, EndSide, marginShorthand()); case CSSPropertyWebkitMarginStart: return resolveToPhysicalProperty(direction, writingMode, StartSide, marginShorthand()); case CSSPropertyWebkitMarginBefore: return resolveToPhysicalProperty(direction, writingMode, BeforeSide, marginShorthand()); case CSSPropertyWebkitMarginAfter: return resolveToPhysicalProperty(direction, writingMode, AfterSide, marginShorthand()); case CSSPropertyWebkitPaddingEnd: return resolveToPhysicalProperty(direction, writingMode, EndSide, paddingShorthand()); case CSSPropertyWebkitPaddingStart: return resolveToPhysicalProperty(direction, writingMode, StartSide, paddingShorthand()); case CSSPropertyWebkitPaddingBefore: return resolveToPhysicalProperty(direction, writingMode, BeforeSide, paddingShorthand()); case CSSPropertyWebkitPaddingAfter: return resolveToPhysicalProperty(direction, writingMode, AfterSide, paddingShorthand()); case CSSPropertyWebkitBorderEnd: return resolveToPhysicalProperty(direction, writingMode, EndSide, borderDirections()); case CSSPropertyWebkitBorderStart: return resolveToPhysicalProperty(direction, writingMode, StartSide, borderDirections()); case CSSPropertyWebkitBorderBefore: return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderDirections()); case CSSPropertyWebkitBorderAfter: return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderDirections()); case CSSPropertyWebkitBorderEndColor: return resolveToPhysicalProperty(direction, writingMode, EndSide, borderColorShorthand()); case CSSPropertyWebkitBorderStartColor: return resolveToPhysicalProperty(direction, writingMode, StartSide, borderColorShorthand()); case CSSPropertyWebkitBorderBeforeColor: return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderColorShorthand()); case CSSPropertyWebkitBorderAfterColor: return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderColorShorthand()); case CSSPropertyWebkitBorderEndStyle: return resolveToPhysicalProperty(direction, writingMode, EndSide, borderStyleShorthand()); case CSSPropertyWebkitBorderStartStyle: return resolveToPhysicalProperty(direction, writingMode, StartSide, borderStyleShorthand()); case CSSPropertyWebkitBorderBeforeStyle: return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderStyleShorthand()); case CSSPropertyWebkitBorderAfterStyle: return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderStyleShorthand()); case CSSPropertyWebkitBorderEndWidth: return resolveToPhysicalProperty(direction, writingMode, EndSide, borderWidthShorthand()); case CSSPropertyWebkitBorderStartWidth: return resolveToPhysicalProperty(direction, writingMode, StartSide, borderWidthShorthand()); case CSSPropertyWebkitBorderBeforeWidth: return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderWidthShorthand()); case CSSPropertyWebkitBorderAfterWidth: return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderWidthShorthand()); case CSSPropertyWebkitLogicalWidth: { const CSSPropertyID properties[2] = { CSSPropertyWidth, CSSPropertyHeight }; return resolveToPhysicalProperty(writingMode, LogicalWidth, properties); } case CSSPropertyWebkitLogicalHeight: { const CSSPropertyID properties[2] = { CSSPropertyWidth, CSSPropertyHeight }; return resolveToPhysicalProperty(writingMode, LogicalHeight, properties); } case CSSPropertyWebkitMinLogicalWidth: { const CSSPropertyID properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight }; return resolveToPhysicalProperty(writingMode, LogicalWidth, properties); } case CSSPropertyWebkitMinLogicalHeight: { const CSSPropertyID properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight }; return resolveToPhysicalProperty(writingMode, LogicalHeight, properties); } case CSSPropertyWebkitMaxLogicalWidth: { const CSSPropertyID properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight }; return resolveToPhysicalProperty(writingMode, LogicalWidth, properties); } case CSSPropertyWebkitMaxLogicalHeight: { const CSSPropertyID properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight }; return resolveToPhysicalProperty(writingMode, LogicalHeight, properties); } default: return propertyID; } }
int CSSProperty::resolveDirectionAwareProperty(int propertyID, TextDirection direction, WritingMode writingMode) { switch (static_cast<CSSPropertyID>(propertyID)) { case CSSPropertyWebkitMarginEnd: { const int properties[4] = { CSSPropertyMarginTop, CSSPropertyMarginRight, CSSPropertyMarginBottom, CSSPropertyMarginLeft }; return resolveToPhysicalProperty(direction, writingMode, EndSide, properties); } case CSSPropertyWebkitMarginStart: { const int properties[4] = { CSSPropertyMarginTop, CSSPropertyMarginRight, CSSPropertyMarginBottom, CSSPropertyMarginLeft }; return resolveToPhysicalProperty(direction, writingMode, StartSide, properties); } case CSSPropertyWebkitMarginBefore: { const int properties[4] = { CSSPropertyMarginTop, CSSPropertyMarginRight, CSSPropertyMarginBottom, CSSPropertyMarginLeft }; return resolveToPhysicalProperty(direction, writingMode, BeforeSide, properties); } case CSSPropertyWebkitMarginAfter: { const int properties[4] = { CSSPropertyMarginTop, CSSPropertyMarginRight, CSSPropertyMarginBottom, CSSPropertyMarginLeft }; return resolveToPhysicalProperty(direction, writingMode, AfterSide, properties); } case CSSPropertyWebkitPaddingEnd: { const int properties[4] = { CSSPropertyPaddingTop, CSSPropertyPaddingRight, CSSPropertyPaddingBottom, CSSPropertyPaddingLeft }; return resolveToPhysicalProperty(direction, writingMode, EndSide, properties); } case CSSPropertyWebkitPaddingStart: { const int properties[4] = { CSSPropertyPaddingTop, CSSPropertyPaddingRight, CSSPropertyPaddingBottom, CSSPropertyPaddingLeft }; return resolveToPhysicalProperty(direction, writingMode, StartSide, properties); } case CSSPropertyWebkitPaddingBefore: { const int properties[4] = { CSSPropertyPaddingTop, CSSPropertyPaddingRight, CSSPropertyPaddingBottom, CSSPropertyPaddingLeft }; return resolveToPhysicalProperty(direction, writingMode, BeforeSide, properties); } case CSSPropertyWebkitPaddingAfter: { const int properties[4] = { CSSPropertyPaddingTop, CSSPropertyPaddingRight, CSSPropertyPaddingBottom, CSSPropertyPaddingLeft }; return resolveToPhysicalProperty(direction, writingMode, AfterSide, properties); } case CSSPropertyWebkitBorderEnd: { const int properties[4] = { CSSPropertyBorderTop, CSSPropertyBorderRight, CSSPropertyBorderBottom, CSSPropertyBorderLeft }; return resolveToPhysicalProperty(direction, writingMode, EndSide, properties); } case CSSPropertyWebkitBorderStart: { const int properties[4] = { CSSPropertyBorderTop, CSSPropertyBorderRight, CSSPropertyBorderBottom, CSSPropertyBorderLeft }; return resolveToPhysicalProperty(direction, writingMode, StartSide, properties); } case CSSPropertyWebkitBorderBefore: { const int properties[4] = { CSSPropertyBorderTop, CSSPropertyBorderRight, CSSPropertyBorderBottom, CSSPropertyBorderLeft }; return resolveToPhysicalProperty(direction, writingMode, BeforeSide, properties); } case CSSPropertyWebkitBorderAfter: { const int properties[4] = { CSSPropertyBorderTop, CSSPropertyBorderRight, CSSPropertyBorderBottom, CSSPropertyBorderLeft }; return resolveToPhysicalProperty(direction, writingMode, AfterSide, properties); } case CSSPropertyWebkitBorderEndColor: { const int properties[4] = { CSSPropertyBorderTopColor, CSSPropertyBorderRightColor, CSSPropertyBorderBottomColor, CSSPropertyBorderLeftColor }; return resolveToPhysicalProperty(direction, writingMode, EndSide, properties); } case CSSPropertyWebkitBorderStartColor: { const int properties[4] = { CSSPropertyBorderTopColor, CSSPropertyBorderRightColor, CSSPropertyBorderBottomColor, CSSPropertyBorderLeftColor }; return resolveToPhysicalProperty(direction, writingMode, StartSide, properties); } case CSSPropertyWebkitBorderBeforeColor: { const int properties[4] = { CSSPropertyBorderTopColor, CSSPropertyBorderRightColor, CSSPropertyBorderBottomColor, CSSPropertyBorderLeftColor }; return resolveToPhysicalProperty(direction, writingMode, BeforeSide, properties); } case CSSPropertyWebkitBorderAfterColor: { const int properties[4] = { CSSPropertyBorderTopColor, CSSPropertyBorderRightColor, CSSPropertyBorderBottomColor, CSSPropertyBorderLeftColor }; return resolveToPhysicalProperty(direction, writingMode, AfterSide, properties); } case CSSPropertyWebkitBorderEndStyle: { const int properties[4] = { CSSPropertyBorderTopStyle, CSSPropertyBorderRightStyle, CSSPropertyBorderBottomStyle, CSSPropertyBorderLeftStyle }; return resolveToPhysicalProperty(direction, writingMode, EndSide, properties); } case CSSPropertyWebkitBorderStartStyle: { const int properties[4] = { CSSPropertyBorderTopStyle, CSSPropertyBorderRightStyle, CSSPropertyBorderBottomStyle, CSSPropertyBorderLeftStyle }; return resolveToPhysicalProperty(direction, writingMode, StartSide, properties); } case CSSPropertyWebkitBorderBeforeStyle: { const int properties[4] = { CSSPropertyBorderTopStyle, CSSPropertyBorderRightStyle, CSSPropertyBorderBottomStyle, CSSPropertyBorderLeftStyle }; return resolveToPhysicalProperty(direction, writingMode, BeforeSide, properties); } case CSSPropertyWebkitBorderAfterStyle: { const int properties[4] = { CSSPropertyBorderTopStyle, CSSPropertyBorderRightStyle, CSSPropertyBorderBottomStyle, CSSPropertyBorderLeftStyle }; return resolveToPhysicalProperty(direction, writingMode, AfterSide, properties); } case CSSPropertyWebkitBorderEndWidth: { const int properties[4] = { CSSPropertyBorderTopWidth, CSSPropertyBorderRightWidth, CSSPropertyBorderBottomWidth, CSSPropertyBorderLeftWidth }; return resolveToPhysicalProperty(direction, writingMode, EndSide, properties); } case CSSPropertyWebkitBorderStartWidth: { const int properties[4] = { CSSPropertyBorderTopWidth, CSSPropertyBorderRightWidth, CSSPropertyBorderBottomWidth, CSSPropertyBorderLeftWidth }; return resolveToPhysicalProperty(direction, writingMode, StartSide, properties); } case CSSPropertyWebkitBorderBeforeWidth: { const int properties[4] = { CSSPropertyBorderTopWidth, CSSPropertyBorderRightWidth, CSSPropertyBorderBottomWidth, CSSPropertyBorderLeftWidth }; return resolveToPhysicalProperty(direction, writingMode, BeforeSide, properties); } case CSSPropertyWebkitBorderAfterWidth: { const int properties[4] = { CSSPropertyBorderTopWidth, CSSPropertyBorderRightWidth, CSSPropertyBorderBottomWidth, CSSPropertyBorderLeftWidth }; return resolveToPhysicalProperty(direction, writingMode, AfterSide, properties); } case CSSPropertyWebkitLogicalWidth: { const int properties[2] = { CSSPropertyWidth, CSSPropertyHeight }; return resolveToPhysicalProperty(writingMode, LogicalWidth, properties); } case CSSPropertyWebkitLogicalHeight: { const int properties[2] = { CSSPropertyWidth, CSSPropertyHeight }; return resolveToPhysicalProperty(writingMode, LogicalHeight, properties); } case CSSPropertyWebkitMinLogicalWidth: { const int properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight }; return resolveToPhysicalProperty(writingMode, LogicalWidth, properties); } case CSSPropertyWebkitMinLogicalHeight: { const int properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight }; return resolveToPhysicalProperty(writingMode, LogicalHeight, properties); } case CSSPropertyWebkitMaxLogicalWidth: { const int properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight }; return resolveToPhysicalProperty(writingMode, LogicalWidth, properties); } case CSSPropertyWebkitMaxLogicalHeight: { const int properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight }; return resolveToPhysicalProperty(writingMode, LogicalHeight, properties); } default: return propertyID; } }