Changeset 195892 in webkit


Ignore:
Timestamp:
Jan 30, 2016 7:28:48 AM (8 years ago)
Author:
hyatt@apple.com
Message:

Support break-after, break-before and break-inside.
https://bugs.webkit.org/show_bug.cgi?id=148814

Reviewed by Dean Jackson.

Source/WebCore:

New tests added in printing/, fast/multicol/, and fast/regions.

  • css/CSSComputedStyleDeclaration.cpp:

(WebCore::convertToPageBreak):
(WebCore::convertToColumnBreak):
(WebCore::convertToRegionBreak):
For backwards compatibility, keep support for all the old properties in
computed style. This means we have to convert the break-* property values
into keywords that make sense for the legacy properties. This mainly
involves mapping "page", "column", "region" to "always" (similar rule for
the avoid-* versions as well).

(WebCore::ComputedStyleExtractor::propertyValue):
Add support for the three new break-* properties.

  • css/CSSParser.cpp:

(WebCore::isValidKeywordPropertyAndValue):
(WebCore::isKeywordPropertyID):
(WebCore::CSSParser::parseValue):
Add support for the new break properties.

  • css/CSSPrimitiveValueMappings.h:

(WebCore::CSSPrimitiveValue::operator BreakBetween):
(WebCore::CSSPrimitiveValue::operator BreakInside):
Add converters for the new BreakBetween and BreakInside enums. Remove
the EPageBreak enum, since it is no longer used.

  • css/CSSPropertyNames.in:
  • css/CSSValueKeywords.in:

Add the new properties and the new values supported by the properties
to the keywords lists.

  • css/StyleBuilderConverter.h:

(WebCore::StyleBuilderConverter::convertFontSynthesis):
(WebCore::StyleBuilderConverter::convertPageBreakBetween):
(WebCore::StyleBuilderConverter::convertPageBreakInside):
(WebCore::StyleBuilderConverter::convertColumnBreakBetween):
(WebCore::StyleBuilderConverter::convertColumnBreakInside):
(WebCore::StyleBuilderConverter::convertRegionBreakBetween):
(WebCore::StyleBuilderConverter::convertRegionBreakInside):
In order to map the legacy properties into the new break-* values
we have custom converter functions.

  • rendering/RenderBlock.cpp:

(WebCore::RenderBlock::paintChild):
(WebCore::RenderBlock::childBoxIsUnsplittableForFragmentation):
(WebCore::RenderBlock::computeRegionRangeForBoxChild):

  • rendering/RenderBlockFlow.cpp:

(WebCore::RenderBlockFlow::applyBeforeBreak):
(WebCore::RenderBlockFlow::applyAfterBreak):
Patch the block code to check the correct new break-* constants. For
avoidance, this means checking both the general avoid value and the
specific value (e.g., avoid-page). In place of "always", we check
the specific value (e.g., column) and then for page specifically, we
also treat "left", "right", "recto" and "verso" as "always break" for now.

  • rendering/style/RenderStyle.cpp:

(WebCore::RenderStyle::changeRequiresLayout):
Make sure changes to the break properties trigger relayout.

  • rendering/style/RenderStyle.h:

Add getters and setters for the break-* properties and remove all
occurrences of the legacy page, column and region values from the RenderStyle.

  • rendering/style/RenderStyleConstants.cpp:

(WebCore::alwaysPageBreak):
We have a helper function here for mapping several constant values to "page".

  • rendering/style/RenderStyleConstants.h:

Definitions of the new BreakBetween and BreakInside enums.

  • rendering/style/StyleMultiColData.cpp:

(WebCore::StyleMultiColData::StyleMultiColData):
(WebCore::StyleMultiColData::operator==):

  • rendering/style/StyleMultiColData.h:

Remove the column-specific break data.

  • rendering/style/StyleRareNonInheritedData.cpp:

(WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
(WebCore::StyleRareNonInheritedData::operator==):

  • rendering/style/StyleRareNonInheritedData.h:

Remove the region-specific break data and replace it with generic break
data that is now used by all three pagination models.

LayoutTests:

  • TestExpectations:
  • fast/multicol/standardized-break-properties-expected.txt: Added.
  • fast/multicol/standardized-break-properties.html: Added.
  • fast/multicol/vertical-lr/standardized-break-properties-expected.txt: Added.
  • fast/multicol/vertical-lr/standardized-break-properties.html: Added.
  • fast/multicol/vertical-rl/standardized-break-properties-expected.txt: Added.
  • fast/multicol/vertical-rl/standardized-break-properties.html: Added.
  • fast/regions/text-break-properties-expected.txt: Added.
  • fast/regions/text-break-properties.html: Added.
  • printing/allowed-breaks-expected.txt: Added.
  • printing/allowed-breaks.html: Added.
  • printing/break-after-avoid-expected.txt: Added.
  • printing/break-after-avoid-page-expected.txt: Added.
  • printing/break-after-avoid-page.html: Added.
  • printing/break-after-avoid.html: Added.
  • printing/break-always-expected.txt: Added.
  • printing/break-always.html: Added.
  • printing/break-avoid-expected.txt: Added.
  • printing/break-avoid-page-expected.txt: Added.
  • printing/break-avoid-page.html: Added.
  • printing/break-avoid.html: Added.
  • printing/break-display-none-expected.txt: Added.
  • printing/break-display-none.html: Added.
  • printing/break-inside-avoid-expected.txt: Added.
  • printing/break-inside-avoid-page-expected.txt: Added.
  • printing/break-inside-avoid-page.html: Added.
  • printing/break-inside-avoid.html: Added.
  • printing/script-tests/allowed-breaks.js: Added.

(test):

  • printing/script-tests/break-after-avoid-page.js: Added.

(test):

  • printing/script-tests/break-after-avoid.js: Added.

(test):

  • printing/script-tests/break-always.js: Added.

(test):

  • printing/script-tests/break-avoid-page.js: Added.

(test):

  • printing/script-tests/break-avoid.js: Added.

(test):

  • printing/script-tests/break-display-none.js: Added.

(test):

  • printing/script-tests/break-inside-avoid-page.js: Added.

(test):

  • printing/script-tests/break-inside-avoid.js: Added.

(test):

Location:
trunk
Files:
35 added
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r195890 r195892  
     12016-01-30  Dave Hyatt  <hyatt@apple.com>
     2
     3        Support break-after, break-before and break-inside.
     4        https://bugs.webkit.org/show_bug.cgi?id=148814
     5
     6        Reviewed by Dean Jackson.
     7
     8        * TestExpectations:
     9        * fast/multicol/standardized-break-properties-expected.txt: Added.
     10        * fast/multicol/standardized-break-properties.html: Added.
     11        * fast/multicol/vertical-lr/standardized-break-properties-expected.txt: Added.
     12        * fast/multicol/vertical-lr/standardized-break-properties.html: Added.
     13        * fast/multicol/vertical-rl/standardized-break-properties-expected.txt: Added.
     14        * fast/multicol/vertical-rl/standardized-break-properties.html: Added.
     15        * fast/regions/text-break-properties-expected.txt: Added.
     16        * fast/regions/text-break-properties.html: Added.
     17        * printing/allowed-breaks-expected.txt: Added.
     18        * printing/allowed-breaks.html: Added.
     19        * printing/break-after-avoid-expected.txt: Added.
     20        * printing/break-after-avoid-page-expected.txt: Added.
     21        * printing/break-after-avoid-page.html: Added.
     22        * printing/break-after-avoid.html: Added.
     23        * printing/break-always-expected.txt: Added.
     24        * printing/break-always.html: Added.
     25        * printing/break-avoid-expected.txt: Added.
     26        * printing/break-avoid-page-expected.txt: Added.
     27        * printing/break-avoid-page.html: Added.
     28        * printing/break-avoid.html: Added.
     29        * printing/break-display-none-expected.txt: Added.
     30        * printing/break-display-none.html: Added.
     31        * printing/break-inside-avoid-expected.txt: Added.
     32        * printing/break-inside-avoid-page-expected.txt: Added.
     33        * printing/break-inside-avoid-page.html: Added.
     34        * printing/break-inside-avoid.html: Added.
     35        * printing/script-tests/allowed-breaks.js: Added.
     36        (test):
     37        * printing/script-tests/break-after-avoid-page.js: Added.
     38        (test):
     39        * printing/script-tests/break-after-avoid.js: Added.
     40        (test):
     41        * printing/script-tests/break-always.js: Added.
     42        (test):
     43        * printing/script-tests/break-avoid-page.js: Added.
     44        (test):
     45        * printing/script-tests/break-avoid.js: Added.
     46        (test):
     47        * printing/script-tests/break-display-none.js: Added.
     48        (test):
     49        * printing/script-tests/break-inside-avoid-page.js: Added.
     50        (test):
     51        * printing/script-tests/break-inside-avoid.js: Added.
     52        (test):
     53
    1542016-01-29  Michael Catanzaro  <mcatanzaro@igalia.com>
    255
  • trunk/LayoutTests/TestExpectations

    r195652 r195892  
    713713
    714714webkit.org/b/148812 imported/w3c/css/css-multicol-1/multicol-width-small-001.xht [ ImageOnlyFailure ]
    715 webkit.org/b/148814 imported/w3c/css/css-multicol-1/multicol-break-000.xht [ ImageOnlyFailure ]
    716715webkit.org/b/148814 imported/w3c/css/css-multicol-1/multicol-break-001.xht [ ImageOnlyFailure ]
    717716webkit.org/b/148816 imported/w3c/css/css-multicol-1/multicol-rule-004.xht [ ImageOnlyFailure ]
  • trunk/LayoutTests/fast/css/style-enumerate-properties.html

    r155263 r195892  
    4141                break;
    4242            }
    43             if (++cssPropertyCount <= 100)
     43            if (++cssPropertyCount <= 103)
    4444                previous = p;
    4545            else {
  • trunk/Source/WebCore/ChangeLog

    r195879 r195892  
     12016-01-30 Dave Hyatt  <hyatt@apple.com>
     2
     3        Support break-after, break-before and break-inside.
     4        https://bugs.webkit.org/show_bug.cgi?id=148814
     5
     6        Reviewed by Dean Jackson.
     7
     8        New tests added in printing/, fast/multicol/, and fast/regions.
     9
     10        * css/CSSComputedStyleDeclaration.cpp:
     11        (WebCore::convertToPageBreak):
     12        (WebCore::convertToColumnBreak):
     13        (WebCore::convertToRegionBreak):
     14        For backwards compatibility, keep support for all the old properties in
     15        computed style. This means we have to convert the break-* property values
     16        into keywords that make sense for the legacy properties. This mainly
     17        involves mapping "page", "column", "region" to "always" (similar rule for
     18        the avoid-* versions as well).
     19
     20        (WebCore::ComputedStyleExtractor::propertyValue):
     21        Add support for the three new break-* properties.
     22
     23        * css/CSSParser.cpp:
     24        (WebCore::isValidKeywordPropertyAndValue):
     25        (WebCore::isKeywordPropertyID):
     26        (WebCore::CSSParser::parseValue):
     27        Add support for the new break properties.
     28
     29        * css/CSSPrimitiveValueMappings.h:
     30        (WebCore::CSSPrimitiveValue::operator BreakBetween):
     31        (WebCore::CSSPrimitiveValue::operator BreakInside):
     32        Add converters for the new BreakBetween and BreakInside enums. Remove
     33        the EPageBreak enum, since it is no longer used.
     34
     35        * css/CSSPropertyNames.in:
     36        * css/CSSValueKeywords.in:
     37        Add the new properties and the new values supported by the properties
     38        to the keywords lists.
     39
     40        * css/StyleBuilderConverter.h:
     41        (WebCore::StyleBuilderConverter::convertFontSynthesis):
     42        (WebCore::StyleBuilderConverter::convertPageBreakBetween):
     43        (WebCore::StyleBuilderConverter::convertPageBreakInside):
     44        (WebCore::StyleBuilderConverter::convertColumnBreakBetween):
     45        (WebCore::StyleBuilderConverter::convertColumnBreakInside):
     46        (WebCore::StyleBuilderConverter::convertRegionBreakBetween):
     47        (WebCore::StyleBuilderConverter::convertRegionBreakInside):
     48        In order to map the legacy properties into the new break-* values
     49        we have custom converter functions.
     50
     51        * rendering/RenderBlock.cpp:
     52        (WebCore::RenderBlock::paintChild):
     53        (WebCore::RenderBlock::childBoxIsUnsplittableForFragmentation):
     54        (WebCore::RenderBlock::computeRegionRangeForBoxChild):
     55        * rendering/RenderBlockFlow.cpp:
     56        (WebCore::RenderBlockFlow::applyBeforeBreak):
     57        (WebCore::RenderBlockFlow::applyAfterBreak):
     58        Patch the block code to check the correct new break-* constants. For
     59        avoidance, this means checking both the general avoid value and the
     60        specific value (e.g., avoid-page). In place of "always", we check
     61        the specific value (e.g., column) and then for page specifically, we
     62        also treat "left", "right", "recto" and "verso" as "always break" for now.
     63
     64        * rendering/style/RenderStyle.cpp:
     65        (WebCore::RenderStyle::changeRequiresLayout):
     66        Make sure changes to the break properties trigger relayout.
     67
     68        * rendering/style/RenderStyle.h:
     69        Add getters and setters for the break-* properties and remove all
     70        occurrences of the legacy page, column and region values from the RenderStyle.
     71
     72        * rendering/style/RenderStyleConstants.cpp:
     73        (WebCore::alwaysPageBreak):
     74        We have a helper function here for mapping several constant values to "page".
     75
     76        * rendering/style/RenderStyleConstants.h:
     77        Definitions of the new BreakBetween and BreakInside enums.
     78
     79        * rendering/style/StyleMultiColData.cpp:
     80        (WebCore::StyleMultiColData::StyleMultiColData):
     81        (WebCore::StyleMultiColData::operator==):
     82        * rendering/style/StyleMultiColData.h:
     83        Remove the column-specific break data.
     84
     85        * rendering/style/StyleRareNonInheritedData.cpp:
     86        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
     87        (WebCore::StyleRareNonInheritedData::operator==):
     88        * rendering/style/StyleRareNonInheritedData.h:
     89        Remove the region-specific break data and replace it with generic break
     90        data that is now used by all three pagination models.
     91
    1922016-01-29  Per Arne Vollan  <peavo@outlook.com>
    293
  • trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp

    r194496 r195892  
    20702070}
    20712071
     2072static CSSValueID convertToPageBreak(BreakBetween value)
     2073{
     2074    if (value == PageBreakBetween || value == LeftPageBreakBetween || value == RightPageBreakBetween
     2075        || value == RectoPageBreakBetween || value == VersoPageBreakBetween)
     2076        return CSSValueAlways; // CSS 2.1 allows us to map these to always.
     2077    if (value == AvoidBreakBetween || value == AvoidPageBreakBetween)
     2078        return CSSValueAvoid;
     2079    return CSSValueAuto;
     2080}
     2081
     2082static CSSValueID convertToColumnBreak(BreakBetween value)
     2083{
     2084    if (value == ColumnBreakBetween)
     2085        return CSSValueAlways;
     2086    if (value == AvoidBreakBetween || value == AvoidColumnBreakBetween)
     2087        return CSSValueAvoid;
     2088    return CSSValueAuto;
     2089}
     2090
     2091static CSSValueID convertToPageBreak(BreakInside value)
     2092{
     2093    if (value == AvoidBreakInside || value == AvoidPageBreakInside)
     2094        return CSSValueAvoid;
     2095    return CSSValueAuto;
     2096}
     2097
     2098static CSSValueID convertToColumnBreak(BreakInside value)
     2099{
     2100    if (value == AvoidBreakInside || value == AvoidColumnBreakInside)
     2101        return CSSValueAvoid;
     2102    return CSSValueAuto;
     2103}
     2104
     2105#if ENABLE(CSS_REGIONS)
     2106static CSSValueID convertToRegionBreak(BreakBetween value)
     2107{
     2108    if (value == RegionBreakBetween)
     2109        return CSSValueAlways;
     2110    if (value == AvoidBreakBetween || value == AvoidRegionBreakBetween)
     2111        return CSSValueAvoid;
     2112    return CSSValueAuto;
     2113}
     2114   
     2115static CSSValueID convertToRegionBreak(BreakInside value)
     2116{
     2117    if (value == AvoidBreakInside || value == AvoidRegionBreakInside)
     2118        return CSSValueAvoid;
     2119    return CSSValueAuto;
     2120}
     2121#endif
     2122   
    20722123static bool isLayoutDependent(CSSPropertyID propertyID, RenderStyle* style, RenderObject* renderer)
    20732124{
     
    26052656            return cssValuePool.createIdentifierValue(style->columnSpan() ? CSSValueAll : CSSValueNone);
    26062657        case CSSPropertyWebkitColumnBreakAfter:
    2607             return cssValuePool.createValue(style->columnBreakAfter());
     2658            return cssValuePool.createValue(convertToColumnBreak(style->breakAfter()));
    26082659        case CSSPropertyWebkitColumnBreakBefore:
    2609             return cssValuePool.createValue(style->columnBreakBefore());
     2660            return cssValuePool.createValue(convertToColumnBreak(style->breakBefore()));
    26102661        case CSSPropertyWebkitColumnBreakInside:
    2611             return cssValuePool.createValue(style->columnBreakInside());
     2662            return cssValuePool.createValue(convertToColumnBreak(style->breakInside()));
    26122663        case CSSPropertyColumnWidth:
    26132664            if (style->hasAutoColumnWidth())
     
    26182669#if ENABLE(CSS_REGIONS)
    26192670        case CSSPropertyWebkitRegionBreakAfter:
    2620             return cssValuePool.createValue(style->regionBreakAfter());
     2671            return cssValuePool.createValue(convertToRegionBreak(style->breakAfter()));
    26212672        case CSSPropertyWebkitRegionBreakBefore:
    2622             return cssValuePool.createValue(style->regionBreakBefore());
     2673            return cssValuePool.createValue(convertToRegionBreak(style->breakBefore()));
    26232674        case CSSPropertyWebkitRegionBreakInside:
    2624             return cssValuePool.createValue(style->regionBreakInside());
     2675            return cssValuePool.createValue(convertToRegionBreak(style->breakInside()));
    26252676#endif
    26262677        case CSSPropertyCursor: {
     
    29573008            return zoomAdjustedPaddingOrMarginPixelValue<&RenderStyle::paddingLeft, &RenderBoxModelObject::computedCSSPaddingLeft>(*style, renderer);
    29583009        case CSSPropertyPageBreakAfter:
    2959             return cssValuePool.createValue(style->pageBreakAfter());
     3010            return cssValuePool.createValue(convertToPageBreak(style->breakAfter()));
    29603011        case CSSPropertyPageBreakBefore:
    2961             return cssValuePool.createValue(style->pageBreakBefore());
    2962         case CSSPropertyPageBreakInside: {
    2963             EPageBreak pageBreak = style->pageBreakInside();
    2964             ASSERT(pageBreak != PBALWAYS);
    2965             if (pageBreak == PBALWAYS)
    2966                 return nullptr;
    2967             return cssValuePool.createValue(style->pageBreakInside());
    2968         }
     3012            return cssValuePool.createValue(convertToPageBreak(style->breakBefore()));
     3013        case CSSPropertyPageBreakInside:
     3014            return cssValuePool.createValue(convertToPageBreak(style->breakInside()));
     3015        case CSSPropertyBreakAfter:
     3016            return cssValuePool.createValue(style->breakAfter());
     3017        case CSSPropertyBreakBefore:
     3018            return cssValuePool.createValue(style->breakBefore());
     3019        case CSSPropertyBreakInside:
     3020            return cssValuePool.createValue(style->breakInside());
    29693021        case CSSPropertyPosition:
    29703022            return cssValuePool.createValue(style->position());
  • trunk/Source/WebCore/css/CSSParser.cpp

    r195808 r195892  
    10441044            return true;
    10451045        break;
     1046           
     1047    case CSSPropertyBreakAfter:
     1048    case CSSPropertyBreakBefore:
     1049        // auto | avoid | left | right | recto | verso | column | page | region | avoid-page | avoid-column | avoid-region
     1050        if (valueID == CSSValueAuto || valueID == CSSValueAvoid || valueID == CSSValueLeft || valueID == CSSValueRight
     1051            || valueID == CSSValueRecto || valueID == CSSValueVerso || valueID == CSSValueColumn || valueID == CSSValuePage
     1052            || valueID == CSSValueRegion || valueID == CSSValueAvoidColumn || valueID == CSSValueAvoidPage || valueID == CSSValueAvoidRegion)
     1053            return true;
     1054        break;
     1055    case CSSPropertyBreakInside:
     1056        // auto | avoid | avoid-page | avoid-column | avoid-region
     1057        if (valueID == CSSValueAuto || valueID == CSSValueAvoid || valueID == CSSValueAvoidColumn || valueID == CSSValueAvoidPage || valueID == CSSValueAvoidRegion)
     1058            return true;
     1059        break;
    10461060    default:
    10471061        ASSERT_NOT_REACHED();
     
    10631077    case CSSPropertyBorderTopStyle:
    10641078    case CSSPropertyBoxSizing:
     1079    case CSSPropertyBreakAfter:
     1080    case CSSPropertyBreakBefore:
     1081    case CSSPropertyBreakInside:
    10651082    case CSSPropertyCaptionSide:
    10661083    case CSSPropertyClear:
     
    31663183    case CSSPropertyBorderTopStyle:
    31673184    case CSSPropertyBoxSizing:
     3185    case CSSPropertyBreakAfter:
     3186    case CSSPropertyBreakBefore:
     3187    case CSSPropertyBreakInside:
    31683188    case CSSPropertyCaptionSide:
    31693189    case CSSPropertyClear:
  • trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h

    r195699 r195892  
    22022202}
    22032203
    2204 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPageBreak e)
    2205     : CSSValue(PrimitiveClass)
    2206 {
    2207     m_primitiveUnitType = CSS_VALUE_ID;
    2208     switch (e) {
    2209     case PBAUTO:
     2204template<> inline CSSPrimitiveValue::CSSPrimitiveValue(BreakBetween e)
     2205    : CSSValue(PrimitiveClass)
     2206{
     2207    m_primitiveUnitType = CSS_VALUE_ID;
     2208    switch (e) {
     2209    case AutoBreakBetween:
    22102210        m_value.valueID = CSSValueAuto;
    22112211        break;
    2212     case PBALWAYS:
    2213         m_value.valueID = CSSValueAlways;
    2214         break;
    2215     case PBAVOID:
     2212    case AvoidBreakBetween:
    22162213        m_value.valueID = CSSValueAvoid;
    22172214        break;
    2218     }
    2219 }
    2220 
    2221 template<> inline CSSPrimitiveValue::operator EPageBreak() const
     2215    case AvoidColumnBreakBetween:
     2216        m_value.valueID = CSSValueAvoidColumn;
     2217        break;
     2218    case AvoidPageBreakBetween:
     2219        m_value.valueID = CSSValueAvoidPage;
     2220        break;
     2221    case AvoidRegionBreakBetween:
     2222        m_value.valueID = CSSValueAvoidRegion;
     2223        break;
     2224    case ColumnBreakBetween:
     2225        m_value.valueID = CSSValueColumn;
     2226        break;
     2227    case PageBreakBetween:
     2228        m_value.valueID = CSSValuePage;
     2229        break;
     2230    case RegionBreakBetween:
     2231        m_value.valueID = CSSValueRegion;
     2232        break;
     2233    case LeftPageBreakBetween:
     2234        m_value.valueID = CSSValueLeft;
     2235        break;
     2236    case RightPageBreakBetween:
     2237        m_value.valueID = CSSValueRight;
     2238        break;
     2239    case RectoPageBreakBetween:
     2240        m_value.valueID = CSSValueRecto;
     2241        break;
     2242    case VersoPageBreakBetween:
     2243        m_value.valueID = CSSValueVerso;
     2244        break;
     2245    }
     2246}
     2247
     2248template<> inline CSSPrimitiveValue::operator BreakBetween() const
    22222249{
    22232250    ASSERT(isValueID());
     
    22252252    switch (m_value.valueID) {
    22262253    case CSSValueAuto:
    2227         return PBAUTO;
     2254        return AutoBreakBetween;
     2255    case CSSValueAvoid:
     2256        return AvoidBreakBetween;
     2257    case CSSValueAvoidColumn:
     2258        return AvoidColumnBreakBetween;
     2259    case CSSValueAvoidPage:
     2260        return AvoidPageBreakBetween;
     2261    case CSSValueAvoidRegion:
     2262        return AvoidRegionBreakBetween;
     2263    case CSSValueColumn:
     2264        return ColumnBreakBetween;
     2265    case CSSValuePage:
     2266        return PageBreakBetween;
     2267    case CSSValueRegion:
     2268        return RegionBreakBetween;
    22282269    case CSSValueLeft:
     2270        return LeftPageBreakBetween;
    22292271    case CSSValueRight:
    2230     case CSSValueAlways:
    2231         return PBALWAYS; // CSS2.1: "Conforming user agents may map left/right to always."
     2272        return RightPageBreakBetween;
     2273    case CSSValueRecto:
     2274        return RectoPageBreakBetween;
     2275    case CSSValueVerso:
     2276        return VersoPageBreakBetween;
     2277    default:
     2278        break;
     2279    }
     2280
     2281    ASSERT_NOT_REACHED();
     2282    return AutoBreakBetween;
     2283}
     2284
     2285template<> inline CSSPrimitiveValue::CSSPrimitiveValue(BreakInside e)
     2286    : CSSValue(PrimitiveClass)
     2287{
     2288    m_primitiveUnitType = CSS_VALUE_ID;
     2289    switch (e) {
     2290    case AutoBreakInside:
     2291        m_value.valueID = CSSValueAuto;
     2292        break;
     2293    case AvoidBreakInside:
     2294        m_value.valueID = CSSValueAvoid;
     2295        break;
     2296    case AvoidColumnBreakInside:
     2297        m_value.valueID = CSSValueAvoidColumn;
     2298        break;
     2299    case AvoidPageBreakInside:
     2300        m_value.valueID = CSSValueAvoidPage;
     2301        break;
     2302    case AvoidRegionBreakInside:
     2303        m_value.valueID = CSSValueAvoidRegion;
     2304        break;
     2305    }
     2306}
     2307
     2308template<> inline CSSPrimitiveValue::operator BreakInside() const
     2309{
     2310    ASSERT(isValueID());
     2311   
     2312    switch (m_value.valueID) {
     2313    case CSSValueAuto:
     2314        return AutoBreakInside;
    22322315    case CSSValueAvoid:
    2233         return PBAVOID;
    2234     default:
    2235         break;
    2236     }
    2237 
    2238     ASSERT_NOT_REACHED();
    2239     return PBAUTO;
     2316        return AvoidBreakInside;
     2317    case CSSValueAvoidColumn:
     2318        return AvoidColumnBreakInside;
     2319    case CSSValueAvoidPage:
     2320        return AvoidPageBreakInside;
     2321    case CSSValueAvoidRegion:
     2322        return AvoidRegionBreakInside;
     2323    default:
     2324        break;
     2325    }
     2326
     2327    ASSERT_NOT_REACHED();
     2328    return AutoBreakInside;
    22402329}
    22412330
  • trunk/Source/WebCore/css/CSSPropertyNames.in

    r195529 r195892  
    197197box-shadow [Custom=All]
    198198box-sizing
     199break-after [Initial=initialBreakBetween]
     200break-before [Initial=initialBreakBetween]
     201break-inside [Initial=initialBreakInside]
    199202buffered-rendering [SVG]
    200203// -webkit-box-sizing worked in Safari 4 and earlier.
     
    291294padding-top [Initial=initialPadding, Converter=Length]
    292295page [SkipBuilder]
    293 page-break-after [Initial=initialPageBreak]
    294 page-break-before [Initial=initialPageBreak]
    295 page-break-inside [Initial=initialPageBreak]
     296page-break-after [Initial=initialBreakBetween, NameForMethods=BreakAfter, Converter=PageBreakBetween]
     297page-break-before [Initial=initialBreakBetween, NameForMethods=BreakBefore, Converter=PageBreakBetween]
     298page-break-inside [Initial=initialBreakInside, NameForMethods=BreakInside, Converter=PageBreakInside]
    296299paint-order [SVG, Converter=PaintOrder]
    297300pointer-events [Inherited]
     
    428431-webkit-box-shadow [Custom=All]
    429432-webkit-column-axis
    430 -webkit-column-break-after [Initial=initialPageBreak]
    431 -webkit-column-break-before [Initial=initialPageBreak]
    432 -webkit-column-break-inside [Initial=initialPageBreak]
     433-webkit-column-break-after [Initial=initialBreakBetween, NameForMethods=BreakAfter, Converter=ColumnBreakBetween]
     434-webkit-column-break-before [Initial=initialBreakBetween, NameForMethods=BreakBefore, Converter=ColumnBreakBetween]
     435-webkit-column-break-inside [Initial=initialBreakInside, NameForMethods=BreakInside, Converter=ColumnBreakInside]
    433436column-count [AutoFunctions]
    434437-webkit-column-count = column-count
     
    643646-webkit-flow-from [NameForMethods=RegionThread, Converter=StringOrNone]
    644647-webkit-region-fragment
    645 -webkit-region-break-after [Initial=initialPageBreak]
    646 -webkit-region-break-before [Initial=initialPageBreak]
    647 -webkit-region-break-inside [Initial=initialPageBreak]
     648-webkit-region-break-after [Initial=initialBreakBetween, NameForMethods=BreakAfter, Converter=RegionBreakBetween]
     649-webkit-region-break-before [Initial=initialBreakBetween, NameForMethods=BreakBefore, Converter=RegionBreakBetween]
     650-webkit-region-break-inside [Initial=initialBreakInside, NameForMethods=BreakInside, Converter=RegionBreakInside]
    648651#endif
    649652#if defined(ENABLE_CSS_SHAPES) && ENABLE_CSS_SHAPES
  • trunk/Source/WebCore/css/CSSValueKeywords.in

    r195699 r195892  
    833833padding-box
    834834
     835//
     836// CSS_PROP_BREAK_BEFORE/AFTER/INSIDE
     837//
     838avoid-column
     839avoid-page
     840avoid-region
     841page
     842recto
     843region
     844verso
     845
    835846// CSS_SHAPES
    836847margin-box
  • trunk/Source/WebCore/css/StyleBuilderConverter.h

    r195808 r195892  
    127127    static Optional<Length> convertLineHeight(StyleResolver&, CSSValue&, float multiplier = 1.f);
    128128    static FontSynthesis convertFontSynthesis(StyleResolver&, CSSValue&);
     129   
     130    static BreakBetween convertPageBreakBetween(StyleResolver&, CSSValue&);
     131    static BreakInside convertPageBreakInside(StyleResolver&, CSSValue&);
     132    static BreakBetween convertColumnBreakBetween(StyleResolver&, CSSValue&);
     133    static BreakInside convertColumnBreakInside(StyleResolver&, CSSValue&);
     134#if ENABLE(CSS_REGIONS)
     135    static BreakBetween convertRegionBreakBetween(StyleResolver&, CSSValue&);
     136    static BreakInside convertRegionBreakInside(StyleResolver&, CSSValue&);
     137#endif
    129138
    130139private:
     
    12151224}
    12161225
     1226inline BreakBetween StyleBuilderConverter::convertPageBreakBetween(StyleResolver&, CSSValue& value)
     1227{
     1228    auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
     1229    if (primitiveValue.getValueID() == CSSValueAlways)
     1230        return PageBreakBetween;
     1231    if (primitiveValue.getValueID() == CSSValueAvoid)
     1232        return AvoidPageBreakBetween;
     1233    return primitiveValue;
     1234}
     1235
     1236inline BreakInside StyleBuilderConverter::convertPageBreakInside(StyleResolver&, CSSValue& value)
     1237{
     1238    auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
     1239    if (primitiveValue.getValueID() == CSSValueAvoid)
     1240        return AvoidPageBreakInside;
     1241    return primitiveValue;
     1242}
     1243
     1244inline BreakBetween StyleBuilderConverter::convertColumnBreakBetween(StyleResolver&, CSSValue& value)
     1245{
     1246    auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
     1247    if (primitiveValue.getValueID() == CSSValueAlways)
     1248        return ColumnBreakBetween;
     1249    if (primitiveValue.getValueID() == CSSValueAvoid)
     1250        return AvoidColumnBreakBetween;
     1251    return primitiveValue;
     1252}
     1253
     1254inline BreakInside StyleBuilderConverter::convertColumnBreakInside(StyleResolver&, CSSValue& value)
     1255{
     1256    auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
     1257    if (primitiveValue.getValueID() == CSSValueAvoid)
     1258        return AvoidColumnBreakInside;
     1259    return primitiveValue;
     1260}
     1261
     1262#if ENABLE(CSS_REGIONS)
     1263inline BreakBetween StyleBuilderConverter::convertRegionBreakBetween(StyleResolver&, CSSValue& value)
     1264{
     1265    auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
     1266    if (primitiveValue.getValueID() == CSSValueAlways)
     1267        return RegionBreakBetween;
     1268    if (primitiveValue.getValueID() == CSSValueAvoid)
     1269        return AvoidRegionBreakBetween;
     1270    return primitiveValue;
     1271}
     1272
     1273inline BreakInside StyleBuilderConverter::convertRegionBreakInside(StyleResolver&, CSSValue& value)
     1274{
     1275    auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
     1276    if (primitiveValue.getValueID() == CSSValueAvoid)
     1277        return AvoidRegionBreakInside;
     1278    return primitiveValue;
     1279}
     1280#endif
     1281
    12171282} // namespace WebCore
    12181283
  • trunk/Source/WebCore/rendering/RenderBlock.cpp

    r195740 r195892  
    14711471{
    14721472    // Check for page-break-before: always, and if it's set, break and bail.
    1473     bool checkBeforeAlways = !childrenInline() && (usePrintRect && child.style().pageBreakBefore() == PBALWAYS);
     1473    bool checkBeforeAlways = !childrenInline() && (usePrintRect && alwaysPageBreak(child.style().breakBefore()));
    14741474    LayoutUnit absoluteChildY = paintOffset.y() + child.y();
    14751475    if (checkBeforeAlways
     
    15001500
    15011501    // Check for page-break-after: always, and if it's set, break and bail.
    1502     bool checkAfterAlways = !childrenInline() && (usePrintRect && child.style().pageBreakAfter() == PBALWAYS);
     1502    bool checkAfterAlways = !childrenInline() && (usePrintRect && alwaysPageBreak(child.style().breakAfter()));
    15031503    if (checkAfterAlways
    15041504        && (absoluteChildY + child.height()) > paintInfo.rect.y()
     
    35343534    bool checkPageBreaks = !checkColumnBreaks && view().layoutState()->m_pageLogicalHeight;
    35353535    bool checkRegionBreaks = flowThread && flowThread->isRenderNamedFlowThread();
    3536     return child.isUnsplittableForPagination() || (checkColumnBreaks && child.style().columnBreakInside() == PBAVOID)
    3537         || (checkPageBreaks && child.style().pageBreakInside() == PBAVOID)
    3538         || (checkRegionBreaks && child.style().regionBreakInside() == PBAVOID);
     3536    return child.isUnsplittableForPagination() || child.style().breakInside() == AvoidBreakInside
     3537        || (checkColumnBreaks && child.style().breakInside() == AvoidColumnBreakInside)
     3538        || (checkPageBreaks && child.style().breakInside() == AvoidPageBreakInside)
     3539        || (checkRegionBreaks && child.style().breakInside() == AvoidRegionBreakInside);
    35393540}
    35403541
  • trunk/Source/WebCore/rendering/RenderBlockFlow.cpp

    r195146 r195892  
    14911491    bool checkPageBreaks = !checkColumnBreaks && view().layoutState()->m_pageLogicalHeight; // FIXME: Once columns can print we have to check this.
    14921492    bool checkRegionBreaks = flowThread && flowThread->isRenderNamedFlowThread();
    1493     bool checkBeforeAlways = (checkColumnBreaks && child.style().columnBreakBefore() == PBALWAYS)
    1494         || (checkPageBreaks && child.style().pageBreakBefore() == PBALWAYS)
    1495         || (checkRegionBreaks && child.style().regionBreakBefore() == PBALWAYS);
     1493    bool checkBeforeAlways = (checkColumnBreaks && child.style().breakBefore() == ColumnBreakBetween)
     1494        || (checkPageBreaks && alwaysPageBreak(child.style().breakBefore()))
     1495        || (checkRegionBreaks && child.style().breakBefore() == RegionBreakBetween);
    14961496    if (checkBeforeAlways && inNormalFlow(child) && hasNextPage(logicalOffset, IncludePageBoundary)) {
    14971497        if (checkColumnBreaks) {
     
    15171517    bool checkPageBreaks = !checkColumnBreaks && view().layoutState()->m_pageLogicalHeight; // FIXME: Once columns can print we have to check this.
    15181518    bool checkRegionBreaks = flowThread && flowThread->isRenderNamedFlowThread();
    1519     bool checkAfterAlways = (checkColumnBreaks && child.style().columnBreakAfter() == PBALWAYS)
    1520         || (checkPageBreaks && child.style().pageBreakAfter() == PBALWAYS)
    1521         || (checkRegionBreaks && child.style().regionBreakAfter() == PBALWAYS);
     1519    bool checkAfterAlways = (checkColumnBreaks && child.style().breakAfter() == ColumnBreakBetween)
     1520        || (checkPageBreaks && alwaysPageBreak(child.style().breakAfter()))
     1521        || (checkRegionBreaks && child.style().breakAfter() == RegionBreakBetween);
    15221522    if (checkAfterAlways && inNormalFlow(child) && hasNextPage(logicalOffset, IncludePageBoundary)) {
    15231523        LayoutUnit marginOffset = marginInfo.canCollapseWithMarginBefore() ? LayoutUnit() : marginInfo.margin();
  • trunk/Source/WebCore/rendering/style/RenderStyle.cpp

    r194819 r195892  
    685685    // Check text combine mode.
    686686    if (rareNonInheritedData->m_textCombine != other.rareNonInheritedData->m_textCombine)
     687        return true;
     688
     689    // Check breaks.
     690    if (rareNonInheritedData->m_breakBefore != other.rareNonInheritedData->m_breakBefore
     691        || rareNonInheritedData->m_breakAfter != other.rareNonInheritedData->m_breakAfter
     692        || rareNonInheritedData->m_breakInside != other.rareNonInheritedData->m_breakInside)
    687693        return true;
    688694
  • trunk/Source/WebCore/rendering/style/RenderStyle.h

    r195848 r195892  
    170170                | verticalAlignMask << verticalAlignOffset
    171171                | floatingMask << floatingOffset
    172                 | pageBreakMask << pageBreakInsideOffset
    173                 | pageBreakMask << pageBreakBeforeOffset
    174                 | pageBreakMask << pageBreakAfterOffset
    175172                | oneBitMask << explicitInheritanceOffset
    176173                | tableLayoutBitMask << tableLayoutOffset
     
    213210        EFloat floating() const { return static_cast<EFloat>(getValue(floatingMask, floatingOffset)); }
    214211        void setFloating(EFloat floating) { updateValue(floating, floatingMask, floatingOffset); }
    215 
    216         // For valid values of page-break-inside see http://www.w3.org/TR/CSS21/page.html#page-break-props
    217         EPageBreak pageBreakInside() const { return static_cast<EPageBreak>(getValue(pageBreakMask, pageBreakInsideOffset)); }
    218         void setPageBreakInside(EPageBreak pageBreakInside) { ASSERT(pageBreakInside == PBAUTO || pageBreakInside == PBAVOID); updateValue(pageBreakInside, pageBreakMask, pageBreakInsideOffset); }
    219 
    220         EPageBreak pageBreakBefore() const { return static_cast<EPageBreak>(getValue(pageBreakMask, pageBreakBeforeOffset)); }
    221         void setPageBreakBefore(EPageBreak pageBreakBefore) { updateValue(pageBreakBefore, pageBreakMask, pageBreakBeforeOffset); }
    222 
    223         EPageBreak pageBreakAfter() const { return static_cast<EPageBreak>(getValue(pageBreakMask, pageBreakAfterOffset)); }
    224         void setPageBreakAfter(EPageBreak pageBreakAfter) { updateValue(pageBreakAfter, pageBreakMask, pageBreakAfterOffset); }
    225212
    226213        bool hasAnyPublicPseudoStyles() const { return PUBLIC_PSEUDOID_MASK & getValue(pseudoBitsMask, pseudoBitsOffset); }
     
    348335        static const uint64_t floatingMask = (oneBitMask << floatingBitCount) - 1;
    349336        static const unsigned floatingOffset = unicodeBidiOffset + unicodeBidiBitCount;
    350         static const unsigned pageBreakBitCount = 2;
    351         static const uint64_t pageBreakMask = (oneBitMask << pageBreakBitCount) - 1;
    352         static const unsigned pageBreakInsideOffset = floatingOffset + floatingBitCount;
    353         static const unsigned pageBreakBeforeOffset = pageBreakInsideOffset + pageBreakBitCount;
    354         static const unsigned pageBreakAfterOffset = pageBreakBeforeOffset + pageBreakBitCount;
     337        static const unsigned hasExplicitlySetDirectionBitcount = 1;
     338        static const unsigned hasExplicitlySetDirectionOffset = floatingOffset + floatingBitCount;
     339        static const unsigned hasExplicitlySetWritingModeBitcount = 1;
     340        static const unsigned hasExplicitlySetWritingModeOffset = hasExplicitlySetDirectionOffset + hasExplicitlySetDirectionBitcount;
    355341
    356342        // Byte 5.
    357343        static const unsigned explicitInheritanceBitCount = 1;
    358         static const unsigned explicitInheritanceOffset = pageBreakAfterOffset + pageBreakBitCount;
     344        static const unsigned explicitInheritanceOffset = hasExplicitlySetWritingModeOffset + hasExplicitlySetWritingModeBitcount;
    359345        static const unsigned tableLayoutBitCount = 1;
    360346        static const uint64_t tableLayoutBitMask = oneBitMask;
    361347        static const unsigned tableLayoutOffset = explicitInheritanceOffset + explicitInheritanceBitCount;
    362348        static const unsigned verticalAlignBitCount = 4;
     349        static const unsigned verticalAlignPadding = 2;
     350        static const unsigned verticalAlignAndPaddingBitCount = verticalAlignBitCount + verticalAlignPadding;
    363351        static const uint64_t verticalAlignMask = (oneBitMask << verticalAlignBitCount) - 1;
    364352        static const unsigned verticalAlignOffset = tableLayoutOffset + tableLayoutBitCount;
    365         static const unsigned hasExplicitlySetDirectionBitcount = 1;
    366         static const unsigned hasExplicitlySetDirectionOffset = verticalAlignOffset + verticalAlignBitCount;
    367         static const unsigned hasExplicitlySetWritingModeBitcount = 1;
    368         static const unsigned hasExplicitlySetWritingModeOffset = hasExplicitlySetDirectionOffset + hasExplicitlySetDirectionBitcount;
    369353
    370354        // Byte 6.
    371355        static const unsigned pseudoBitsBitCount = 7;
    372356        static const uint64_t pseudoBitsMask = (oneBitMask << pseudoBitsBitCount) - 1;
    373         static const unsigned pseudoBitsOffset = hasExplicitlySetWritingModeOffset + hasExplicitlySetWritingModeBitcount;
     357        static const unsigned pseudoBitsOffset = verticalAlignOffset + verticalAlignBitCount;
    374358
    375359        static const unsigned hasViewportUnitsBitCount = 1;
     
    394378        static const unsigned isLinkOffset = affectedByDragOffset + 1;
    395379
    396 
    397         // 62 bits are assigned. There are 2 bits available currently used as padding to improve code generation.
     380        // 60 bits are assigned. There are 4 bits available currently used as padding to improve code generation.
    398381        // If you add more style bits here, you will also need to update RenderStyle::copyNonInheritedFrom().
    399382        uint64_t m_flags;
     
    892875    bool hasAutoWidows() const { return rareInheritedData->m_hasAutoWidows; }
    893876    bool hasAutoOrphans() const { return rareInheritedData->m_hasAutoOrphans; }
    894     EPageBreak pageBreakInside() const { return noninherited_flags.pageBreakInside(); }
    895     EPageBreak pageBreakBefore() const { return noninherited_flags.pageBreakBefore(); }
    896     EPageBreak pageBreakAfter() const { return noninherited_flags.pageBreakAfter(); }
    897877
    898878    // CSS3 Getter Methods
     879    BreakInside breakInside() const { return static_cast<BreakInside>(rareNonInheritedData->m_breakInside); }
     880    BreakBetween breakBefore() const { return static_cast<BreakBetween>(rareNonInheritedData->m_breakBefore); }
     881    BreakBetween breakAfter() const { return static_cast<BreakBetween>(rareNonInheritedData->m_breakAfter); }
    899882
    900883    float outlineOffset() const
     
    10391022    bool columnRuleIsTransparent() const { return rareNonInheritedData->m_multiCol->m_rule.isTransparent(); }
    10401023    ColumnSpan columnSpan() const { return static_cast<ColumnSpan>(rareNonInheritedData->m_multiCol->m_columnSpan); }
    1041     EPageBreak columnBreakBefore() const { return static_cast<EPageBreak>(rareNonInheritedData->m_multiCol->m_breakBefore); }
    1042     EPageBreak columnBreakInside() const { return static_cast<EPageBreak>(rareNonInheritedData->m_multiCol->m_breakInside); }
    1043     EPageBreak columnBreakAfter() const { return static_cast<EPageBreak>(rareNonInheritedData->m_multiCol->m_breakAfter); }
    1044     EPageBreak regionBreakBefore() const { return static_cast<EPageBreak>(rareNonInheritedData->m_regionBreakBefore); }
    1045     EPageBreak regionBreakInside() const { return static_cast<EPageBreak>(rareNonInheritedData->m_regionBreakInside); }
    1046     EPageBreak regionBreakAfter() const { return static_cast<EPageBreak>(rareNonInheritedData->m_regionBreakAfter); }
     1024
    10471025    const TransformOperations& transform() const { return rareNonInheritedData->m_transform->m_operations; }
    10481026    const Length& transformOriginX() const { return rareNonInheritedData->m_transform->m_x; }
     
    15091487    void setHasAutoOrphans() { SET_VAR(rareInheritedData, m_hasAutoOrphans, true); SET_VAR(rareInheritedData, orphans, initialOrphans()); }
    15101488    void setOrphans(short o) { SET_VAR(rareInheritedData, m_hasAutoOrphans, false); SET_VAR(rareInheritedData, orphans, o); }
    1511 
    1512     // For valid values of page-break-inside see http://www.w3.org/TR/CSS21/page.html#page-break-props
    1513     void setPageBreakInside(EPageBreak b) { noninherited_flags.setPageBreakInside(b); }
    1514     void setPageBreakBefore(EPageBreak b) { noninherited_flags.setPageBreakBefore(b); }
    1515     void setPageBreakAfter(EPageBreak b) { noninherited_flags.setPageBreakAfter(b); }
    15161489
    15171490    // CSS3 Setters
     
    16211594    void resetColumnRule() { SET_VAR(rareNonInheritedData.access()->m_multiCol, m_rule, BorderValue()); }
    16221595    void setColumnSpan(ColumnSpan columnSpan) { SET_VAR(rareNonInheritedData.access()->m_multiCol, m_columnSpan, columnSpan); }
    1623     void setColumnBreakBefore(EPageBreak p) { SET_VAR(rareNonInheritedData.access()->m_multiCol, m_breakBefore, p); }
    1624     // For valid values of column-break-inside see http://www.w3.org/TR/css3-multicol/#break-before-break-after-break-inside
    1625     void setColumnBreakInside(EPageBreak p) { ASSERT(p == PBAUTO || p == PBAVOID); SET_VAR(rareNonInheritedData.access()->m_multiCol, m_breakInside, p); }
    1626     void setColumnBreakAfter(EPageBreak p) { SET_VAR(rareNonInheritedData.access()->m_multiCol, m_breakAfter, p); }
    1627     void setRegionBreakBefore(EPageBreak p) { SET_VAR(rareNonInheritedData, m_regionBreakBefore, p); }
    1628     void setRegionBreakInside(EPageBreak p) { ASSERT(p == PBAUTO || p == PBAVOID); SET_VAR(rareNonInheritedData, m_regionBreakInside, p); }
    1629     void setRegionBreakAfter(EPageBreak p) { SET_VAR(rareNonInheritedData, m_regionBreakAfter, p); }
    16301596    void inheritColumnPropertiesFrom(RenderStyle* parent) { rareNonInheritedData.access()->m_multiCol = parent->rareNonInheritedData->m_multiCol; }
    16311597    void setTransform(const TransformOperations& ops) { SET_VAR(rareNonInheritedData.access()->m_transform, m_operations, ops); }
     
    16541620    void setTabSize(unsigned size) { SET_VAR(rareInheritedData, m_tabSize, size); }
    16551621
     1622    void setBreakBefore(BreakBetween breakBehavior) { SET_VAR(rareNonInheritedData, m_breakBefore, breakBehavior); }
     1623    void setBreakAfter(BreakBetween breakBehavior) { SET_VAR(rareNonInheritedData, m_breakAfter, breakBehavior); }
     1624    void setBreakInside(BreakInside breakBehavior) { SET_VAR(rareNonInheritedData, m_breakInside, breakBehavior); }
     1625
    16561626    // End CSS3 Setters
    16571627
     
    19101880    static EVerticalAlign initialVerticalAlign() { return BASELINE; }
    19111881    static EFloat initialFloating() { return NoFloat; }
    1912     static EPageBreak initialPageBreak() { return PBAUTO; }
     1882    static BreakBetween initialBreakBetween() { return AutoBreakBetween; }
     1883    static BreakInside initialBreakInside() { return AutoBreakInside; }
    19131884    static ETableLayout initialTableLayout() { return TAUTO; }
    19141885    static EBorderCollapse initialBorderCollapse() { return BSEPARATE; }
  • trunk/Source/WebCore/rendering/style/RenderStyleConstants.cpp

    r191310 r195892  
    9797}
    9898
     99bool alwaysPageBreak(BreakBetween between)
     100{
     101    return between >= PageBreakBetween;
     102}
     103
    99104} // namespace WebCore
  • trunk/Source/WebCore/rendering/style/RenderStyleConstants.h

    r195699 r195892  
    476476};
    477477
    478 enum EPageBreak {
    479     PBAUTO, PBALWAYS, PBAVOID
    480 };
    481 
     478enum BreakBetween {
     479    AutoBreakBetween, AvoidBreakBetween, AvoidColumnBreakBetween, AvoidPageBreakBetween, AvoidRegionBreakBetween, ColumnBreakBetween, RegionBreakBetween, PageBreakBetween, LeftPageBreakBetween, RightPageBreakBetween, RectoPageBreakBetween, VersoPageBreakBetween
     480};
     481bool alwaysPageBreak(BreakBetween);
     482   
     483enum BreakInside {
     484    AutoBreakInside, AvoidBreakInside, AvoidColumnBreakInside, AvoidPageBreakInside, AvoidRegionBreakInside
     485};
     486   
    482487enum EEmptyCell {
    483488    SHOW, HIDE
  • trunk/Source/WebCore/rendering/style/StyleMultiColData.cpp

    r177259 r195892  
    3636    , m_fill(RenderStyle::initialColumnFill())
    3737    , m_columnSpan(false)
    38     , m_breakBefore(RenderStyle::initialPageBreak())
    39     , m_breakAfter(RenderStyle::initialPageBreak())
    40     , m_breakInside(RenderStyle::initialPageBreak())
    4138    , m_axis(RenderStyle::initialColumnAxis())
    4239    , m_progression(RenderStyle::initialColumnProgression())
     
    5653    , m_fill(o.m_fill)
    5754    , m_columnSpan(o.m_columnSpan)
    58     , m_breakBefore(o.m_breakBefore)
    59     , m_breakAfter(o.m_breakAfter)
    60     , m_breakInside(o.m_breakInside)
    6155    , m_axis(o.m_axis)
    6256    , m_progression(o.m_progression)
     
    7266{
    7367    return m_width == o.m_width && m_count == o.m_count && m_gap == o.m_gap
    74         && m_rule == o.m_rule && m_visitedLinkColumnRuleColor == o.m_visitedLinkColumnRuleColor && m_breakBefore == o.m_breakBefore
     68        && m_rule == o.m_rule && m_visitedLinkColumnRuleColor == o.m_visitedLinkColumnRuleColor
    7569        && m_autoWidth == o.m_autoWidth && m_autoCount == o.m_autoCount && m_normalGap == o.m_normalGap
    7670        && m_fill == o.m_fill && m_columnSpan == o.m_columnSpan
    77         && m_breakAfter == o.m_breakAfter && m_breakInside == o.m_breakInside
    7871        && m_axis == o.m_axis && m_progression == o.m_progression;
    7972}
  • trunk/Source/WebCore/rendering/style/StyleMultiColData.h

    r177259 r195892  
    6565    unsigned m_fill : 1; // ColumnFill
    6666    unsigned m_columnSpan : 1;
    67     unsigned m_breakBefore : 2; // EPageBreak
    68     unsigned m_breakAfter : 2; // EPageBreak
    69     unsigned m_breakInside : 2; // EPageBreak
    7067    unsigned m_axis : 2; // ColumnAxis
    7168    unsigned m_progression : 2; // ColumnProgression
  • trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp

    r191452 r195892  
    8787#endif
    8888    , m_regionFragment(RenderStyle::initialRegionFragment())
    89     , m_regionBreakAfter(RenderStyle::initialPageBreak())
    90     , m_regionBreakBefore(RenderStyle::initialPageBreak())
    91     , m_regionBreakInside(RenderStyle::initialPageBreak())
    9289    , m_pageSizeType(PAGE_SIZE_AUTO)
    9390    , m_transformStyle3D(RenderStyle::initialTransformStyle3D())
     
    108105#endif
    109106    , m_objectFit(RenderStyle::initialObjectFit())
     107    , m_breakBefore(RenderStyle::initialBreakBetween())
     108    , m_breakAfter(RenderStyle::initialBreakBetween())
     109    , m_breakInside(RenderStyle::initialBreakInside())
    110110{
    111111    m_maskBoxImage.setMaskDefaults();
     
    179179#endif
    180180    , m_regionFragment(o.m_regionFragment)
    181     , m_regionBreakAfter(o.m_regionBreakAfter)
    182     , m_regionBreakBefore(o.m_regionBreakBefore)
    183     , m_regionBreakInside(o.m_regionBreakInside)
    184181    , m_pageSizeType(o.m_pageSizeType)
    185182    , m_transformStyle3D(o.m_transformStyle3D)
     
    200197#endif
    201198    , m_objectFit(o.m_objectFit)
     199    , m_breakBefore(o.m_breakBefore)
     200    , m_breakAfter(o.m_breakAfter)
     201    , m_breakInside(o.m_breakInside)
    202202{
    203203}
     
    275275        && m_regionThread == o.m_regionThread
    276276        && m_regionFragment == o.m_regionFragment
    277         && m_regionBreakAfter == o.m_regionBreakAfter
    278         && m_regionBreakBefore == o.m_regionBreakBefore
    279         && m_regionBreakInside == o.m_regionBreakInside
    280277        && m_pageSizeType == o.m_pageSizeType
    281278        && m_transformStyle3D == o.m_transformStyle3D
     
    301298#endif
    302299        && m_aspectRatioType == o.m_aspectRatioType
    303         && m_objectFit == o.m_objectFit;
     300        && m_objectFit == o.m_objectFit
     301        && m_breakAfter == o.m_breakAfter
     302        && m_breakBefore == o.m_breakBefore
     303        && m_breakInside == o.m_breakInside;
    304304}
    305305
  • trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h

    r191452 r195892  
    195195    unsigned m_regionFragment : 1; // RegionFragment
    196196
    197     unsigned m_regionBreakAfter : 2; // EPageBreak
    198     unsigned m_regionBreakBefore : 2; // EPageBreak
    199     unsigned m_regionBreakInside : 2; // EPageBreak
    200 
    201197    unsigned m_pageSizeType : 2; // PageSizeType
    202198    unsigned m_transformStyle3D : 1; // ETransformStyle3D
     
    224220
    225221    unsigned m_objectFit : 3; // ObjectFit
     222   
     223    unsigned m_breakBefore : 4; // BreakBetween
     224    unsigned m_breakAfter : 4;
     225    unsigned m_breakInside : 3; // BreakInside
    226226
    227227private:
Note: See TracChangeset for help on using the changeset viewer.