Changeset 112418 in webkit


Ignore:
Timestamp:
Mar 28, 2012 11:29:54 AM (12 years ago)
Author:
alexis.menard@openbossa.org
Message:

Increase code sharing between CSSProperty and CSSPropertyLonghand.
https://bugs.webkit.org/show_bug.cgi?id=82479

Reviewed by Antti Koivisto.

Use longhands declarations from CSSPropertyLonghand in CSSProperty to avoid
code duplication.

No new tests : refactoring only, we shouldn't have any behavior difference.

  • css/CSSProperty.cpp:

(WebCore::resolveToPhysicalProperty):
(WebCore::borderDirections):
(WebCore):
(WebCore::CSSProperty::resolveDirectionAwareProperty):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r112416 r112418  
     12012-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
    1192012-03-28  Vsevolod Vlasov  <vsevik@chromium.org>
    220
  • trunk/Source/WebCore/css/CSSProperty.cpp

    r111342 r112418  
    2222#include "CSSProperty.h"
    2323
     24#include "CSSPropertyLonghand.h"
    2425#include "CSSPropertyNames.h"
    2526#include "PlatformString.h"
     
    3637enum PhysicalBoxSide { TopSide, RightSide, BottomSide, LeftSide };
    3738
    38 static int resolveToPhysicalProperty(TextDirection direction, WritingMode writingMode, LogicalBoxSide logicalSide, const int* properties)
     39static int resolveToPhysicalProperty(TextDirection direction, WritingMode writingMode, LogicalBoxSide logicalSide, const CSSPropertyLonghand& longhand)
    3940{
    4041    if (direction == LTR) {
     
    4243            // The common case. The logical and physical box sides match.
    4344            // Left = Start, Right = End, Before = Top, After = Bottom
    44             return properties[logicalSide];
     45            return longhand.properties()[logicalSide];
    4546        }
    4647
     
    4950            switch (logicalSide) {
    5051            case StartSide:
    51                 return properties[LeftSide];
     52                return longhand.properties()[LeftSide];
    5253            case EndSide:
    53                 return properties[RightSide];
     54                return longhand.properties()[RightSide];
    5455            case BeforeSide:
    55                 return properties[BottomSide];
     56                return longhand.properties()[BottomSide];
    5657            default:
    57                 return properties[TopSide];
     58                return longhand.properties()[TopSide];
    5859            }
    5960        }
     
    6364            switch (logicalSide) {
    6465            case StartSide:
    65                 return properties[TopSide];
     66                return longhand.properties()[TopSide];
    6667            case EndSide:
    67                 return properties[BottomSide];
     68                return longhand.properties()[BottomSide];
    6869            case BeforeSide:
    69                 return properties[LeftSide];
     70                return longhand.properties()[LeftSide];
    7071            default:
    71                 return properties[RightSide];
     72                return longhand.properties()[RightSide];
    7273            }
    7374        }
     
    7677        switch (logicalSide) {
    7778        case StartSide:
    78             return properties[TopSide];
     79            return longhand.properties()[TopSide];
    7980        case EndSide:
    80             return properties[BottomSide];
     81            return longhand.properties()[BottomSide];
    8182        case BeforeSide:
    82             return properties[RightSide];
     83            return longhand.properties()[RightSide];
    8384        default:
    84             return properties[LeftSide];
     85            return longhand.properties()[LeftSide];
    8586        }
    8687    }
     
    9091        switch (logicalSide) {
    9192        case StartSide:
    92             return properties[RightSide];
     93            return longhand.properties()[RightSide];
    9394        case EndSide:
    94             return properties[LeftSide];
     95            return longhand.properties()[LeftSide];
    9596        case BeforeSide:
    96             return properties[TopSide];
     97            return longhand.properties()[TopSide];
    9798        default:
    98             return properties[BottomSide];
     99            return longhand.properties()[BottomSide];
    99100        }
    100101    }
     
    104105        switch (logicalSide) {
    105106        case StartSide:
    106             return properties[RightSide];
     107            return longhand.properties()[RightSide];
    107108        case EndSide:
    108             return properties[LeftSide];
     109            return longhand.properties()[LeftSide];
    109110        case BeforeSide:
    110             return properties[BottomSide];
     111            return longhand.properties()[BottomSide];
    111112        default:
    112             return properties[TopSide];
     113            return longhand.properties()[TopSide];
    113114        }
    114115    }
     
    118119        switch (logicalSide) {
    119120        case StartSide:
    120             return properties[BottomSide];
     121            return longhand.properties()[BottomSide];
    121122        case EndSide:
    122             return properties[TopSide];
     123            return longhand.properties()[TopSide];
    123124        case BeforeSide:
    124             return properties[LeftSide];
     125            return longhand.properties()[LeftSide];
    125126        default:
    126             return properties[RightSide];
     127            return longhand.properties()[RightSide];
    127128        }
    128129    }
     
    131132    switch (logicalSide) {
    132133    case StartSide:
    133         return properties[BottomSide];
     134        return longhand.properties()[BottomSide];
    134135    case EndSide:
    135         return properties[TopSide];
     136        return longhand.properties()[TopSide];
    136137    case BeforeSide:
    137         return properties[RightSide];
     138        return longhand.properties()[RightSide];
    138139    default:
    139         return properties[LeftSide];
     140        return longhand.properties()[LeftSide];
    140141    }
    141142}
     
    150151}
    151152
     153static 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
    152160int CSSProperty::resolveDirectionAwareProperty(int propertyID, TextDirection direction, WritingMode writingMode)
    153161{
    154162    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());
    251211    case CSSPropertyWebkitLogicalWidth: {
    252212        const int properties[2] = { CSSPropertyWidth, CSSPropertyHeight };
Note: See TracChangeset for help on using the changeset viewer.