Changeset 291956 in webkit


Ignore:
Timestamp:
Mar 27, 2022 9:18:05 PM (4 months ago)
Author:
Matt Woodrow
Message:

Preserve repeat() notation for grid-templates
https://bugs.webkit.org/show_bug.cgi?id=202259

Reviewed by Dean Jackson.

LayoutTests/imported/w3c:

  • web-platform-tests/css/css-grid/animation/grid-template-columns-interpolation-expected.txt:
  • web-platform-tests/css/css-grid/animation/grid-template-rows-interpolation-expected.txt:
  • web-platform-tests/css/css-grid/parsing/grid-template-columns-computed-nogrid-expected.txt:
  • web-platform-tests/css/css-grid/parsing/grid-template-rows-computed-nogrid-expected.txt:

Update expectations for existing WPT tests, now that we get the correct computed value for
grid-template-rows/columns.

Source/WebCore:

  • animation/CSSPropertyAnimation.cpp:

(WebCore::blendFunc):
(WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
(WebCore::GridTemplateTracksWrapper<ForColumns>::GridTemplateTracksWrapper): Deleted.
(WebCore::GridTemplateTracksWrapper<ForRows>::GridTemplateTracksWrapper): Deleted.

Replaces GridTemplateTracksWrapper with a simpler GridTemplatePropertyWrapper that just compares the
track lists. In the future we can iterate the two tracks lists in parallel and interpolate per-item,
in order to get animation correct per-spec.

  • css/CSSComputedStyleDeclaration.cpp:

(WebCore::populateGridTrackList):
(WebCore::populateSubgridLineNameList):
(WebCore::valueForGridTrackList):
(WebCore::OrderedNamedLinesCollectorInsideRepeat::OrderedNamedLinesCollectorInsideRepeat): Deleted.
(WebCore::OrderedNamedLinesCollector::collectLineNamesForIndex const): Deleted.
(WebCore::OrderedNamedLinesCollectorInsideRepeat::collectLineNamesForIndex const): Deleted.

Implements getComputedStyle by iterating the track list and doing a 1:1 conversion to CSSValues, instead
of reconstructing from the processed hashtables.
This correctly preserves repeat() instances in the track list, which weren't retreivable from the processed
data.

  • rendering/style/RenderStyle.h:

(WebCore::RenderStyle::gridColumns const):
(WebCore::RenderStyle::gridRows const):
(WebCore::RenderStyle::gridColumnList const):
(WebCore::RenderStyle::gridRowList const):
(WebCore::RenderStyle::gridAutoRepeatColumns const):
(WebCore::RenderStyle::gridAutoRepeatRows const):
(WebCore::RenderStyle::gridAutoRepeatColumnsInsertionPoint const):
(WebCore::RenderStyle::gridAutoRepeatRowsInsertionPoint const):
(WebCore::RenderStyle::gridAutoRepeatColumnsType const):
(WebCore::RenderStyle::gridAutoRepeatRowsType const):
(WebCore::RenderStyle::namedGridColumnLines const):
(WebCore::RenderStyle::namedGridRowLines const):
(WebCore::RenderStyle::orderedNamedGridColumnLines const):
(WebCore::RenderStyle::orderedNamedGridRowLines const):
(WebCore::RenderStyle::autoRepeatNamedGridColumnLines const):
(WebCore::RenderStyle::autoRepeatNamedGridRowLines const):
(WebCore::RenderStyle::autoRepeatOrderedNamedGridColumnLines const):
(WebCore::RenderStyle::autoRepeatOrderedNamedGridRowLines const):
(WebCore::RenderStyle::gridSubgridRows const):
(WebCore::RenderStyle::gridSubgridColumns const):
(WebCore::RenderStyle::setGridColumnList):
(WebCore::RenderStyle::setGridRowList):
(WebCore::RenderStyle::setGridAutoRows):
(WebCore::RenderStyle::setGridAutoFlow):
(WebCore::RenderStyle::setGridColumns): Deleted.
(WebCore::RenderStyle::setGridRows): Deleted.
(WebCore::RenderStyle::setGridAutoRepeatColumns): Deleted.
(WebCore::RenderStyle::setGridAutoRepeatRows): Deleted.
(WebCore::RenderStyle::setGridAutoRepeatColumnsInsertionPoint): Deleted.
(WebCore::RenderStyle::setGridAutoRepeatRowsInsertionPoint): Deleted.
(WebCore::RenderStyle::setGridAutoRepeatColumnsType): Deleted.
(WebCore::RenderStyle::setGridAutoRepeatRowsType): Deleted.
(WebCore::RenderStyle::setNamedGridColumnLines): Deleted.
(WebCore::RenderStyle::setNamedGridRowLines): Deleted.
(WebCore::RenderStyle::setOrderedNamedGridColumnLines): Deleted.
(WebCore::RenderStyle::setOrderedNamedGridRowLines): Deleted.
(WebCore::RenderStyle::setAutoRepeatNamedGridColumnLines): Deleted.
(WebCore::RenderStyle::setAutoRepeatNamedGridRowLines): Deleted.
(WebCore::RenderStyle::setAutoRepeatOrderedNamedGridColumnLines): Deleted.
(WebCore::RenderStyle::setAutoRepeatOrderedNamedGridRowLines): Deleted.
(WebCore::RenderStyle::setGridSubgridRows): Deleted.
(WebCore::RenderStyle::setGridSubgridColumns): Deleted.

  • rendering/style/StyleGridData.cpp:

(WebCore::StyleGridData::StyleGridData):
(WebCore::StyleGridData::setRows):
(WebCore::StyleGridData::setColumns):
(WebCore::createGridLineNamesList):
(WebCore::StyleGridData::computeCachedTrackData):
(WebCore::operator<<):

  • rendering/style/StyleGridData.h:

(WebCore::StyleGridData::operator== const):
(WebCore::StyleGridData::gridColumns const):
(WebCore::StyleGridData::gridRows const):
(WebCore::StyleGridData::namedGridColumnLines const):
(WebCore::StyleGridData::namedGridRowLines const):
(WebCore::StyleGridData::orderedNamedGridColumnLines const):
(WebCore::StyleGridData::orderedNamedGridRowLines const):
(WebCore::StyleGridData::autoRepeatNamedGridColumnLines const):
(WebCore::StyleGridData::autoRepeatNamedGridRowLines const):
(WebCore::StyleGridData::autoRepeatOrderedNamedGridColumnLines const):
(WebCore::StyleGridData::autoRepeatOrderedNamedGridRowLines const):
(WebCore::StyleGridData::gridAutoRepeatColumns const):
(WebCore::StyleGridData::gridAutoRepeatRows const):
(WebCore::StyleGridData::autoRepeatColumnsInsertionPoint const):
(WebCore::StyleGridData::autoRepeatRowsInsertionPoint const):
(WebCore::StyleGridData::autoRepeatColumnsType const):
(WebCore::StyleGridData::autoRepeatRowsType const):
(WebCore::StyleGridData::subgridRows const):
(WebCore::StyleGridData::subgridColumns const):
(WebCore::StyleGridData::columns const):
(WebCore::StyleGridData::rows const):

Stores the computed track lists directly on RenderGrid, while retaining storage of the processed data.
computeCachedTrackData should be logically identical to the old BuilderConverter::createGridTrackList, but
happens when we modify the StyleGridData so that we can run it during animations.

  • style/StyleBuilderConverter.h:

(WebCore::Style::BuilderConverter::createGridTrackList):
(WebCore::Style::createGridLineNamesList): Deleted.
(): Deleted.

  • style/StyleBuilderCustom.h:

(WebCore::Style::BuilderCustom::applyInitialGridTemplateColumns):
(WebCore::Style::BuilderCustom::applyValueGridTemplateColumns):
(WebCore::Style::BuilderCustom::applyInitialGridTemplateRows):
(WebCore::Style::BuilderCustom::applyValueGridTemplateRows):

Rather than converting the track list into processed hashtables, just copies the data in the track list
format so that the StyleGridData can access the original data.

LayoutTests:

  • fast/css-grid-layout/grid-repeat-calc-expected.txt:
  • fast/css-grid-layout/grid-repeat-calc.html:
  • fast/css-grid-layout/non-grid-element-repeat-get-set-expected.txt:
  • fast/css-grid-layout/non-grid-element-repeat-get-set.html:

Update expected results to use repeat() notation.

Location:
trunk
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r291953 r291956  
     12022-03-27  Matt Woodrow  <mattwoodrow@apple.com>
     2
     3        Preserve repeat() notation for grid-templates
     4        https://bugs.webkit.org/show_bug.cgi?id=202259
     5
     6        Reviewed by Dean Jackson.
     7
     8        * fast/css-grid-layout/grid-repeat-calc-expected.txt:
     9        * fast/css-grid-layout/grid-repeat-calc.html:
     10        * fast/css-grid-layout/non-grid-element-repeat-get-set-expected.txt:
     11        * fast/css-grid-layout/non-grid-element-repeat-get-set.html:
     12
     13        Update expected results to use repeat() notation.
     14
    1152022-03-27  Matt Woodrow  <mattwoodrow@apple.com>
    216
  • trunk/LayoutTests/fast/css-grid-layout/grid-repeat-calc-expected.txt

    r245798 r291956  
    77testDiv.style['grid-template-rows'] = 'repeat(calc(1 + 1), 18px)'
    88PASS testDiv.style['grid-template-rows'] is "repeat(2, 18px)"
    9 PASS window.getComputedStyle(testDiv).getPropertyValue('grid-template-rows') is "18px 18px"
     9PASS window.getComputedStyle(testDiv).getPropertyValue('grid-template-rows') is "repeat(2, 18px)"
    1010PASS successfullyParsed is true
    1111
  • trunk/LayoutTests/fast/css-grid-layout/grid-repeat-calc.html

    r245798 r291956  
    1212evalAndLog("testDiv.style['grid-template-rows'] = 'repeat(calc(1 + 1), 18px)'");
    1313shouldBeEqualToString("testDiv.style['grid-template-rows']", "repeat(2, 18px)");
    14 shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('grid-template-rows')", "18px 18px");
     14shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('grid-template-rows')", "repeat(2, 18px)");
    1515
    1616</script>
  • trunk/LayoutTests/fast/css-grid-layout/non-grid-element-repeat-get-set-expected.txt

    r200510 r291956  
    55
    66Test getting grid-template-columns and grid-template-rows set through CSS
    7 PASS window.getComputedStyle(singleSingleTrackRepeat, '').getPropertyValue('grid-template-columns') is "15%"
    8 PASS window.getComputedStyle(singleSingleTrackRepeat, '').getPropertyValue('grid-template-rows') is "18px"
    9 PASS window.getComputedStyle(twoSingleTrackRepeat, '').getPropertyValue('grid-template-columns') is "minmax(15px, 50%) minmax(15px, 50%)"
    10 PASS window.getComputedStyle(twoSingleTrackRepeat, '').getPropertyValue('grid-template-rows') is "auto auto"
    11 PASS window.getComputedStyle(twoDoubleTrackRepeat, '').getPropertyValue('grid-template-columns') is "auto minmax(100px, 120px) auto minmax(100px, 120px)"
    12 PASS window.getComputedStyle(twoDoubleTrackRepeat, '').getPropertyValue('grid-template-rows') is "minmax(5px, 10px) auto minmax(5px, 10px) auto"
    13 PASS window.getComputedStyle(twoDoubleTrackWithNamedGridLineRepeat, '').getPropertyValue('grid-template-columns') is "auto [middle] 250px [end] auto [middle] 250px [end]"
    14 PASS window.getComputedStyle(twoDoubleTrackWithNamedGridLineRepeat, '').getPropertyValue('grid-template-rows') is "10px [start] auto [end] 10px [start] auto [end]"
    15 PASS window.getComputedStyle(twoDoubleTrackWithTrailingNamedGridLineRepeat, '').getPropertyValue('grid-template-columns') is "[before] auto [before] auto"
    16 PASS window.getComputedStyle(twoDoubleTrackWithTrailingNamedGridLineRepeat, '').getPropertyValue('grid-template-rows') is "[before] 10px [before] 10px"
    17 PASS window.getComputedStyle(trailingNamedGridLineRepeat, '').getPropertyValue('grid-template-columns') is "250px [end]"
    18 PASS window.getComputedStyle(trailingNamedGridLineRepeat, '').getPropertyValue('grid-template-rows') is "10px [end]"
    19 PASS window.getComputedStyle(leadingNamedGridLineRepeat, '').getPropertyValue('grid-template-columns') is "[start] 250px 250px"
    20 PASS window.getComputedStyle(leadingNamedGridLineRepeat, '').getPropertyValue('grid-template-rows') is "[start] 10px 10px"
    21 PASS window.getComputedStyle(mixRepeatAfterNonRepeat, '').getPropertyValue('grid-template-columns') is "[start] 140px 250px 250px"
    22 PASS window.getComputedStyle(mixRepeatAfterNonRepeat, '').getPropertyValue('grid-template-rows') is "auto 10px 10px"
    23 PASS window.getComputedStyle(mixNonRepeatAfterRepeat, '').getPropertyValue('grid-template-columns') is "250px 250px 15% [last]"
    24 PASS window.getComputedStyle(mixNonRepeatAfterRepeat, '').getPropertyValue('grid-template-rows') is "10px 10px [end] auto"
     7PASS window.getComputedStyle(singleSingleTrackRepeat, '').getPropertyValue('grid-template-columns') is "repeat(1, 15%)"
     8PASS window.getComputedStyle(singleSingleTrackRepeat, '').getPropertyValue('grid-template-rows') is "repeat(1, 18px)"
     9PASS window.getComputedStyle(twoSingleTrackRepeat, '').getPropertyValue('grid-template-columns') is "repeat(2, minmax(15px, 50%))"
     10PASS window.getComputedStyle(twoSingleTrackRepeat, '').getPropertyValue('grid-template-rows') is "repeat(2, auto)"
     11PASS window.getComputedStyle(twoDoubleTrackRepeat, '').getPropertyValue('grid-template-columns') is "repeat(2, auto minmax(100px, 120px))"
     12PASS window.getComputedStyle(twoDoubleTrackRepeat, '').getPropertyValue('grid-template-rows') is "repeat(2, minmax(5px, 10px) auto)"
     13PASS window.getComputedStyle(twoDoubleTrackWithNamedGridLineRepeat, '').getPropertyValue('grid-template-columns') is "repeat(2, auto [middle] 250px [end])"
     14PASS window.getComputedStyle(twoDoubleTrackWithNamedGridLineRepeat, '').getPropertyValue('grid-template-rows') is "repeat(2, 10px [start] auto [end])"
     15PASS window.getComputedStyle(twoDoubleTrackWithTrailingNamedGridLineRepeat, '').getPropertyValue('grid-template-columns') is "repeat(2, [before] auto)"
     16PASS window.getComputedStyle(twoDoubleTrackWithTrailingNamedGridLineRepeat, '').getPropertyValue('grid-template-rows') is "repeat(2, [before] 10px)"
     17PASS window.getComputedStyle(trailingNamedGridLineRepeat, '').getPropertyValue('grid-template-columns') is "repeat(1, 250px) [end]"
     18PASS window.getComputedStyle(trailingNamedGridLineRepeat, '').getPropertyValue('grid-template-rows') is "repeat(1, 10px) [end]"
     19PASS window.getComputedStyle(leadingNamedGridLineRepeat, '').getPropertyValue('grid-template-columns') is "[start] repeat(2, 250px)"
     20PASS window.getComputedStyle(leadingNamedGridLineRepeat, '').getPropertyValue('grid-template-rows') is "[start] repeat(2, 10px)"
     21PASS window.getComputedStyle(mixRepeatAfterNonRepeat, '').getPropertyValue('grid-template-columns') is "[start] 140px repeat(2, 250px)"
     22PASS window.getComputedStyle(mixRepeatAfterNonRepeat, '').getPropertyValue('grid-template-rows') is "auto repeat(2, 10px)"
     23PASS window.getComputedStyle(mixNonRepeatAfterRepeat, '').getPropertyValue('grid-template-columns') is "repeat(2, 250px) 15% [last]"
     24PASS window.getComputedStyle(mixNonRepeatAfterRepeat, '').getPropertyValue('grid-template-rows') is "repeat(2, 10px) [end] auto"
    2525
    2626Test invalid repeat syntax.
  • trunk/LayoutTests/fast/css-grid-layout/non-grid-element-repeat-get-set.html

    r200510 r291956  
    6767
    6868    debug("Test getting grid-template-columns and grid-template-rows set through CSS");
    69     testGridTemplatesValues(document.getElementById("singleSingleTrackRepeat"), "15%", "18px");
    70     testGridTemplatesValues(document.getElementById("twoSingleTrackRepeat"), "minmax(15px, 50%) minmax(15px, 50%)", "auto auto");
    71     testGridTemplatesValues(document.getElementById("twoDoubleTrackRepeat"), "auto minmax(100px, 120px) auto minmax(100px, 120px)", "minmax(5px, 10px) auto minmax(5px, 10px) auto");
    72     testGridTemplatesValues(document.getElementById("twoDoubleTrackWithNamedGridLineRepeat"), "auto [middle] 250px [end] auto [middle] 250px [end]", "10px [start] auto [end] 10px [start] auto [end]");
    73     testGridTemplatesValues(document.getElementById("twoDoubleTrackWithTrailingNamedGridLineRepeat"), "[before] auto [before] auto", "[before] 10px [before] 10px");
    74     testGridTemplatesValues(document.getElementById("trailingNamedGridLineRepeat"), "250px [end]", "10px [end]");
    75     testGridTemplatesValues(document.getElementById("leadingNamedGridLineRepeat"), "[start] 250px 250px", "[start] 10px 10px");
    76     testGridTemplatesValues(document.getElementById("mixRepeatAfterNonRepeat"), "[start] 140px 250px 250px", "auto 10px 10px");
    77     testGridTemplatesValues(document.getElementById("mixNonRepeatAfterRepeat"), "250px 250px 15% [last]", "10px 10px [end] auto");
     69    testGridTemplatesValues(document.getElementById("singleSingleTrackRepeat"), "repeat(1, 15%)", "repeat(1, 18px)");
     70    testGridTemplatesValues(document.getElementById("twoSingleTrackRepeat"), "repeat(2, minmax(15px, 50%))", "repeat(2, auto)");
     71    testGridTemplatesValues(document.getElementById("twoDoubleTrackRepeat"), "repeat(2, auto minmax(100px, 120px))", "repeat(2, minmax(5px, 10px) auto)");
     72    testGridTemplatesValues(document.getElementById("twoDoubleTrackWithNamedGridLineRepeat"), "repeat(2, auto [middle] 250px [end])", "repeat(2, 10px [start] auto [end])");
     73    testGridTemplatesValues(document.getElementById("twoDoubleTrackWithTrailingNamedGridLineRepeat"), "repeat(2, [before] auto)", "repeat(2, [before] 10px)");
     74    testGridTemplatesValues(document.getElementById("trailingNamedGridLineRepeat"), "repeat(1, 250px) [end]", "repeat(1, 10px) [end]");
     75    testGridTemplatesValues(document.getElementById("leadingNamedGridLineRepeat"), "[start] repeat(2, 250px)", "[start] repeat(2, 10px)");
     76    testGridTemplatesValues(document.getElementById("mixRepeatAfterNonRepeat"), "[start] 140px repeat(2, 250px)", "auto repeat(2, 10px)");
     77    testGridTemplatesValues(document.getElementById("mixNonRepeatAfterRepeat"), "repeat(2, 250px) 15% [last]", "repeat(2, 10px) [end] auto");
    7878
    7979    debug("");
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r291955 r291956  
     12022-03-27  Matt Woodrow  <mattwoodrow@apple.com>
     2
     3        Preserve repeat() notation for grid-templates
     4        https://bugs.webkit.org/show_bug.cgi?id=202259
     5
     6        Reviewed by Dean Jackson.
     7
     8        * web-platform-tests/css/css-grid/animation/grid-template-columns-interpolation-expected.txt:
     9        * web-platform-tests/css/css-grid/animation/grid-template-rows-interpolation-expected.txt:
     10        * web-platform-tests/css/css-grid/parsing/grid-template-columns-computed-nogrid-expected.txt:
     11        * web-platform-tests/css/css-grid/parsing/grid-template-rows-computed-nogrid-expected.txt:
     12
     13        Update expectations for existing WPT tests, now that we get the correct computed value for
     14        grid-template-rows/columns.
     15
    1162022-03-27  Matt Woodrow  <mattwoodrow@apple.com>
    217
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/animation/grid-template-columns-interpolation-expected.txt

    r278173 r291956  
    340340PASS Web Animations: property <grid-template-columns> from [repeat(2, 2fr 30px)] to [repeat(4, 40px)] at (1) should be [repeat(4, 40px)]
    341341PASS Web Animations: property <grid-template-columns> from [repeat(2, 2fr 30px)] to [repeat(4, 40px)] at (1.5) should be [repeat(4, 40px)]
    342 FAIL CSS Transitions: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr 1fr auto 20px 1fr auto 20px 0fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    343 FAIL CSS Transitions: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0) should be [1fr repeat(2, 2fr auto 30px) 1fr] assert_equals: expected "1fr 2fr auto 30px 2fr auto 30px 1fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    344 FAIL CSS Transitions: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr 2.4fr auto 34px 2.4fr auto 34px 1.4fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    345 FAIL CSS Transitions: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr 2.6fr 30px 36px 2.6fr 30px 36px 1.6fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
     342FAIL CSS Transitions: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr repeat ( 2 , 1fr auto 20px ) 0fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     343FAIL CSS Transitions: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0) should be [1fr repeat(2, 2fr auto 30px) 1fr] assert_equals: expected "1fr repeat ( 2 , 2fr auto 30px ) 1fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     344FAIL CSS Transitions: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     345FAIL CSS Transitions: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
    346346PASS CSS Transitions: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (1) should be [2fr repeat(2, 3fr 30px 40px) 2fr]
    347 FAIL CSS Transitions: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr 4fr 30px 50px 4fr 30px 50px 3fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    348 FAIL CSS Transitions with transition: all: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr 1fr auto 20px 1fr auto 20px 0fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    349 FAIL CSS Transitions with transition: all: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0) should be [1fr repeat(2, 2fr auto 30px) 1fr] assert_equals: expected "1fr 2fr auto 30px 2fr auto 30px 1fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    350 FAIL CSS Transitions with transition: all: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr 2.4fr auto 34px 2.4fr auto 34px 1.4fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    351 FAIL CSS Transitions with transition: all: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr 2.6fr 30px 36px 2.6fr 30px 36px 1.6fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
     347FAIL CSS Transitions: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     348FAIL CSS Transitions with transition: all: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr repeat ( 2 , 1fr auto 20px ) 0fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     349FAIL CSS Transitions with transition: all: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0) should be [1fr repeat(2, 2fr auto 30px) 1fr] assert_equals: expected "1fr repeat ( 2 , 2fr auto 30px ) 1fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     350FAIL CSS Transitions with transition: all: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     351FAIL CSS Transitions with transition: all: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
    352352PASS CSS Transitions with transition: all: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (1) should be [2fr repeat(2, 3fr 30px 40px) 2fr]
    353 FAIL CSS Transitions with transition: all: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr 4fr 30px 50px 4fr 30px 50px 3fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    354 FAIL CSS Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr 1fr auto 20px 1fr auto 20px 0fr " but got "1fr 2fr auto 30px 2fr auto 30px 1fr "
     353FAIL CSS Transitions with transition: all: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     354FAIL CSS Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr repeat ( 2 , 1fr auto 20px ) 0fr " but got "1fr repeat ( 2 , 2fr auto 30px ) 1fr "
    355355PASS CSS Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0) should be [1fr repeat(2, 2fr auto 30px) 1fr]
    356 FAIL CSS Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr 2.4fr auto 34px 2.4fr auto 34px 1.4fr " but got "1fr 2fr auto 30px 2fr auto 30px 1fr "
    357 FAIL CSS Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr 2.6fr 30px 36px 2.6fr 30px 36px 1.6fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
     356FAIL CSS Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "1fr repeat ( 2 , 2fr auto 30px ) 1fr "
     357FAIL CSS Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
    358358PASS CSS Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (1) should be [2fr repeat(2, 3fr 30px 40px) 2fr]
    359 FAIL CSS Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr 4fr 30px 50px 4fr 30px 50px 3fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    360 FAIL Web Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr 1fr auto 20px 1fr auto 20px 0fr " but got "1fr 2fr auto 30px 2fr auto 30px 1fr "
     359FAIL CSS Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     360FAIL Web Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr repeat ( 2 , 1fr auto 20px ) 0fr " but got "1fr repeat ( 2 , 2fr auto 30px ) 1fr "
    361361PASS Web Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0) should be [1fr repeat(2, 2fr auto 30px) 1fr]
    362 FAIL Web Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr 2.4fr auto 34px 2.4fr auto 34px 1.4fr " but got "1fr 2fr auto 30px 2fr auto 30px 1fr "
    363 FAIL Web Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr 2.6fr 30px 36px 2.6fr 30px 36px 1.6fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
     362FAIL Web Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "1fr repeat ( 2 , 2fr auto 30px ) 1fr "
     363FAIL Web Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
    364364PASS Web Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (1) should be [2fr repeat(2, 3fr 30px 40px) 2fr]
    365 FAIL Web Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr 4fr 30px 50px 4fr 30px 50px 3fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
     365FAIL Web Animations: property <grid-template-columns> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
    366366PASS CSS Transitions: property <grid-template-columns> from [10px repeat(auto-fill, minmax(25px, 1fr)) 10px] to [20px 20px repeat(auto-fill, minmax(30px, 1fr))] at (-0.3) should be [20px 20px repeat(auto-fill, minmax(30px, 1fr))]
    367367PASS CSS Transitions: property <grid-template-columns> from [10px repeat(auto-fill, minmax(25px, 1fr)) 10px] to [20px 20px repeat(auto-fill, minmax(30px, 1fr))] at (0) should be [20px 20px repeat(auto-fill, minmax(30px, 1fr))]
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/animation/grid-template-rows-interpolation-expected.txt

    r278173 r291956  
    340340PASS Web Animations: property <grid-template-rows> from [repeat(2, 2fr 30px)] to [repeat(4, 40px)] at (1) should be [repeat(4, 40px)]
    341341PASS Web Animations: property <grid-template-rows> from [repeat(2, 2fr 30px)] to [repeat(4, 40px)] at (1.5) should be [repeat(4, 40px)]
    342 FAIL CSS Transitions: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr 1fr auto 20px 1fr auto 20px 0fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    343 FAIL CSS Transitions: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0) should be [1fr repeat(2, 2fr auto 30px) 1fr] assert_equals: expected "1fr 2fr auto 30px 2fr auto 30px 1fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    344 FAIL CSS Transitions: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr 2.4fr auto 34px 2.4fr auto 34px 1.4fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    345 FAIL CSS Transitions: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr 2.6fr 30px 36px 2.6fr 30px 36px 1.6fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
     342FAIL CSS Transitions: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr repeat ( 2 , 1fr auto 20px ) 0fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     343FAIL CSS Transitions: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0) should be [1fr repeat(2, 2fr auto 30px) 1fr] assert_equals: expected "1fr repeat ( 2 , 2fr auto 30px ) 1fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     344FAIL CSS Transitions: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     345FAIL CSS Transitions: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
    346346PASS CSS Transitions: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (1) should be [2fr repeat(2, 3fr 30px 40px) 2fr]
    347 FAIL CSS Transitions: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr 4fr 30px 50px 4fr 30px 50px 3fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    348 FAIL CSS Transitions with transition: all: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr 1fr auto 20px 1fr auto 20px 0fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    349 FAIL CSS Transitions with transition: all: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0) should be [1fr repeat(2, 2fr auto 30px) 1fr] assert_equals: expected "1fr 2fr auto 30px 2fr auto 30px 1fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    350 FAIL CSS Transitions with transition: all: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr 2.4fr auto 34px 2.4fr auto 34px 1.4fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    351 FAIL CSS Transitions with transition: all: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr 2.6fr 30px 36px 2.6fr 30px 36px 1.6fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
     347FAIL CSS Transitions: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     348FAIL CSS Transitions with transition: all: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr repeat ( 2 , 1fr auto 20px ) 0fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     349FAIL CSS Transitions with transition: all: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0) should be [1fr repeat(2, 2fr auto 30px) 1fr] assert_equals: expected "1fr repeat ( 2 , 2fr auto 30px ) 1fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     350FAIL CSS Transitions with transition: all: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     351FAIL CSS Transitions with transition: all: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
    352352PASS CSS Transitions with transition: all: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (1) should be [2fr repeat(2, 3fr 30px 40px) 2fr]
    353 FAIL CSS Transitions with transition: all: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr 4fr 30px 50px 4fr 30px 50px 3fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    354 FAIL CSS Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr 1fr auto 20px 1fr auto 20px 0fr " but got "1fr 2fr auto 30px 2fr auto 30px 1fr "
     353FAIL CSS Transitions with transition: all: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     354FAIL CSS Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr repeat ( 2 , 1fr auto 20px ) 0fr " but got "1fr repeat ( 2 , 2fr auto 30px ) 1fr "
    355355PASS CSS Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0) should be [1fr repeat(2, 2fr auto 30px) 1fr]
    356 FAIL CSS Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr 2.4fr auto 34px 2.4fr auto 34px 1.4fr " but got "1fr 2fr auto 30px 2fr auto 30px 1fr "
    357 FAIL CSS Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr 2.6fr 30px 36px 2.6fr 30px 36px 1.6fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
     356FAIL CSS Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "1fr repeat ( 2 , 2fr auto 30px ) 1fr "
     357FAIL CSS Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
    358358PASS CSS Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (1) should be [2fr repeat(2, 3fr 30px 40px) 2fr]
    359 FAIL CSS Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr 4fr 30px 50px 4fr 30px 50px 3fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
    360 FAIL Web Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr 1fr auto 20px 1fr auto 20px 0fr " but got "1fr 2fr auto 30px 2fr auto 30px 1fr "
     359FAIL CSS Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
     360FAIL Web Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (-1) should be [0fr repeat(2, 1fr auto 20px) 0fr] assert_equals: expected "0fr repeat ( 2 , 1fr auto 20px ) 0fr " but got "1fr repeat ( 2 , 2fr auto 30px ) 1fr "
    361361PASS Web Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0) should be [1fr repeat(2, 2fr auto 30px) 1fr]
    362 FAIL Web Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr 2.4fr auto 34px 2.4fr auto 34px 1.4fr " but got "1fr 2fr auto 30px 2fr auto 30px 1fr "
    363 FAIL Web Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr 2.6fr 30px 36px 2.6fr 30px 36px 1.6fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
     362FAIL Web Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.4) should be [1.4fr repeat(2, 2.4fr auto 34px) 1.4fr] assert_equals: expected "1.4fr repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "1fr repeat ( 2 , 2fr auto 30px ) 1fr "
     363FAIL Web Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (0.6) should be [1.6fr repeat(2, 2.6fr 30px 36px) 1.6fr] assert_equals: expected "1.6fr repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
    364364PASS Web Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (1) should be [2fr repeat(2, 3fr 30px 40px) 2fr]
    365 FAIL Web Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr 4fr 30px 50px 4fr 30px 50px 3fr " but got "2fr 3fr 30px 40px 3fr 30px 40px 2fr "
     365FAIL Web Animations: property <grid-template-rows> from [1fr repeat(2, 2fr auto 30px) 1fr] to [2fr repeat(2, 3fr 30px 40px) 2fr] at (2) should be [3fr repeat(2, 4fr 30px 50px) 3fr] assert_equals: expected "3fr repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr "
    366366PASS CSS Transitions: property <grid-template-rows> from [10px repeat(auto-fill, minmax(25px, 1fr)) 10px] to [20px 20px repeat(auto-fill, minmax(30px, 1fr))] at (-0.3) should be [20px 20px repeat(auto-fill, minmax(30px, 1fr))]
    367367PASS CSS Transitions: property <grid-template-rows> from [10px repeat(auto-fill, minmax(25px, 1fr)) 10px] to [20px 20px repeat(auto-fill, minmax(30px, 1fr))] at (0) should be [20px 20px repeat(auto-fill, minmax(30px, 1fr))]
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-columns-computed-nogrid-expected.txt

    r267650 r291956  
    66PASS Property grid-template-columns value '[a] 1px'
    77PASS Property grid-template-columns value '[a] 1px [b]'
    8 FAIL Property grid-template-columns value '1px repeat(1, 2px) 3px' assert_equals: expected "1px repeat(1, 2px) 3px" but got "1px 2px 3px"
     8PASS Property grid-template-columns value '1px repeat(1, 2px) 3px'
    99PASS Property grid-template-columns value '1px repeat(auto-fill, 2px) 3px'
    1010PASS Property grid-template-columns value '1px repeat(auto-fit, 2px) 3px'
    11 FAIL Property grid-template-columns value '1px [a] repeat(1, 2px 3px) [b] 4px' assert_equals: expected "1px [a] repeat(1, 2px 3px) [b] 4px" but got "1px [a] 2px 3px [b] 4px"
     11PASS Property grid-template-columns value '1px [a] repeat(1, 2px 3px) [b] 4px'
    1212PASS Property grid-template-columns value '1px [a] repeat(auto-fill, 2px 3px) [b] 4px'
    1313PASS Property grid-template-columns value '1px [a] repeat(auto-fit, 2px 3px) [b] 4px'
    14 FAIL Property grid-template-columns value '1px [a] repeat(1, [b] 2px [c]) [d] 3px' assert_equals: expected "1px [a] repeat(1, [b] 2px [c]) [d] 3px" but got "1px [a b] 2px [c d] 3px"
     14PASS Property grid-template-columns value '1px [a] repeat(1, [b] 2px [c]) [d] 3px'
    1515PASS Property grid-template-columns value '1px [a] repeat(auto-fill, [b] 2px [c]) [d] 3px'
    1616PASS Property grid-template-columns value '1px [a] repeat(auto-fit, [b] 2px [c]) [d] 3px'
    17 FAIL Property grid-template-columns value '[a] 1px repeat(1, 2px [b] 3px) 4px [d]' assert_equals: expected "[a] 1px repeat(1, 2px [b] 3px) 4px [d]" but got "[a] 1px 2px [b] 3px 4px [d]"
     17PASS Property grid-template-columns value '[a] 1px repeat(1, 2px [b] 3px) 4px [d]'
    1818PASS Property grid-template-columns value '[a] 1px repeat(auto-fill, 2px [b] 3px) 4px [d]'
    1919PASS Property grid-template-columns value '[a] 1px repeat(auto-fit, 2px [b] 3px) 4px [d]'
    20 FAIL Property grid-template-rows value '100% [a] repeat(1, [b] 200% [c]) [d] 300%' assert_equals: expected "100% [a] repeat(1, [b] 200% [c]) [d] 300%" but got "100% [a b] 200% [c d] 300%"
     20PASS Property grid-template-rows value '100% [a] repeat(1, [b] 200% [c]) [d] 300%'
    2121PASS Property grid-template-rows value '100% [a] repeat(auto-fill, [b] 200% [c]) [d] 300%'
    2222PASS Property grid-template-rows value '100% [a] repeat(auto-fit, [b] 200% [c]) [d] 300%'
    23 FAIL Property grid-template-columns value '[a] 1em repeat(1, 2em [b] 3em) 4em [d]' assert_equals: expected "[a] 1px repeat(1, 2px [b] 3px) 4px [d]" but got "[a] 1px 2px [b] 3px 4px [d]"
     23PASS Property grid-template-columns value '[a] 1em repeat(1, 2em [b] 3em) 4em [d]'
    2424PASS Property grid-template-columns value '[a] 1em repeat(auto-fill, 2em [b] 3em) 4em [d]'
    2525PASS Property grid-template-columns value '[a] 1em repeat(auto-fit, 2em [b] 3em) 4em [d]'
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-rows-computed-nogrid-expected.txt

    r267650 r291956  
    66PASS Property grid-template-rows value '[a] 1px'
    77PASS Property grid-template-rows value '[a] 1px [b]'
    8 FAIL Property grid-template-rows value '1px repeat(1, 2px) 3px' assert_equals: expected "1px repeat(1, 2px) 3px" but got "1px 2px 3px"
     8PASS Property grid-template-rows value '1px repeat(1, 2px) 3px'
    99PASS Property grid-template-rows value '1px repeat(auto-fill, 2px) 3px'
    1010PASS Property grid-template-rows value '1px repeat(auto-fit, 2px) 3px'
    11 FAIL Property grid-template-rows value '1px [a] repeat(1, 2px 3px) [b] 4px' assert_equals: expected "1px [a] repeat(1, 2px 3px) [b] 4px" but got "1px [a] 2px 3px [b] 4px"
     11PASS Property grid-template-rows value '1px [a] repeat(1, 2px 3px) [b] 4px'
    1212PASS Property grid-template-rows value '1px [a] repeat(auto-fill, 2px 3px) [b] 4px'
    1313PASS Property grid-template-rows value '1px [a] repeat(auto-fit, 2px 3px) [b] 4px'
    14 FAIL Property grid-template-rows value '1px [a] repeat(1, [b] 2px [c]) [d] 3px' assert_equals: expected "1px [a] repeat(1, [b] 2px [c]) [d] 3px" but got "1px [a b] 2px [c d] 3px"
     14PASS Property grid-template-rows value '1px [a] repeat(1, [b] 2px [c]) [d] 3px'
    1515PASS Property grid-template-rows value '1px [a] repeat(auto-fill, [b] 2px [c]) [d] 3px'
    1616PASS Property grid-template-rows value '1px [a] repeat(auto-fit, [b] 2px [c]) [d] 3px'
    17 FAIL Property grid-template-rows value '[a] 1px repeat(1, 2px [b] 3px) 4px [d]' assert_equals: expected "[a] 1px repeat(1, 2px [b] 3px) 4px [d]" but got "[a] 1px 2px [b] 3px 4px [d]"
     17PASS Property grid-template-rows value '[a] 1px repeat(1, 2px [b] 3px) 4px [d]'
    1818PASS Property grid-template-rows value '[a] 1px repeat(auto-fill, 2px [b] 3px) 4px [d]'
    1919PASS Property grid-template-rows value '[a] 1px repeat(auto-fit, 2px [b] 3px) 4px [d]'
    20 FAIL Property grid-template-rows value '100% [a] repeat(1, [b] 200% [c]) [d] 300%' assert_equals: expected "100% [a] repeat(1, [b] 200% [c]) [d] 300%" but got "100% [a b] 200% [c d] 300%"
     20PASS Property grid-template-rows value '100% [a] repeat(1, [b] 200% [c]) [d] 300%'
    2121PASS Property grid-template-rows value '100% [a] repeat(auto-fill, [b] 200% [c]) [d] 300%'
    2222PASS Property grid-template-rows value '100% [a] repeat(auto-fit, [b] 200% [c]) [d] 300%'
    23 FAIL Property grid-template-rows value '[a] 1em repeat(1, 2em [b] 3em) 4em [d]' assert_equals: expected "[a] 1px repeat(1, 2px [b] 3px) 4px [d]" but got "[a] 1px 2px [b] 3px 4px [d]"
     23PASS Property grid-template-rows value '[a] 1em repeat(1, 2em [b] 3em) 4em [d]'
    2424PASS Property grid-template-rows value '[a] 1em repeat(auto-fill, 2em [b] 3em) 4em [d]'
    2525PASS Property grid-template-rows value '[a] 1em repeat(auto-fit, 2em [b] 3em) 4em [d]'
  • trunk/Source/WebCore/ChangeLog

    r291955 r291956  
     12022-03-27  Matt Woodrow  <mattwoodrow@apple.com>
     2
     3        Preserve repeat() notation for grid-templates
     4        https://bugs.webkit.org/show_bug.cgi?id=202259
     5
     6        Reviewed by Dean Jackson.
     7
     8        * animation/CSSPropertyAnimation.cpp:
     9        (WebCore::blendFunc):
     10        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
     11        (WebCore::GridTemplateTracksWrapper<ForColumns>::GridTemplateTracksWrapper): Deleted.
     12        (WebCore::GridTemplateTracksWrapper<ForRows>::GridTemplateTracksWrapper): Deleted.
     13
     14        Replaces GridTemplateTracksWrapper with a simpler GridTemplatePropertyWrapper that just compares the
     15        track lists. In the future we can iterate the two tracks lists in parallel and interpolate per-item,
     16        in order to get animation correct per-spec.
     17
     18        * css/CSSComputedStyleDeclaration.cpp:
     19        (WebCore::populateGridTrackList):
     20        (WebCore::populateSubgridLineNameList):
     21        (WebCore::valueForGridTrackList):
     22        (WebCore::OrderedNamedLinesCollectorInsideRepeat::OrderedNamedLinesCollectorInsideRepeat): Deleted.
     23        (WebCore::OrderedNamedLinesCollector::collectLineNamesForIndex const): Deleted.
     24        (WebCore::OrderedNamedLinesCollectorInsideRepeat::collectLineNamesForIndex const): Deleted.
     25
     26        Implements getComputedStyle by iterating the track list and doing a 1:1 conversion to CSSValues, instead
     27        of reconstructing from the processed hashtables.
     28        This correctly preserves repeat() instances in the track list, which weren't retreivable from the processed
     29        data.
     30
     31        * rendering/style/RenderStyle.h:
     32        (WebCore::RenderStyle::gridColumns const):
     33        (WebCore::RenderStyle::gridRows const):
     34        (WebCore::RenderStyle::gridColumnList const):
     35        (WebCore::RenderStyle::gridRowList const):
     36        (WebCore::RenderStyle::gridAutoRepeatColumns const):
     37        (WebCore::RenderStyle::gridAutoRepeatRows const):
     38        (WebCore::RenderStyle::gridAutoRepeatColumnsInsertionPoint const):
     39        (WebCore::RenderStyle::gridAutoRepeatRowsInsertionPoint const):
     40        (WebCore::RenderStyle::gridAutoRepeatColumnsType const):
     41        (WebCore::RenderStyle::gridAutoRepeatRowsType const):
     42        (WebCore::RenderStyle::namedGridColumnLines const):
     43        (WebCore::RenderStyle::namedGridRowLines const):
     44        (WebCore::RenderStyle::orderedNamedGridColumnLines const):
     45        (WebCore::RenderStyle::orderedNamedGridRowLines const):
     46        (WebCore::RenderStyle::autoRepeatNamedGridColumnLines const):
     47        (WebCore::RenderStyle::autoRepeatNamedGridRowLines const):
     48        (WebCore::RenderStyle::autoRepeatOrderedNamedGridColumnLines const):
     49        (WebCore::RenderStyle::autoRepeatOrderedNamedGridRowLines const):
     50        (WebCore::RenderStyle::gridSubgridRows const):
     51        (WebCore::RenderStyle::gridSubgridColumns const):
     52        (WebCore::RenderStyle::setGridColumnList):
     53        (WebCore::RenderStyle::setGridRowList):
     54        (WebCore::RenderStyle::setGridAutoRows):
     55        (WebCore::RenderStyle::setGridAutoFlow):
     56        (WebCore::RenderStyle::setGridColumns): Deleted.
     57        (WebCore::RenderStyle::setGridRows): Deleted.
     58        (WebCore::RenderStyle::setGridAutoRepeatColumns): Deleted.
     59        (WebCore::RenderStyle::setGridAutoRepeatRows): Deleted.
     60        (WebCore::RenderStyle::setGridAutoRepeatColumnsInsertionPoint): Deleted.
     61        (WebCore::RenderStyle::setGridAutoRepeatRowsInsertionPoint): Deleted.
     62        (WebCore::RenderStyle::setGridAutoRepeatColumnsType): Deleted.
     63        (WebCore::RenderStyle::setGridAutoRepeatRowsType): Deleted.
     64        (WebCore::RenderStyle::setNamedGridColumnLines): Deleted.
     65        (WebCore::RenderStyle::setNamedGridRowLines): Deleted.
     66        (WebCore::RenderStyle::setOrderedNamedGridColumnLines): Deleted.
     67        (WebCore::RenderStyle::setOrderedNamedGridRowLines): Deleted.
     68        (WebCore::RenderStyle::setAutoRepeatNamedGridColumnLines): Deleted.
     69        (WebCore::RenderStyle::setAutoRepeatNamedGridRowLines): Deleted.
     70        (WebCore::RenderStyle::setAutoRepeatOrderedNamedGridColumnLines): Deleted.
     71        (WebCore::RenderStyle::setAutoRepeatOrderedNamedGridRowLines): Deleted.
     72        (WebCore::RenderStyle::setGridSubgridRows): Deleted.
     73        (WebCore::RenderStyle::setGridSubgridColumns): Deleted.
     74        * rendering/style/StyleGridData.cpp:
     75        (WebCore::StyleGridData::StyleGridData):
     76        (WebCore::StyleGridData::setRows):
     77        (WebCore::StyleGridData::setColumns):
     78        (WebCore::createGridLineNamesList):
     79        (WebCore::StyleGridData::computeCachedTrackData):
     80        (WebCore::operator<<):
     81        * rendering/style/StyleGridData.h:
     82        (WebCore::StyleGridData::operator== const):
     83        (WebCore::StyleGridData::gridColumns const):
     84        (WebCore::StyleGridData::gridRows const):
     85        (WebCore::StyleGridData::namedGridColumnLines const):
     86        (WebCore::StyleGridData::namedGridRowLines const):
     87        (WebCore::StyleGridData::orderedNamedGridColumnLines const):
     88        (WebCore::StyleGridData::orderedNamedGridRowLines const):
     89        (WebCore::StyleGridData::autoRepeatNamedGridColumnLines const):
     90        (WebCore::StyleGridData::autoRepeatNamedGridRowLines const):
     91        (WebCore::StyleGridData::autoRepeatOrderedNamedGridColumnLines const):
     92        (WebCore::StyleGridData::autoRepeatOrderedNamedGridRowLines const):
     93        (WebCore::StyleGridData::gridAutoRepeatColumns const):
     94        (WebCore::StyleGridData::gridAutoRepeatRows const):
     95        (WebCore::StyleGridData::autoRepeatColumnsInsertionPoint const):
     96        (WebCore::StyleGridData::autoRepeatRowsInsertionPoint const):
     97        (WebCore::StyleGridData::autoRepeatColumnsType const):
     98        (WebCore::StyleGridData::autoRepeatRowsType const):
     99        (WebCore::StyleGridData::subgridRows const):
     100        (WebCore::StyleGridData::subgridColumns const):
     101        (WebCore::StyleGridData::columns const):
     102        (WebCore::StyleGridData::rows const):
     103
     104        Stores the computed track lists directly on RenderGrid, while retaining storage of the processed data.
     105        computeCachedTrackData should be logically identical to the old BuilderConverter::createGridTrackList, but
     106        happens when we modify the StyleGridData so that we can run it during animations.
     107
     108        * style/StyleBuilderConverter.h:
     109        (WebCore::Style::BuilderConverter::createGridTrackList):
     110        (WebCore::Style::createGridLineNamesList): Deleted.
     111        (): Deleted.
     112        * style/StyleBuilderCustom.h:
     113        (WebCore::Style::BuilderCustom::applyInitialGridTemplateColumns):
     114        (WebCore::Style::BuilderCustom::applyValueGridTemplateColumns):
     115        (WebCore::Style::BuilderCustom::applyInitialGridTemplateRows):
     116        (WebCore::Style::BuilderCustom::applyValueGridTemplateRows):
     117
     118        Rather than converting the track list into processed hashtables, just copies the data in the track list
     119        format so that the StyleGridData can access the original data.
     120
    11212022-03-27  Matt Woodrow  <mattwoodrow@apple.com>
    2122
  • trunk/Source/WebCore/animation/CSSPropertyAnimation.cpp

    r291946 r291956  
    610610}
    611611
     612static inline GridTrackList blendFunc(const GridTrackList& from, const GridTrackList& to, const CSSPropertyBlendingContext& context)
     613{
     614    return context.progress < 0.5 ? from : to;
     615}
     616
    612617class AnimationPropertyWrapperBase {
    613618    WTF_MAKE_NONCOPYABLE(AnimationPropertyWrapperBase);
     
    752757};
    753758
    754 template <GridTrackSizingDirection>
    755 class GridTemplateTracksWrapper : public AnimationPropertyWrapperBase {
    756     WTF_MAKE_FAST_ALLOCATED;
    757 public:
    758     GridTemplateTracksWrapper();
    759 
    760 private:
    761     bool canInterpolate(const RenderStyle&, const RenderStyle&, CompositeOperation) const final { return false; }
    762 
    763     bool equals(const RenderStyle& a, const RenderStyle& b) const override
    764     {
    765         return m_gridTracksWrapper.equals(a, b) && m_autoRepeatTracksWrapper.equals(a, b) && m_gridAutoRepeatTypeTracksWrapper.equals(a, b) && m_gridAutoRepeatInsertionPointTracksWrapper.equals(a, b) && m_orderedNamedGridLinesTracksWrapper.equals(a, b) && m_autoRepeatOrderedNamedGridLinesTracksWrapper.equals(a, b);
    766     }
    767 
     759class GridTemplatePropertyWrapper final : public PropertyWrapper<const GridTrackList&> {
     760    WTF_MAKE_FAST_ALLOCATED;
     761public:
     762    GridTemplatePropertyWrapper(CSSPropertyID property, const GridTrackList& (RenderStyle::*getter)() const, void (RenderStyle::*setter)(const GridTrackList&))
     763        : PropertyWrapper<const GridTrackList&>(property, getter, setter)
     764    {
     765    }
     766
     767private:
    768768    void blend(RenderStyle& destination, const RenderStyle& from, const RenderStyle& to, const CSSPropertyBlendingContext& context) const final
    769769    {
    770         m_gridTracksWrapper.blend(destination, from, to, context);
    771         m_autoRepeatTracksWrapper.blend(destination, from, to, context);
    772         m_gridAutoRepeatTypeTracksWrapper.blend(destination, from, to, context);
    773         m_gridAutoRepeatInsertionPointTracksWrapper.blend(destination, from, to, context);
    774         m_orderedNamedGridLinesTracksWrapper.blend(destination, from, to, context);
    775         m_autoRepeatOrderedNamedGridLinesTracksWrapper.blend(destination, from, to, context);
    776     }
    777 
    778 #if !LOG_DISABLED
    779     void logBlend(const RenderStyle& from, const RenderStyle& to, const RenderStyle& destination, double progress) const final
    780     {
    781         m_gridTracksWrapper.logBlend(from, to, destination, progress);
    782         m_autoRepeatTracksWrapper.logBlend(from, to, destination, progress);
    783         m_gridAutoRepeatTypeTracksWrapper.logBlend(from, to, destination, progress);
    784         m_gridAutoRepeatInsertionPointTracksWrapper.logBlend(from, to, destination, progress);
    785         m_orderedNamedGridLinesTracksWrapper.logBlend(from, to, destination, progress);
    786         m_autoRepeatOrderedNamedGridLinesTracksWrapper.logBlend(from, to, destination, progress);
    787     }
    788 #endif
    789 
    790     DiscretePropertyWrapper<const Vector<GridTrackSize>&> m_gridTracksWrapper;
    791     DiscretePropertyWrapper<const Vector<GridTrackSize>&> m_autoRepeatTracksWrapper;
    792     DiscretePropertyWrapper<AutoRepeatType> m_gridAutoRepeatTypeTracksWrapper;
    793     DiscretePropertyWrapper<unsigned> m_gridAutoRepeatInsertionPointTracksWrapper;
    794     DiscretePropertyWrapper<const OrderedNamedGridLinesMap&> m_orderedNamedGridLinesTracksWrapper;
    795     DiscretePropertyWrapper<const OrderedNamedGridLinesMap&> m_autoRepeatOrderedNamedGridLinesTracksWrapper;
    796 };
    797 
    798 template <>
    799 GridTemplateTracksWrapper<ForColumns>::GridTemplateTracksWrapper()
    800     : AnimationPropertyWrapperBase(CSSPropertyGridTemplateColumns)
    801     , m_gridTracksWrapper(DiscretePropertyWrapper<const Vector<GridTrackSize>&>(CSSPropertyGridTemplateColumns, &RenderStyle::gridColumns, &RenderStyle::setGridColumns))
    802     , m_autoRepeatTracksWrapper(DiscretePropertyWrapper<const Vector<GridTrackSize>&>(CSSPropertyGridTemplateColumns, &RenderStyle::gridAutoRepeatColumns, &RenderStyle::setGridAutoRepeatColumns))
    803     , m_gridAutoRepeatTypeTracksWrapper(DiscretePropertyWrapper<AutoRepeatType>(CSSPropertyGridTemplateColumns, &RenderStyle::gridAutoRepeatColumnsType, &RenderStyle::setGridAutoRepeatColumnsType))
    804     , m_gridAutoRepeatInsertionPointTracksWrapper(DiscretePropertyWrapper<unsigned>(CSSPropertyGridTemplateColumns, &RenderStyle::gridAutoRepeatColumnsInsertionPoint, &RenderStyle::setGridAutoRepeatColumnsInsertionPoint))
    805     , m_orderedNamedGridLinesTracksWrapper(DiscretePropertyWrapper<const OrderedNamedGridLinesMap&>(CSSPropertyGridTemplateColumns, &RenderStyle::orderedNamedGridColumnLines, &RenderStyle::setOrderedNamedGridColumnLines))
    806     , m_autoRepeatOrderedNamedGridLinesTracksWrapper(DiscretePropertyWrapper<const OrderedNamedGridLinesMap&>(CSSPropertyGridTemplateColumns, &RenderStyle::autoRepeatOrderedNamedGridColumnLines, &RenderStyle::setAutoRepeatOrderedNamedGridColumnLines))
    807 {
    808 }
    809 
    810 template <>
    811 GridTemplateTracksWrapper<ForRows>::GridTemplateTracksWrapper()
    812     : AnimationPropertyWrapperBase(CSSPropertyGridTemplateRows)
    813     , m_gridTracksWrapper(DiscretePropertyWrapper<const Vector<GridTrackSize>&>(CSSPropertyGridTemplateRows, &RenderStyle::gridRows, &RenderStyle::setGridRows))
    814     , m_autoRepeatTracksWrapper(DiscretePropertyWrapper<const Vector<GridTrackSize>&>(CSSPropertyGridTemplateRows, &RenderStyle::gridAutoRepeatRows, &RenderStyle::setGridAutoRepeatRows))
    815     , m_gridAutoRepeatTypeTracksWrapper(DiscretePropertyWrapper<AutoRepeatType>(CSSPropertyGridTemplateRows, &RenderStyle::gridAutoRepeatRowsType, &RenderStyle::setGridAutoRepeatRowsType))
    816     , m_gridAutoRepeatInsertionPointTracksWrapper(DiscretePropertyWrapper<unsigned>(CSSPropertyGridTemplateRows, &RenderStyle::gridAutoRepeatRowsInsertionPoint, &RenderStyle::setGridAutoRepeatRowsInsertionPoint))
    817     , m_orderedNamedGridLinesTracksWrapper(DiscretePropertyWrapper<const OrderedNamedGridLinesMap&>(CSSPropertyGridTemplateRows, &RenderStyle::orderedNamedGridRowLines, &RenderStyle::setOrderedNamedGridRowLines))
    818     , m_autoRepeatOrderedNamedGridLinesTracksWrapper(DiscretePropertyWrapper<const OrderedNamedGridLinesMap&>(CSSPropertyGridTemplateRows, &RenderStyle::autoRepeatOrderedNamedGridRowLines, &RenderStyle::setAutoRepeatOrderedNamedGridRowLines))
    819 {
    820 }
     770        (destination.*m_setter)(blendFunc(this->value(from), this->value(to), context));
     771    }
     772
     773    bool canInterpolate(const RenderStyle&, const RenderStyle&, CompositeOperation) const final
     774    {
     775        return false;
     776    }
     777};
    821778
    822779class BorderImageRepeatWrapper final : public AnimationPropertyWrapperBase {
     
    31803137        new DiscretePropertyWrapper<GridAutoFlow>(CSSPropertyGridAutoFlow, &RenderStyle::gridAutoFlow, &RenderStyle::setGridAutoFlow),
    31813138        new DiscretePropertyWrapper<const Vector<GridTrackSize>&>(CSSPropertyGridAutoRows, &RenderStyle::gridAutoRows, &RenderStyle::setGridAutoRows),
    3182         new GridTemplateTracksWrapper<ForColumns>,
    3183         new GridTemplateTracksWrapper<ForRows>,
     3139        new GridTemplatePropertyWrapper(CSSPropertyGridTemplateRows, &RenderStyle::gridRowList, &RenderStyle::setGridRowList),
     3140        new GridTemplatePropertyWrapper(CSSPropertyGridTemplateColumns, &RenderStyle::gridColumnList, &RenderStyle::setGridColumnList),
    31843141        new DiscretePropertyWrapper<const GridPosition&>(CSSPropertyGridColumnEnd, &RenderStyle::gridItemColumnEnd, &RenderStyle::setGridItemColumnEnd),
    31853142        new DiscretePropertyWrapper<const GridPosition&>(CSSPropertyGridColumnStart, &RenderStyle::gridItemColumnStart, &RenderStyle::setGridItemColumnStart),
  • trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp

    r291690 r291956  
    3636#include "CSSFunctionValue.h"
    3737#include "CSSGridAutoRepeatValue.h"
     38#include "CSSGridIntegerRepeatValue.h"
    3839#include "CSSLineBoxContainValue.h"
    3940#include "CSSPrimitiveValue.h"
     
    856857
    857858    bool isEmpty() const { return m_orderedNamedGridLines.isEmpty() && m_orderedNamedAutoRepeatGridLines.isEmpty(); }
    858     virtual void collectLineNamesForIndex(CSSGridLineNamesValue&, unsigned index) const;
     859    virtual void collectLineNamesForIndex(CSSGridLineNamesValue&, unsigned index) const = 0;
    859860
    860861    virtual int namedGridLineCount() const { return m_orderedNamedGridLines.size(); }
     
    867868    const OrderedNamedGridLinesMap& m_orderedNamedGridLines;
    868869    const OrderedNamedGridLinesMap& m_orderedNamedAutoRepeatGridLines;
    869 };
    870 
    871 class OrderedNamedLinesCollectorInsideRepeat : public OrderedNamedLinesCollector {
    872 public:
    873     OrderedNamedLinesCollectorInsideRepeat(const RenderStyle& style, bool isRowAxis)
    874         : OrderedNamedLinesCollector(style, isRowAxis)
    875     {
    876     }
    877 
    878     void collectLineNamesForIndex(CSSGridLineNamesValue&, unsigned index) const override;
    879 
    880     int namedGridLineCount() const override { return m_orderedNamedAutoRepeatGridLines.size(); }
    881870};
    882871
     
    942931}
    943932
    944 void OrderedNamedLinesCollector::collectLineNamesForIndex(CSSGridLineNamesValue& lineNamesValue, unsigned i) const
    945 {
    946     ASSERT(!isEmpty());
    947     appendLines(lineNamesValue, i, NamedLines);
    948 }
    949 
    950 void OrderedNamedLinesCollectorInsideRepeat::collectLineNamesForIndex(CSSGridLineNamesValue& lineNamesValue, unsigned i) const
    951 {
    952     ASSERT(!isEmpty());
    953     appendLines(lineNamesValue, i, AutoRepeatNamedLines);
    954 }
    955 
    956933void OrderedNamedLinesCollectorInGridLayout::collectLineNamesForIndex(CSSGridLineNamesValue& lineNamesValue, unsigned i) const
    957934{
     
    10251002
    10261003template <typename T, typename F>
    1027 void populateGridTrackList(CSSValueList& list, OrderedNamedLinesCollector& collector, const Vector<T>& tracks, F getTrackSize, int start, int end, int offset = 0)
    1028 {
    1029     ASSERT(0 <= start);
     1004void populateGridTrackList(CSSValueList& list, OrderedNamedLinesCollector& collector, const Vector<T>& tracks, F getTrackSize, int offset = 0)
     1005{
     1006    int start = 0;
     1007    int end = tracks.size();
    10301008    ASSERT(start <= end);
    10311009    ASSERT(static_cast<unsigned>(end) <= tracks.size());
     
    10391017}
    10401018
    1041 template <typename T, typename F>
    1042 void populateGridTrackList(CSSValueList& list, OrderedNamedLinesCollector& collector, const Vector<T>& tracks, F getTrackSize, int offset = 0)
    1043 {
    1044     populateGridTrackList<T>(list, collector, tracks, getTrackSize, 0, tracks.size(), offset);
    1045 }
    1046 
    1047 static void populateSubgridLineNameList(CSSValueList& list, OrderedNamedLinesCollector& collector, int start, int end)
    1048 {
    1049     for (int i = start; i < end; i++)
     1019static void populateSubgridLineNameList(CSSValueList& list, OrderedNamedLinesCollector& collector)
     1020{
     1021    for (int i = 0; i < collector.namedGridLineCount(); i++)
    10501022        addValuesForNamedGridLinesAtIndex(collector, i, list, true);
    1051 }
    1052 
    1053 static void populateSubgridLineNameList(CSSValueList& list, OrderedNamedLinesCollector& collector)
    1054 {
    1055     populateSubgridLineNameList(list, collector, 0, collector.namedGridLineCount());
    10561023}
    10571024
     
    10781045
    10791046    auto list = CSSValueList::createSpaceSeparated();
    1080     if (isSubgrid)
    1081         list->append(CSSValuePool::singleton().createIdentifierValue(CSSValueSubgrid));
    10821047
    10831048    // If the element is a grid container, the resolved value is the used value,
     
    10881053        auto* grid = downcast<RenderGrid>(renderer);
    10891054        if (isSubgrid) {
     1055            list->append(CSSValuePool::singleton().createIdentifierValue(CSSValueSubgrid));
     1056
    10901057            OrderedNamedLinesCollectorInSubgridLayout collector(style, isRowAxis, grid->numTracks(direction));
    10911058            populateSubgridLineNameList(list.get(), collector);
     
    11031070
    11041071    // Otherwise, the resolved value is the computed value, preserving repeat().
    1105     OrderedNamedLinesCollector collector(style, isRowAxis);
    1106     auto getTrackSize = [&](const GridTrackSize& v) {
    1107         return specifiedValueForGridTrackSize(v, style);
     1072    const GridTrackList& computedTracks = isRowAxis ? style.gridColumnList() : style.gridRowList();
     1073
     1074    auto repeatVisitor = [&](CSSValueList& dest, const RepeatEntry& entry) {
     1075        if (std::holds_alternative<Vector<String>>(entry)) {
     1076            auto lineNamesValue = CSSGridLineNamesValue::create();
     1077            for (const auto& name : std::get<Vector<String>>(entry))
     1078                lineNamesValue->append(CSSValuePool::singleton().createCustomIdent(name));
     1079            dest.append(lineNamesValue);
     1080        } else {
     1081            dest.append(specifiedValueForGridTrackSize(std::get<GridTrackSize>(entry), style));
     1082        }
    11081083    };
    11091084
    1110     OrderedNamedLinesCollectorInsideRepeat repeatCollector(style, isRowAxis);
    1111     if (isSubgrid) {
    1112         if (!repeatCollector.namedGridLineCount()) {
    1113             populateSubgridLineNameList(list.get(), collector);
    1114             return list;
    1115         }
    1116 
    1117         // Add the line names that precede the auto repeat().
    1118         int autoRepeatInsertionPoint = isRowAxis ? style.gridAutoRepeatColumnsInsertionPoint() : style.gridAutoRepeatRowsInsertionPoint();
    1119         autoRepeatInsertionPoint = std::clamp<int>(autoRepeatInsertionPoint, 0, collector.namedGridLineCount());
    1120         populateSubgridLineNameList(list.get(), collector, 0, autoRepeatInsertionPoint);
    1121 
    1122         // Add a CSSGridAutoRepeatValue with the contents of the auto repeat().
    1123         ASSERT((isRowAxis ? style.gridAutoRepeatColumnsType() : style.gridAutoRepeatRowsType()) == AutoRepeatType::Fill);
    1124         auto repeatedValues = CSSGridAutoRepeatValue::create(CSSValueAutoFill);
    1125         populateSubgridLineNameList(repeatedValues.get(), repeatCollector);
    1126         list->append(repeatedValues.get());
    1127 
    1128         // Add the line names that follow the auto repeat().
    1129         populateSubgridLineNameList(list.get(), collector, autoRepeatInsertionPoint, collector.namedGridLineCount());
    1130         return list;
    1131     }
    1132 
    1133     if (autoRepeatTrackSizes.isEmpty()) {
    1134         // If there's no auto repeat(), just add all the line names and track sizes.
    1135         populateGridTrackList(list.get(), collector, trackSizes, getTrackSize);
    1136         return list;
    1137     }
    1138 
    1139     // Add the line names and track sizes that precede the auto repeat().
    1140     int autoRepeatInsertionPoint = isRowAxis ? style.gridAutoRepeatColumnsInsertionPoint() : style.gridAutoRepeatRowsInsertionPoint();
    1141     autoRepeatInsertionPoint = std::clamp<int>(autoRepeatInsertionPoint, 0, trackSizes.size());
    1142     populateGridTrackList(list.get(), collector, trackSizes, getTrackSize, 0, autoRepeatInsertionPoint);
    1143 
    1144     // Add a CSSGridAutoRepeatValue with the contents of the auto repeat().
    1145     AutoRepeatType autoRepeatType = isRowAxis ? style.gridAutoRepeatColumnsType() : style.gridAutoRepeatRowsType();
    1146     auto repeatedValues = CSSGridAutoRepeatValue::create(autoRepeatType == AutoRepeatType::Fill ? CSSValueAutoFill : CSSValueAutoFit);
    1147 
    1148     populateGridTrackList(repeatedValues.get(), repeatCollector, autoRepeatTrackSizes, getTrackSize);
    1149     list->append(repeatedValues.get());
    1150 
    1151     // Add the line names and track sizes that follow the auto repeat().
    1152     populateGridTrackList(list.get(), collector, trackSizes, getTrackSize, autoRepeatInsertionPoint, trackSizes.size(), 1);
     1085    auto trackEntryVisitor = WTF::makeVisitor([&](const GridTrackSize& size) {
     1086        list->append(specifiedValueForGridTrackSize(size, style));
     1087    }, [&](const Vector<String>& names) {
     1088        auto lineNamesValue = CSSGridLineNamesValue::create();
     1089        for (const auto& name : names)
     1090            lineNamesValue->append(CSSValuePool::singleton().createCustomIdent(name));
     1091        list->append(lineNamesValue);
     1092    }, [&](const GridTrackEntryRepeat& repeat) {
     1093        auto repeatedValues = CSSGridIntegerRepeatValue::create(repeat.repeats);
     1094        for (const auto& entry : repeat.list)
     1095            repeatVisitor(repeatedValues, entry);
     1096        list->append(repeatedValues);
     1097    }, [&](const GridTrackEntryAutoRepeat& repeat) {
     1098        auto repeatedValues = CSSGridAutoRepeatValue::create(repeat.type == AutoRepeatType::Fill ? CSSValueAutoFill : CSSValueAutoFit);
     1099        for (const auto& entry : repeat.list)
     1100            repeatVisitor(repeatedValues, entry);
     1101        list->append(repeatedValues);
     1102    }, [&](const GridTrackEntrySubgrid&) {
     1103        list->append(CSSValuePool::singleton().createIdentifierValue(CSSValueSubgrid));
     1104    });
     1105
     1106    for (const auto& entry : computedTracks)
     1107        std::visit(trackEntryVisitor, entry);
     1108
    11531109    return list;
    11541110}
  • trunk/Source/WebCore/rendering/style/RenderStyle.h

    r291588 r291956  
    568568    const StyleSelfAlignmentData& justifySelf() const { return m_rareNonInheritedData->justifySelf; }
    569569
    570     const Vector<GridTrackSize>& gridColumns() const { return m_rareNonInheritedData->grid->gridColumns; }
    571     const Vector<GridTrackSize>& gridRows() const { return m_rareNonInheritedData->grid->gridRows; }
    572     const Vector<GridTrackSize>& gridAutoRepeatColumns() const { return m_rareNonInheritedData->grid->gridAutoRepeatColumns; }
    573     const Vector<GridTrackSize>& gridAutoRepeatRows() const { return m_rareNonInheritedData->grid->gridAutoRepeatRows; }
    574     unsigned gridAutoRepeatColumnsInsertionPoint() const { return m_rareNonInheritedData->grid->autoRepeatColumnsInsertionPoint; }
    575     unsigned gridAutoRepeatRowsInsertionPoint() const { return m_rareNonInheritedData->grid->autoRepeatRowsInsertionPoint; }
    576     AutoRepeatType gridAutoRepeatColumnsType() const  { return m_rareNonInheritedData->grid->autoRepeatColumnsType; }
    577     AutoRepeatType gridAutoRepeatRowsType() const  { return m_rareNonInheritedData->grid->autoRepeatRowsType; }
    578     const NamedGridLinesMap& namedGridColumnLines() const { return m_rareNonInheritedData->grid->namedGridColumnLines; }
    579     const NamedGridLinesMap& namedGridRowLines() const { return m_rareNonInheritedData->grid->namedGridRowLines; }
    580     const OrderedNamedGridLinesMap& orderedNamedGridColumnLines() const { return m_rareNonInheritedData->grid->orderedNamedGridColumnLines; }
    581     const OrderedNamedGridLinesMap& orderedNamedGridRowLines() const { return m_rareNonInheritedData->grid->orderedNamedGridRowLines; }
    582     const NamedGridLinesMap& autoRepeatNamedGridColumnLines() const { return m_rareNonInheritedData->grid->autoRepeatNamedGridColumnLines; }
    583     const NamedGridLinesMap& autoRepeatNamedGridRowLines() const { return m_rareNonInheritedData->grid->autoRepeatNamedGridRowLines; }
    584     const OrderedNamedGridLinesMap& autoRepeatOrderedNamedGridColumnLines() const { return m_rareNonInheritedData->grid->autoRepeatOrderedNamedGridColumnLines; }
    585     const OrderedNamedGridLinesMap& autoRepeatOrderedNamedGridRowLines() const { return m_rareNonInheritedData->grid->autoRepeatOrderedNamedGridRowLines; }
     570    const Vector<GridTrackSize>& gridColumns() const { return m_rareNonInheritedData->grid->gridColumns(); }
     571    const Vector<GridTrackSize>& gridRows() const { return m_rareNonInheritedData->grid->gridRows(); }
     572    const GridTrackList& gridColumnList() const { return m_rareNonInheritedData->grid->columns(); }
     573    const GridTrackList& gridRowList() const { return m_rareNonInheritedData->grid->rows(); }
     574    const Vector<GridTrackSize>& gridAutoRepeatColumns() const { return m_rareNonInheritedData->grid->gridAutoRepeatColumns(); }
     575    const Vector<GridTrackSize>& gridAutoRepeatRows() const { return m_rareNonInheritedData->grid->gridAutoRepeatRows(); }
     576    unsigned gridAutoRepeatColumnsInsertionPoint() const { return m_rareNonInheritedData->grid->autoRepeatColumnsInsertionPoint(); }
     577    unsigned gridAutoRepeatRowsInsertionPoint() const { return m_rareNonInheritedData->grid->autoRepeatRowsInsertionPoint(); }
     578    AutoRepeatType gridAutoRepeatColumnsType() const  { return m_rareNonInheritedData->grid->autoRepeatColumnsType(); }
     579    AutoRepeatType gridAutoRepeatRowsType() const  { return m_rareNonInheritedData->grid->autoRepeatRowsType(); }
     580    const NamedGridLinesMap& namedGridColumnLines() const { return m_rareNonInheritedData->grid->namedGridColumnLines(); }
     581    const NamedGridLinesMap& namedGridRowLines() const { return m_rareNonInheritedData->grid->namedGridRowLines(); }
     582    const OrderedNamedGridLinesMap& orderedNamedGridColumnLines() const { return m_rareNonInheritedData->grid->orderedNamedGridColumnLines(); }
     583    const OrderedNamedGridLinesMap& orderedNamedGridRowLines() const { return m_rareNonInheritedData->grid->orderedNamedGridRowLines(); }
     584    const NamedGridLinesMap& autoRepeatNamedGridColumnLines() const { return m_rareNonInheritedData->grid->autoRepeatNamedGridColumnLines(); }
     585    const NamedGridLinesMap& autoRepeatNamedGridRowLines() const { return m_rareNonInheritedData->grid->autoRepeatNamedGridRowLines(); }
     586    const OrderedNamedGridLinesMap& autoRepeatOrderedNamedGridColumnLines() const { return m_rareNonInheritedData->grid->autoRepeatOrderedNamedGridColumnLines(); }
     587    const OrderedNamedGridLinesMap& autoRepeatOrderedNamedGridRowLines() const { return m_rareNonInheritedData->grid->autoRepeatOrderedNamedGridRowLines(); }
    586588    const NamedGridLinesMap& implicitNamedGridColumnLines() const { return m_rareNonInheritedData->grid->implicitNamedGridColumnLines; }
    587589    const NamedGridLinesMap& implicitNamedGridRowLines() const { return m_rareNonInheritedData->grid->implicitNamedGridRowLines; }
     
    590592    size_t namedGridAreaColumnCount() const { return m_rareNonInheritedData->grid->namedGridAreaColumnCount; }
    591593    GridAutoFlow gridAutoFlow() const { return static_cast<GridAutoFlow>(m_rareNonInheritedData->grid->gridAutoFlow); }
    592     bool gridSubgridRows() const { return m_rareNonInheritedData->grid->subgridRows; }
    593     bool gridSubgridColumns() const { return m_rareNonInheritedData->grid->subgridColumns; }
     594    bool gridSubgridRows() const { return m_rareNonInheritedData->grid->subgridRows(); }
     595    bool gridSubgridColumns() const { return m_rareNonInheritedData->grid->subgridColumns(); }
    594596    bool isGridAutoFlowDirectionRow() const { return (m_rareNonInheritedData->grid->gridAutoFlow & InternalAutoFlowDirectionRow); }
    595597    bool isGridAutoFlowDirectionColumn() const { return (m_rareNonInheritedData->grid->gridAutoFlow & InternalAutoFlowDirectionColumn); }
     
    12051207#endif
    12061208
     1209    void setGridColumnList(const GridTrackList& list)
     1210    {
     1211        if (!compareEqual(m_rareNonInheritedData->grid->columns(), list))
     1212            m_rareNonInheritedData.access().grid.access().setColumns(list);
     1213    }
     1214    void setGridRowList(const GridTrackList& list)
     1215    {
     1216        if (!compareEqual(m_rareNonInheritedData->grid->rows(), list))
     1217            m_rareNonInheritedData.access().grid.access().setRows(list);
     1218    }
    12071219    void setGridAutoColumns(const Vector<GridTrackSize>& trackSizeList) { SET_NESTED_VAR(m_rareNonInheritedData, grid, gridAutoColumns, trackSizeList); }
    12081220    void setGridAutoRows(const Vector<GridTrackSize>& trackSizeList) { SET_NESTED_VAR(m_rareNonInheritedData, grid, gridAutoRows, trackSizeList); }
    1209     void setGridColumns(const Vector<GridTrackSize>& lengths) { SET_NESTED_VAR(m_rareNonInheritedData, grid, gridColumns, lengths); }
    1210     void setGridRows(const Vector<GridTrackSize>& lengths) { SET_NESTED_VAR(m_rareNonInheritedData, grid, gridRows, lengths); }
    1211     void setGridAutoRepeatColumns(const Vector<GridTrackSize>& lengths) { SET_NESTED_VAR(m_rareNonInheritedData, grid, gridAutoRepeatColumns, lengths); }
    1212     void setGridAutoRepeatRows(const Vector<GridTrackSize>& lengths) { SET_NESTED_VAR(m_rareNonInheritedData, grid, gridAutoRepeatRows, lengths); }
    1213     void setGridAutoRepeatColumnsInsertionPoint(const unsigned insertionPoint) { SET_NESTED_VAR(m_rareNonInheritedData, grid, autoRepeatColumnsInsertionPoint, insertionPoint); }
    1214     void setGridAutoRepeatRowsInsertionPoint(const unsigned insertionPoint) { SET_NESTED_VAR(m_rareNonInheritedData, grid, autoRepeatRowsInsertionPoint, insertionPoint); }
    1215     void setGridAutoRepeatColumnsType(const AutoRepeatType autoRepeatType) { SET_NESTED_VAR(m_rareNonInheritedData, grid, autoRepeatColumnsType, autoRepeatType); }
    1216     void setGridAutoRepeatRowsType(const AutoRepeatType autoRepeatType) { SET_NESTED_VAR(m_rareNonInheritedData, grid, autoRepeatRowsType, autoRepeatType); }
    1217     void setNamedGridColumnLines(const NamedGridLinesMap& namedGridColumnLines) { SET_NESTED_VAR(m_rareNonInheritedData, grid, namedGridColumnLines, namedGridColumnLines); }
    1218     void setNamedGridRowLines(const NamedGridLinesMap& namedGridRowLines) { SET_NESTED_VAR(m_rareNonInheritedData, grid, namedGridRowLines, namedGridRowLines); }
    1219     void setOrderedNamedGridColumnLines(const OrderedNamedGridLinesMap& orderedNamedGridColumnLines) { SET_NESTED_VAR(m_rareNonInheritedData, grid, orderedNamedGridColumnLines, orderedNamedGridColumnLines); }
    1220     void setOrderedNamedGridRowLines(const OrderedNamedGridLinesMap& orderedNamedGridRowLines) { SET_NESTED_VAR(m_rareNonInheritedData, grid, orderedNamedGridRowLines, orderedNamedGridRowLines); }
    1221     void setAutoRepeatNamedGridColumnLines(const NamedGridLinesMap& namedGridColumnLines) { SET_NESTED_VAR(m_rareNonInheritedData, grid, autoRepeatNamedGridColumnLines, namedGridColumnLines); }
    1222     void setAutoRepeatNamedGridRowLines(const NamedGridLinesMap& namedGridRowLines) { SET_NESTED_VAR(m_rareNonInheritedData, grid, autoRepeatNamedGridRowLines, namedGridRowLines); }
    1223     void setAutoRepeatOrderedNamedGridColumnLines(const OrderedNamedGridLinesMap& orderedNamedGridColumnLines) { SET_NESTED_VAR(m_rareNonInheritedData, grid, autoRepeatOrderedNamedGridColumnLines, orderedNamedGridColumnLines); }
    1224     void setAutoRepeatOrderedNamedGridRowLines(const OrderedNamedGridLinesMap& orderedNamedGridRowLines) { SET_NESTED_VAR(m_rareNonInheritedData, grid, autoRepeatOrderedNamedGridRowLines, orderedNamedGridRowLines); }
    12251221    void setImplicitNamedGridColumnLines(const NamedGridLinesMap& namedGridColumnLines) { SET_NESTED_VAR(m_rareNonInheritedData, grid, implicitNamedGridColumnLines, namedGridColumnLines); }
    12261222    void setImplicitNamedGridRowLines(const NamedGridLinesMap& namedGridRowLines) { SET_NESTED_VAR(m_rareNonInheritedData, grid, implicitNamedGridRowLines, namedGridRowLines); }
     
    12291225    void setNamedGridAreaColumnCount(size_t columnCount) { SET_NESTED_VAR(m_rareNonInheritedData, grid, namedGridAreaColumnCount, columnCount); }
    12301226    void setGridAutoFlow(GridAutoFlow flow) { SET_NESTED_VAR(m_rareNonInheritedData, grid, gridAutoFlow, flow); }
    1231     void setGridSubgridRows(bool subgrid) { SET_NESTED_VAR(m_rareNonInheritedData, grid, subgridRows, subgrid); }
    1232     void setGridSubgridColumns(bool subgrid) { SET_NESTED_VAR(m_rareNonInheritedData, grid, subgridColumns, subgrid); }
    12331227    void setGridItemColumnStart(const GridPosition& columnStartPosition) { SET_NESTED_VAR(m_rareNonInheritedData, gridItem, gridColumnStart, columnStartPosition); }
    12341228    void setGridItemColumnEnd(const GridPosition& columnEndPosition) { SET_NESTED_VAR(m_rareNonInheritedData, gridItem, gridColumnEnd, columnEndPosition); }
  • trunk/Source/WebCore/rendering/style/StyleGridData.cpp

    r289722 r291956  
    3232
    3333StyleGridData::StyleGridData()
    34     : gridColumns(RenderStyle::initialGridColumns())
    35     , gridRows(RenderStyle::initialGridRows())
    36     , namedGridColumnLines(RenderStyle::initialNamedGridColumnLines())
    37     , namedGridRowLines(RenderStyle::initialNamedGridRowLines())
    38     , orderedNamedGridColumnLines(RenderStyle::initialOrderedNamedGridColumnLines())
    39     , orderedNamedGridRowLines(RenderStyle::initialOrderedNamedGridRowLines())
    40     , autoRepeatNamedGridColumnLines(RenderStyle::initialNamedGridColumnLines())
    41     , autoRepeatNamedGridRowLines(RenderStyle::initialNamedGridRowLines())
    42     , autoRepeatOrderedNamedGridColumnLines(RenderStyle::initialOrderedNamedGridColumnLines())
    43     , autoRepeatOrderedNamedGridRowLines(RenderStyle::initialOrderedNamedGridRowLines())
    44     , implicitNamedGridColumnLines(RenderStyle::initialNamedGridColumnLines())
     34    : implicitNamedGridColumnLines(RenderStyle::initialNamedGridColumnLines())
    4535    , implicitNamedGridRowLines(RenderStyle::initialNamedGridRowLines())
    4636    , gridAutoFlow(RenderStyle::initialGridAutoFlow())
     
    5040    , namedGridAreaRowCount(RenderStyle::initialNamedGridAreaCount())
    5141    , namedGridAreaColumnCount(RenderStyle::initialNamedGridAreaCount())
    52     , gridAutoRepeatColumns(RenderStyle::initialGridAutoRepeatTracks())
    53     , gridAutoRepeatRows(RenderStyle::initialGridAutoRepeatTracks())
    54     , autoRepeatColumnsInsertionPoint(RenderStyle::initialGridAutoRepeatInsertionPoint())
    55     , autoRepeatRowsInsertionPoint(RenderStyle::initialGridAutoRepeatInsertionPoint())
    56     , autoRepeatColumnsType(RenderStyle::initialGridAutoRepeatType())
    57     , autoRepeatRowsType(RenderStyle::initialGridAutoRepeatType())
    58     , subgridRows(false)
    59     , subgridColumns(false)
     42    , m_gridColumns(RenderStyle::initialGridColumns())
     43    , m_gridRows(RenderStyle::initialGridRows())
     44    , m_namedGridColumnLines(RenderStyle::initialNamedGridColumnLines())
     45    , m_namedGridRowLines(RenderStyle::initialNamedGridRowLines())
     46    , m_orderedNamedGridColumnLines(RenderStyle::initialOrderedNamedGridColumnLines())
     47    , m_orderedNamedGridRowLines(RenderStyle::initialOrderedNamedGridRowLines())
     48    , m_autoRepeatNamedGridColumnLines(RenderStyle::initialNamedGridColumnLines())
     49    , m_autoRepeatNamedGridRowLines(RenderStyle::initialNamedGridRowLines())
     50    , m_autoRepeatOrderedNamedGridColumnLines(RenderStyle::initialOrderedNamedGridColumnLines())
     51    , m_autoRepeatOrderedNamedGridRowLines(RenderStyle::initialOrderedNamedGridRowLines())
     52    , m_gridAutoRepeatColumns(RenderStyle::initialGridAutoRepeatTracks())
     53    , m_gridAutoRepeatRows(RenderStyle::initialGridAutoRepeatTracks())
     54    , m_autoRepeatColumnsInsertionPoint(RenderStyle::initialGridAutoRepeatInsertionPoint())
     55    , m_autoRepeatRowsInsertionPoint(RenderStyle::initialGridAutoRepeatInsertionPoint())
     56    , m_autoRepeatColumnsType(RenderStyle::initialGridAutoRepeatType())
     57    , m_autoRepeatRowsType(RenderStyle::initialGridAutoRepeatType())
     58    , m_subgridRows(false)
     59    , m_subgridColumns(false)
    6060{
    6161}
     
    6363inline StyleGridData::StyleGridData(const StyleGridData& o)
    6464    : RefCounted<StyleGridData>()
    65     , gridColumns(o.gridColumns)
    66     , gridRows(o.gridRows)
    67     , namedGridColumnLines(o.namedGridColumnLines)
    68     , namedGridRowLines(o.namedGridRowLines)
    69     , orderedNamedGridColumnLines(o.orderedNamedGridColumnLines)
    70     , orderedNamedGridRowLines(o.orderedNamedGridRowLines)
    71     , autoRepeatNamedGridColumnLines(o.autoRepeatNamedGridColumnLines)
    72     , autoRepeatNamedGridRowLines(o.autoRepeatNamedGridRowLines)
    73     , autoRepeatOrderedNamedGridColumnLines(o.autoRepeatOrderedNamedGridColumnLines)
    74     , autoRepeatOrderedNamedGridRowLines(o.autoRepeatOrderedNamedGridRowLines)
    7565    , implicitNamedGridColumnLines(o.implicitNamedGridColumnLines)
    7666    , implicitNamedGridRowLines(o.implicitNamedGridRowLines)
     
    8171    , namedGridAreaRowCount(o.namedGridAreaRowCount)
    8272    , namedGridAreaColumnCount(o.namedGridAreaColumnCount)
    83     , gridAutoRepeatColumns(o.gridAutoRepeatColumns)
    84     , gridAutoRepeatRows(o.gridAutoRepeatRows)
    85     , autoRepeatColumnsInsertionPoint(o.autoRepeatColumnsInsertionPoint)
    86     , autoRepeatRowsInsertionPoint(o.autoRepeatRowsInsertionPoint)
    87     , autoRepeatColumnsType(o.autoRepeatColumnsType)
    88     , autoRepeatRowsType(o.autoRepeatRowsType)
    89     , subgridRows(o.subgridRows)
    90     , subgridColumns(o.subgridColumns)
    91 {
     73    , m_columns(o.m_columns)
     74    , m_rows(o.m_rows)
     75    , m_gridColumns(o.m_gridColumns)
     76    , m_gridRows(o.m_gridRows)
     77    , m_namedGridColumnLines(o.m_namedGridColumnLines)
     78    , m_namedGridRowLines(o.m_namedGridRowLines)
     79    , m_orderedNamedGridColumnLines(o.m_orderedNamedGridColumnLines)
     80    , m_orderedNamedGridRowLines(o.m_orderedNamedGridRowLines)
     81    , m_autoRepeatNamedGridColumnLines(o.m_autoRepeatNamedGridColumnLines)
     82    , m_autoRepeatNamedGridRowLines(o.m_autoRepeatNamedGridRowLines)
     83    , m_autoRepeatOrderedNamedGridColumnLines(o.m_autoRepeatOrderedNamedGridColumnLines)
     84    , m_autoRepeatOrderedNamedGridRowLines(o.m_autoRepeatOrderedNamedGridRowLines)
     85    , m_gridAutoRepeatColumns(o.m_gridAutoRepeatColumns)
     86    , m_gridAutoRepeatRows(o.m_gridAutoRepeatRows)
     87    , m_autoRepeatColumnsInsertionPoint(o.m_autoRepeatColumnsInsertionPoint)
     88    , m_autoRepeatRowsInsertionPoint(o.m_autoRepeatRowsInsertionPoint)
     89    , m_autoRepeatColumnsType(o.m_autoRepeatColumnsType)
     90    , m_autoRepeatRowsType(o.m_autoRepeatRowsType)
     91    , m_subgridRows(o.m_subgridRows)
     92    , m_subgridColumns(o.m_subgridColumns)
     93{
     94}
     95
     96void StyleGridData::setRows(const GridTrackList& list)
     97{
     98    m_rows = list;
     99    computeCachedTrackData(m_rows, m_gridRows, m_namedGridRowLines, m_orderedNamedGridRowLines, m_gridAutoRepeatRows, m_autoRepeatNamedGridRowLines, m_autoRepeatOrderedNamedGridRowLines, m_autoRepeatRowsInsertionPoint, m_autoRepeatRowsType, m_subgridRows);
     100}
     101
     102void StyleGridData::setColumns(const GridTrackList& list)
     103{
     104    m_columns = list;
     105    computeCachedTrackData(m_columns, m_gridColumns, m_namedGridColumnLines, m_orderedNamedGridColumnLines, m_gridAutoRepeatColumns, m_autoRepeatNamedGridColumnLines, m_autoRepeatOrderedNamedGridColumnLines, m_autoRepeatColumnsInsertionPoint, m_autoRepeatColumnsType, m_subgridColumns);
     106}
     107
     108static void createGridLineNamesList(const Vector<String>& names, unsigned currentNamedGridLine, NamedGridLinesMap& namedGridLines, OrderedNamedGridLinesMap& orderedNamedGridLines)
     109{
     110    auto orderedResult = orderedNamedGridLines.add(currentNamedGridLine, Vector<String>());
     111
     112    for (auto& name : names) {
     113        auto result = namedGridLines.add(name, Vector<unsigned>());
     114        result.iterator->value.append(currentNamedGridLine);
     115
     116        orderedResult.iterator->value.append(name);
     117    }
     118}
     119
     120void StyleGridData::computeCachedTrackData(const GridTrackList& list, Vector<GridTrackSize>& sizes, NamedGridLinesMap& namedLines, OrderedNamedGridLinesMap& orderedNamedLines, Vector<GridTrackSize>& autoRepeatSizes, NamedGridLinesMap& autoRepeatNamedLines, OrderedNamedGridLinesMap& autoRepeatOrderedNamedLines, unsigned& autoRepeatInsertionPoint, AutoRepeatType& autoRepeatType, bool& subgrid)
     121{
     122    sizes.clear();
     123    namedLines.clear();
     124    orderedNamedLines.clear();
     125    autoRepeatSizes.clear();
     126    autoRepeatNamedLines.clear();
     127    autoRepeatOrderedNamedLines.clear();
     128    autoRepeatInsertionPoint = RenderStyle::initialGridAutoRepeatInsertionPoint();
     129    autoRepeatType = RenderStyle::initialGridAutoRepeatType();
     130    subgrid = false;
     131
     132    if (list.isEmpty())
     133        return;
     134
     135    unsigned currentNamedGridLine = 0;
     136    unsigned autoRepeatIndex = 0;
     137    auto visitor = WTF::makeVisitor([&](const GridTrackSize& size) {
     138        ++currentNamedGridLine;
     139        sizes.append(size);
     140    }, [&](const Vector<String>& names) {
     141        createGridLineNamesList(names, currentNamedGridLine, namedLines, orderedNamedLines);
     142        // Subgrids only have line names defined, not track sizes, so we want our count
     143        // to be the number of lines named rather than number of sized tracks.
     144        if (subgrid)
     145            currentNamedGridLine++;
     146    }, [&](const GridTrackEntryRepeat& repeat) {
     147        for (size_t i = 0; i < repeat.repeats; ++i) {
     148            for (auto& repeatEntry : repeat.list) {
     149                if (std::holds_alternative<Vector<String>>(repeatEntry)) {
     150                    createGridLineNamesList(std::get<Vector<String>>(repeatEntry), currentNamedGridLine, namedLines, orderedNamedLines);
     151                    // Subgrids only have line names defined, not track sizes, so we want our count
     152                    // to be the number of lines named rather than number of sized tracks.
     153                    if (subgrid)
     154                        currentNamedGridLine++;
     155                } else {
     156                    ++currentNamedGridLine;
     157                    sizes.append(std::get<GridTrackSize>(repeatEntry));
     158                }
     159            }
     160        }
     161    }, [&](const GridTrackEntryAutoRepeat& repeat) {
     162        ASSERT(!autoRepeatIndex);
     163        autoRepeatIndex = 0;
     164        autoRepeatType = repeat.type;
     165        for (auto& autoRepeatEntry : repeat.list) {
     166            if (std::holds_alternative<Vector<String>>(autoRepeatEntry)) {
     167                createGridLineNamesList(std::get<Vector<String>>(autoRepeatEntry), autoRepeatIndex, autoRepeatNamedLines, autoRepeatOrderedNamedLines);
     168                if (subgrid)
     169                    ++autoRepeatIndex;
     170                continue;
     171            }
     172            ++autoRepeatIndex;
     173            autoRepeatSizes.append(std::get<GridTrackSize>(autoRepeatEntry));
     174        }
     175        autoRepeatInsertionPoint = currentNamedGridLine;
     176        if (!subgrid)
     177            currentNamedGridLine++;
     178    }, [&](const GridTrackEntrySubgrid&) {
     179        subgrid = true;
     180    });
     181
     182    for (const auto& entry : list)
     183        std::visit(visitor, entry);
     184
     185    // The parser should have rejected any <track-list> without any <track-size> as
     186    // this is not conformant to the syntax.
     187    ASSERT(!sizes.isEmpty() || !autoRepeatSizes.isEmpty() || subgrid);
     188}
     189
     190WTF::TextStream& operator<<(WTF::TextStream& ts, const RepeatEntry& entry)
     191{
     192    auto visitor = WTF::makeVisitor([&](const GridTrackSize& size) {
     193        ts << size;
     194    }, [&](const Vector<String>& names) {
     195        ts << names;
     196    });
     197
     198    std::visit(visitor, entry);
     199    return ts;
     200}
     201
     202WTF::TextStream& operator<<(WTF::TextStream& ts, const GridTrackEntry& entry)
     203{
     204    auto visitor = WTF::makeVisitor([&](const GridTrackSize& size) {
     205        ts << size;
     206    }, [&](const Vector<String>& names) {
     207        ts << names;
     208    }, [&](const GridTrackEntryRepeat& repeat) {
     209        ts << "repeat(" << repeat.repeats << ", " << repeat.list << ")";
     210    }, [&](const GridTrackEntryAutoRepeat& repeat) {
     211        ts << "repeat(" << repeat.type << ", " << repeat.list << ")";
     212    }, [&](const GridTrackEntrySubgrid&) {
     213        ts << "subgrid";
     214    });
     215
     216    std::visit(visitor, entry);
     217    return ts;
    92218}
    93219
  • trunk/Source/WebCore/rendering/style/StyleGridData.h

    r289722 r291956  
    2929#include "GridTrackSize.h"
    3030#include "RenderStyleConstants.h"
     31#include <variant>
    3132#include <wtf/Ref.h>
    3233#include <wtf/RefCounted.h>
    3334#include <wtf/Vector.h>
     35#include <wtf/text/TextStream.h>
    3436#include <wtf/text/WTFString.h>
    3537
     
    3840typedef HashMap<String, Vector<unsigned>> NamedGridLinesMap;
    3941typedef HashMap<unsigned, Vector<String>, IntHash<unsigned>, WTF::UnsignedWithZeroKeyHashTraits<unsigned>> OrderedNamedGridLinesMap;
     42
     43typedef std::variant<GridTrackSize, Vector<String>> RepeatEntry;
     44typedef Vector<RepeatEntry> RepeatTrackList;
     45
     46struct GridTrackEntrySubgrid {
     47    bool operator==(const GridTrackEntrySubgrid&) const = default;
     48};
     49struct GridTrackEntryRepeat {
     50    bool operator==(const GridTrackEntryRepeat&) const = default;
     51
     52    unsigned repeats;
     53    RepeatTrackList list;
     54};
     55struct GridTrackEntryAutoRepeat {
     56    bool operator==(const GridTrackEntryAutoRepeat&) const = default;
     57
     58    AutoRepeatType type;
     59    RepeatTrackList list;
     60};
     61typedef std::variant<GridTrackSize, Vector<String>, GridTrackEntryRepeat, GridTrackEntryAutoRepeat, GridTrackEntrySubgrid> GridTrackEntry;
     62typedef Vector<GridTrackEntry> GridTrackList;
     63
     64WTF::TextStream& operator<<(WTF::TextStream&, const RepeatEntry& item);
     65WTF::TextStream& operator<<(WTF::TextStream&, const GridTrackEntry& item);
    4066
    4167class StyleGridData : public RefCounted<StyleGridData> {
     
    4672    bool operator==(const StyleGridData& o) const
    4773    {
    48         // FIXME: comparing two hashes doesn't look great for performance. Something to keep in mind going forward.
    49         return gridColumns == o.gridColumns && gridRows == o.gridRows
    50             && gridAutoFlow == o.gridAutoFlow && gridAutoRows == o.gridAutoRows && gridAutoColumns == o.gridAutoColumns
    51             && namedGridColumnLines == o.namedGridColumnLines && namedGridRowLines == o.namedGridRowLines
    52             && autoRepeatNamedGridColumnLines == o.autoRepeatNamedGridColumnLines && autoRepeatNamedGridRowLines == o.autoRepeatNamedGridRowLines
    53             && autoRepeatOrderedNamedGridColumnLines == o.autoRepeatOrderedNamedGridColumnLines && autoRepeatOrderedNamedGridRowLines == o.autoRepeatOrderedNamedGridRowLines
    54             && implicitNamedGridColumnLines == o.implicitNamedGridColumnLines && implicitNamedGridRowLines == o.implicitNamedGridRowLines
    55             && namedGridArea == o.namedGridArea && namedGridArea == o.namedGridArea
    56             && namedGridAreaRowCount == o.namedGridAreaRowCount && namedGridAreaColumnCount == o.namedGridAreaColumnCount
    57             && orderedNamedGridRowLines == o.orderedNamedGridRowLines && orderedNamedGridColumnLines == o.orderedNamedGridColumnLines
    58             && gridAutoRepeatColumns == o.gridAutoRepeatColumns && gridAutoRepeatRows == o.gridAutoRepeatRows
    59             && autoRepeatColumnsInsertionPoint == o.autoRepeatColumnsInsertionPoint && autoRepeatRowsInsertionPoint == o.autoRepeatRowsInsertionPoint
    60             && autoRepeatColumnsType == o.autoRepeatColumnsType && autoRepeatRowsType == o.autoRepeatRowsType && subgridRows == o.subgridRows
    61             && subgridColumns == o.subgridColumns;
     74        return columns() == o.columns() && rows() == o.rows() && implicitNamedGridColumnLines == o.implicitNamedGridColumnLines && implicitNamedGridRowLines == o.implicitNamedGridRowLines && gridAutoFlow == o.gridAutoFlow && gridAutoRows == o.gridAutoRows && gridAutoColumns == o.gridAutoColumns && namedGridArea == o.namedGridArea && namedGridAreaRowCount == o.namedGridAreaRowCount && namedGridAreaColumnCount == o.namedGridAreaColumnCount;
    6275    }
    6376
     
    6780    }
    6881
    69     Vector<GridTrackSize> gridColumns;
    70     Vector<GridTrackSize> gridRows;
     82    void setRows(const GridTrackList&);
     83    void setColumns(const GridTrackList&);
    7184
    72     NamedGridLinesMap namedGridColumnLines;
    73     NamedGridLinesMap namedGridRowLines;
     85    const Vector<GridTrackSize>& gridColumns() const { return m_gridColumns; }
     86    const Vector<GridTrackSize>& gridRows() const { return m_gridRows; }
    7487
    75     OrderedNamedGridLinesMap orderedNamedGridColumnLines;
    76     OrderedNamedGridLinesMap orderedNamedGridRowLines;
     88    const NamedGridLinesMap& namedGridColumnLines() const { return m_namedGridColumnLines; };
     89    const NamedGridLinesMap& namedGridRowLines() const { return m_namedGridRowLines; };
    7790
    78     NamedGridLinesMap autoRepeatNamedGridColumnLines;
    79     NamedGridLinesMap autoRepeatNamedGridRowLines;
    80     OrderedNamedGridLinesMap autoRepeatOrderedNamedGridColumnLines;
    81     OrderedNamedGridLinesMap autoRepeatOrderedNamedGridRowLines;
     91    const OrderedNamedGridLinesMap& orderedNamedGridColumnLines() const { return m_orderedNamedGridColumnLines; }
     92    const OrderedNamedGridLinesMap& orderedNamedGridRowLines() const { return m_orderedNamedGridRowLines; }
     93
     94    const NamedGridLinesMap& autoRepeatNamedGridColumnLines() const { return m_autoRepeatNamedGridColumnLines; }
     95    const NamedGridLinesMap& autoRepeatNamedGridRowLines() const { return m_autoRepeatNamedGridRowLines; }
     96    const OrderedNamedGridLinesMap& autoRepeatOrderedNamedGridColumnLines() const { return m_autoRepeatOrderedNamedGridColumnLines; }
     97    const OrderedNamedGridLinesMap& autoRepeatOrderedNamedGridRowLines() const { return m_autoRepeatOrderedNamedGridRowLines; }
     98
     99    const Vector<GridTrackSize>& gridAutoRepeatColumns() const { return m_gridAutoRepeatColumns; }
     100    const Vector<GridTrackSize>& gridAutoRepeatRows() const { return m_gridAutoRepeatRows; }
     101
     102    const unsigned& autoRepeatColumnsInsertionPoint() const { return m_autoRepeatColumnsInsertionPoint; }
     103    const unsigned& autoRepeatRowsInsertionPoint() const { return m_autoRepeatRowsInsertionPoint; }
     104
     105    const AutoRepeatType& autoRepeatColumnsType() const { return m_autoRepeatColumnsType; }
     106    const AutoRepeatType& autoRepeatRowsType() const { return m_autoRepeatRowsType; }
     107
     108    const bool& subgridRows() const { return m_subgridRows; };
     109    const bool& subgridColumns() const { return m_subgridColumns; }
     110
     111    const GridTrackList& columns() const { return m_columns; };
     112    const GridTrackList& rows() const { return m_rows; };
    82113
    83114    NamedGridLinesMap implicitNamedGridColumnLines;
     
    95126    unsigned namedGridAreaColumnCount;
    96127
    97     Vector<GridTrackSize> gridAutoRepeatColumns;
    98     Vector<GridTrackSize> gridAutoRepeatRows;
     128private:
    99129
    100     unsigned autoRepeatColumnsInsertionPoint;
    101     unsigned autoRepeatRowsInsertionPoint;
     130    void computeCachedTrackData(const GridTrackList&, Vector<GridTrackSize>& sizes, NamedGridLinesMap& namedLines, OrderedNamedGridLinesMap& orderedNamedLines, Vector<GridTrackSize>& autoRepeatSizes, NamedGridLinesMap& autoRepeatNamedLines, OrderedNamedGridLinesMap& autoRepeatOrderedNamedLines, unsigned& autoRepeatInsertionPoint, AutoRepeatType&, bool& subgrid);
    102131
    103     AutoRepeatType autoRepeatColumnsType;
    104     AutoRepeatType autoRepeatRowsType;
     132    GridTrackList m_columns;
     133    GridTrackList m_rows;
    105134
    106     bool subgridRows;
    107     bool subgridColumns;
     135    // Cached data computed from m_colmns/rows;
     136    Vector<GridTrackSize> m_gridColumns;
     137    Vector<GridTrackSize> m_gridRows;
    108138
    109 private:
     139    NamedGridLinesMap m_namedGridColumnLines;
     140    NamedGridLinesMap m_namedGridRowLines;
     141
     142    OrderedNamedGridLinesMap m_orderedNamedGridColumnLines;
     143    OrderedNamedGridLinesMap m_orderedNamedGridRowLines;
     144
     145    NamedGridLinesMap m_autoRepeatNamedGridColumnLines;
     146    NamedGridLinesMap m_autoRepeatNamedGridRowLines;
     147    OrderedNamedGridLinesMap m_autoRepeatOrderedNamedGridColumnLines;
     148    OrderedNamedGridLinesMap m_autoRepeatOrderedNamedGridRowLines;
     149
     150    Vector<GridTrackSize> m_gridAutoRepeatColumns;
     151    Vector<GridTrackSize> m_gridAutoRepeatRows;
     152
     153    unsigned m_autoRepeatColumnsInsertionPoint;
     154    unsigned m_autoRepeatRowsInsertionPoint;
     155
     156    AutoRepeatType m_autoRepeatColumnsType;
     157    AutoRepeatType m_autoRepeatRowsType;
     158
     159    bool m_subgridRows;
     160    bool m_subgridColumns;
     161
    110162    StyleGridData();
    111163    StyleGridData(const StyleGridData&);
     
    113165
    114166} // namespace WebCore
     167
  • trunk/Source/WebCore/style/StyleBuilderConverter.h

    r291398 r291956  
    5959#include "Settings.h"
    6060#include "StyleBuilderState.h"
     61#include "StyleGridData.h"
    6162#include "StyleScrollSnapPoints.h"
    6263#include "TabSize.h"
     
    192193    static GridLength createGridTrackBreadth(const CSSPrimitiveValue&, BuilderState&);
    193194    static GridTrackSize createGridTrackSize(const CSSValue&, BuilderState&);
    194     struct TracksData;
    195     static bool createGridTrackList(const CSSValue&, TracksData&, BuilderState&);
     195    static bool createGridTrackList(const CSSValue&, GridTrackList&, BuilderState&);
    196196    static bool createGridPosition(const CSSValue&, GridPosition&);
    197197    static void createImplicitNamedGridLinesFromGridArea(const NamedGridAreaMap&, NamedGridLinesMap&, GridTrackSizingDirection);
     
    980980}
    981981
    982 static void createGridLineNamesList(const CSSValue& value, unsigned currentNamedGridLine, NamedGridLinesMap& namedGridLines, OrderedNamedGridLinesMap& orderedNamedGridLines)
    983 {
    984     ASSERT(value.isGridLineNamesValue());
    985     auto orderedResult = orderedNamedGridLines.add(currentNamedGridLine, Vector<String>());
    986 
    987     for (auto& namedGridLineValue : downcast<CSSGridLineNamesValue>(value)) {
    988         String namedGridLine = downcast<CSSPrimitiveValue>(namedGridLineValue.get()).stringValue();
    989         auto result = namedGridLines.add(namedGridLine, Vector<unsigned>());
    990         result.iterator->value.append(currentNamedGridLine);
    991 
    992         orderedResult.iterator->value.append(namedGridLine);
    993     }
    994 }
    995 
    996 struct BuilderConverter::TracksData {
    997     WTF_MAKE_NONCOPYABLE(TracksData); WTF_MAKE_FAST_ALLOCATED;
    998 public:
    999     TracksData() = default;
    1000 
    1001     Vector<GridTrackSize> m_trackSizes;
    1002     NamedGridLinesMap m_namedGridLines;
    1003     OrderedNamedGridLinesMap m_orderedNamedGridLines;
    1004     Vector<GridTrackSize> m_autoRepeatTrackSizes;
    1005     NamedGridLinesMap m_autoRepeatNamedGridLines;
    1006     OrderedNamedGridLinesMap m_autoRepeatOrderedNamedGridLines;
    1007     unsigned m_autoRepeatInsertionPoint { RenderStyle::initialGridAutoRepeatInsertionPoint() };
    1008     AutoRepeatType m_autoRepeatType { RenderStyle::initialGridAutoRepeatType() };
    1009     bool isSubgrid { false };
    1010 };
    1011 
    1012 inline bool BuilderConverter::createGridTrackList(const CSSValue& value, TracksData& tracksData, BuilderState& builderState)
     982inline bool BuilderConverter::createGridTrackList(const CSSValue& value, GridTrackList& trackList, BuilderState& builderState)
    1013983{
    1014984    // Handle 'none'.
     
    1019989        return false;
    1020990
    1021     unsigned currentNamedGridLine = 0;
    1022     auto handleLineNameOrTrackSize = [&](const CSSValue& currentValue) {
    1023         if (is<CSSGridLineNamesValue>(currentValue)) {
    1024             createGridLineNamesList(currentValue, currentNamedGridLine, tracksData.m_namedGridLines, tracksData.m_orderedNamedGridLines);
    1025             // Subgrids only have line names defined, not track sizes, so we want our count
    1026             // to be the number of lines named rather than number of sized tracks.
    1027             if (tracksData.isSubgrid)
    1028                 currentNamedGridLine++;
    1029         } else {
    1030             ++currentNamedGridLine;
    1031             tracksData.m_trackSizes.append(createGridTrackSize(currentValue, builderState));
     991    if (is<CSSSubgridValue>(value))
     992        trackList.append(GridTrackEntrySubgrid());
     993
     994    auto buildRepeatList = [&](const CSSValue& repeatValue, RepeatTrackList& repeatList) {
     995        for (auto& currentValue : downcast<CSSValueList>(repeatValue)) {
     996            if (is<CSSGridLineNamesValue>(currentValue)) {
     997                Vector<String> names;
     998                for (auto& namedGridLineValue : downcast<CSSGridLineNamesValue>(currentValue.get()))
     999                    names.append(downcast<CSSPrimitiveValue>(namedGridLineValue.get()).stringValue());
     1000                repeatList.append(WTFMove(names));
     1001            } else
     1002                repeatList.append(createGridTrackSize(currentValue, builderState));
    10321003        }
    10331004    };
    10341005
    1035     if (is<CSSSubgridValue>(value))
    1036         tracksData.isSubgrid = true;
    1037 
    1038     unsigned autoRepeatIndex = 0;
     1006    // FIXME: Ensure we always have a line name set at the start and end, unless we're
     1007    // subgrid, since this is the canonical represented of the computed value.
     1008    // Make sure code reading this handles empty line name sets.
     1009
    10391010    for (auto& currentValue : downcast<CSSValueList>(value)) {
    10401011        if (is<CSSGridAutoRepeatValue>(currentValue)) {
    1041             ASSERT(!autoRepeatIndex);
    1042             autoRepeatIndex = 0;
    10431012            CSSValueID autoRepeatID = downcast<CSSGridAutoRepeatValue>(currentValue.get()).autoRepeatID();
    10441013            ASSERT(autoRepeatID == CSSValueAutoFill || autoRepeatID == CSSValueAutoFit);
    1045             tracksData.m_autoRepeatType = autoRepeatID == CSSValueAutoFill ? AutoRepeatType::Fill : AutoRepeatType::Fit;
    1046             for (auto& autoRepeatValue : downcast<CSSValueList>(currentValue.get())) {
    1047                 if (is<CSSGridLineNamesValue>(autoRepeatValue)) {
    1048                     createGridLineNamesList(autoRepeatValue.get(), autoRepeatIndex, tracksData.m_autoRepeatNamedGridLines, tracksData.m_autoRepeatOrderedNamedGridLines);
    1049                     if (tracksData.isSubgrid)
    1050                         ++autoRepeatIndex;
    1051                     continue;
    1052                 }
    1053                 ++autoRepeatIndex;
    1054                 tracksData.m_autoRepeatTrackSizes.append(createGridTrackSize(autoRepeatValue.get(), builderState));
     1014
     1015            GridTrackEntryAutoRepeat repeat;
     1016            repeat.type = autoRepeatID == CSSValueAutoFill ? AutoRepeatType::Fill : AutoRepeatType::Fit;
     1017
     1018            buildRepeatList(currentValue, repeat.list);
     1019            trackList.append(WTFMove(repeat));
     1020        } else if (is<CSSGridIntegerRepeatValue>(currentValue)) {
     1021            GridTrackEntryRepeat repeat;
     1022            repeat.repeats = downcast<CSSGridIntegerRepeatValue>(currentValue.get()).repetitions();
     1023
     1024            buildRepeatList(currentValue, repeat.list);
     1025            trackList.append(WTFMove(repeat));
     1026        } else if (is<CSSGridLineNamesValue>(currentValue)) {
     1027            Vector<String> names;
     1028            for (auto& namedGridLineValue : downcast<CSSGridLineNamesValue>(currentValue.get())) {
     1029                names.append(downcast<CSSPrimitiveValue>(namedGridLineValue.get()).stringValue());
    10551030            }
    1056             tracksData.m_autoRepeatInsertionPoint = currentNamedGridLine;
    1057             if (!tracksData.isSubgrid)
    1058                 currentNamedGridLine++;
    1059             continue;
     1031            trackList.append(WTFMove(names));
     1032        } else {
     1033            trackList.append(createGridTrackSize(currentValue, builderState));
    10601034        }
    1061 
    1062         if (is<CSSGridIntegerRepeatValue>(currentValue)) {
    1063             size_t repetitions = downcast<CSSGridIntegerRepeatValue>(currentValue.get()).repetitions();
    1064             for (size_t i = 0; i < repetitions; ++i) {
    1065                 for (auto& integerRepeatValue : downcast<CSSValueList>(currentValue.get()))
    1066                     handleLineNameOrTrackSize(integerRepeatValue);
    1067             }
    1068             continue;
    1069         }
    1070 
    1071         handleLineNameOrTrackSize(currentValue);
    1072     }
    1073 
    1074     // The parser should have rejected any <track-list> without any <track-size> as
    1075     // this is not conformant to the syntax.
    1076     ASSERT(!tracksData.m_trackSizes.isEmpty() || !tracksData.m_autoRepeatTrackSizes.isEmpty() || tracksData.isSubgrid);
     1035    }
     1036
    10771037    return true;
    10781038}
  • trunk/Source/WebCore/style/StyleBuilderCustom.h

    r291536 r291956  
    19251925}
    19261926
    1927 #define SET_TRACKS_DATA_INTERNAL(tracksData, style, parentStyle, TrackType) \
    1928     ASSERT(tracksData || parentStyle); \
    1929     style.setGrid##TrackType##s(tracksData ? tracksData->m_trackSizes : parentStyle->grid##TrackType##s()); \
    1930     style.setNamedGrid##TrackType##Lines(tracksData ? tracksData->m_namedGridLines : parentStyle->namedGrid##TrackType##Lines()); \
    1931     style.setOrderedNamedGrid##TrackType##Lines(tracksData ? tracksData->m_orderedNamedGridLines : parentStyle->orderedNamedGrid##TrackType##Lines()); \
    1932     style.setGridAutoRepeat##TrackType##s(tracksData ? tracksData->m_autoRepeatTrackSizes : parentStyle->gridAutoRepeat##TrackType##s()); \
    1933     style.setGridAutoRepeat##TrackType##sInsertionPoint(tracksData ? tracksData->m_autoRepeatInsertionPoint : parentStyle->gridAutoRepeat##TrackType##sInsertionPoint()); \
    1934     style.setAutoRepeatNamedGrid##TrackType##Lines(tracksData ? tracksData->m_autoRepeatNamedGridLines : parentStyle->autoRepeatNamedGrid##TrackType##Lines()); \
    1935     style.setAutoRepeatOrderedNamedGrid##TrackType##Lines(tracksData ? tracksData->m_autoRepeatOrderedNamedGridLines : parentStyle->autoRepeatOrderedNamedGrid##TrackType##Lines()); \
    1936     style.setGridAutoRepeat##TrackType##sType(tracksData ? tracksData->m_autoRepeatType : parentStyle->gridAutoRepeat##TrackType##sType()); \
    1937     style.setGridSubgrid##TrackType##s(tracksData ? tracksData->isSubgrid : parentStyle->gridSubgrid##TrackType##s());
     1927#define SET_TRACKS_DATA_INTERNAL(trackList, style, parentStyle, TrackType) \
     1928    ASSERT(trackList || parentStyle); \
     1929    style.setGrid##TrackType##List(trackList ? *trackList : parentStyle->grid##TrackType##List()); \
    19381930
    19391931#define SET_INHERIT_TRACKS_DATA(style, parentStyle, TrackType) \
    1940     BuilderConverter::TracksData* tracksData = nullptr; \
     1932    GridTrackList* trackList = nullptr; \
    19411933    const RenderStyle* parentStylePointer = &parentStyle; \
    1942     SET_TRACKS_DATA_INTERNAL(tracksData, style, parentStylePointer, TrackType)
    1943 
    1944 #define SET_TRACKS_DATA(tracksData, style, TrackType) \
    1945     BuilderConverter::TracksData* tracksDataPointer = &tracksData; \
     1934    SET_TRACKS_DATA_INTERNAL(trackList, style, parentStylePointer, TrackType)
     1935
     1936#define SET_TRACKS_DATA(trackList, style, TrackType) \
     1937    GridTrackList* trackListPointer = &trackList; \
    19461938    const RenderStyle* parentStyle = nullptr; \
    1947     SET_TRACKS_DATA_INTERNAL(tracksDataPointer, style, parentStyle, TrackType)
     1939    SET_TRACKS_DATA_INTERNAL(trackListPointer, style, parentStyle, TrackType)
    19481940
    19491941inline void BuilderCustom::applyInitialGridTemplateColumns(BuilderState& builderState)
    19501942{
    1951     BuilderConverter::TracksData initialTracksData;
    1952     SET_TRACKS_DATA(initialTracksData, builderState.style(), Column);
     1943    GridTrackList initialTrackList;
     1944    SET_TRACKS_DATA(initialTrackList, builderState.style(), Column);
    19531945}
    19541946
     
    19601952inline void BuilderCustom::applyValueGridTemplateColumns(BuilderState& builderState, CSSValue& value)
    19611953{
    1962     BuilderConverter::TracksData tracksData;
    1963     if (!BuilderConverter::createGridTrackList(value, tracksData, builderState))
    1964         return;
    1965     SET_TRACKS_DATA(tracksData, builderState.style(), Column);
     1954    GridTrackList trackList;
     1955    if (!BuilderConverter::createGridTrackList(value, trackList, builderState))
     1956        return;
     1957    SET_TRACKS_DATA(trackList, builderState.style(), Column);
    19661958}
    19671959
    19681960inline void BuilderCustom::applyInitialGridTemplateRows(BuilderState& builderState)
    19691961{
    1970     BuilderConverter::TracksData initialTracksData;
    1971     SET_TRACKS_DATA(initialTracksData, builderState.style(), Row);
     1962    GridTrackList initialTrackList;
     1963    SET_TRACKS_DATA(initialTrackList, builderState.style(), Row);
    19721964}
    19731965
     
    19791971inline void BuilderCustom::applyValueGridTemplateRows(BuilderState& builderState, CSSValue& value)
    19801972{
    1981     BuilderConverter::TracksData tracksData;
    1982     if (!BuilderConverter::createGridTrackList(value, tracksData, builderState))
    1983         return;
    1984 
    1985     SET_TRACKS_DATA(tracksData, builderState.style(), Row);
     1973    GridTrackList trackList;
     1974    if (!BuilderConverter::createGridTrackList(value, trackList, builderState))
     1975        return;
     1976
     1977    SET_TRACKS_DATA(trackList, builderState.style(), Row);
    19861978}
    19871979
Note: See TracChangeset for help on using the changeset viewer.