Changeset 291956 in webkit
- Timestamp:
- Mar 27, 2022 9:18:05 PM (4 months ago)
- Location:
- trunk
- Files:
-
- 18 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/css-grid-layout/grid-repeat-calc-expected.txt (modified) (1 diff)
-
LayoutTests/fast/css-grid-layout/grid-repeat-calc.html (modified) (1 diff)
-
LayoutTests/fast/css-grid-layout/non-grid-element-repeat-get-set-expected.txt (modified) (1 diff)
-
LayoutTests/fast/css-grid-layout/non-grid-element-repeat-get-set.html (modified) (1 diff)
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-grid/animation/grid-template-columns-interpolation-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-grid/animation/grid-template-rows-interpolation-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-columns-computed-nogrid-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-rows-computed-nogrid-expected.txt (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/animation/CSSPropertyAnimation.cpp (modified) (3 diffs)
-
Source/WebCore/css/CSSComputedStyleDeclaration.cpp (modified) (9 diffs)
-
Source/WebCore/rendering/style/RenderStyle.h (modified) (4 diffs)
-
Source/WebCore/rendering/style/StyleGridData.cpp (modified) (4 diffs)
-
Source/WebCore/rendering/style/StyleGridData.h (modified) (6 diffs)
-
Source/WebCore/style/StyleBuilderConverter.h (modified) (4 diffs)
-
Source/WebCore/style/StyleBuilderCustom.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r291953 r291956 1 2022-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 1 15 2022-03-27 Matt Woodrow <mattwoodrow@apple.com> 2 16 -
trunk/LayoutTests/fast/css-grid-layout/grid-repeat-calc-expected.txt
r245798 r291956 7 7 testDiv.style['grid-template-rows'] = 'repeat(calc(1 + 1), 18px)' 8 8 PASS testDiv.style['grid-template-rows'] is "repeat(2, 18px)" 9 PASS window.getComputedStyle(testDiv).getPropertyValue('grid-template-rows') is " 18px 18px"9 PASS window.getComputedStyle(testDiv).getPropertyValue('grid-template-rows') is "repeat(2, 18px)" 10 10 PASS successfullyParsed is true 11 11 -
trunk/LayoutTests/fast/css-grid-layout/grid-repeat-calc.html
r245798 r291956 12 12 evalAndLog("testDiv.style['grid-template-rows'] = 'repeat(calc(1 + 1), 18px)'"); 13 13 shouldBeEqualToString("testDiv.style['grid-template-rows']", "repeat(2, 18px)"); 14 shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('grid-template-rows')", " 18px 18px");14 shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('grid-template-rows')", "repeat(2, 18px)"); 15 15 16 16 </script> -
trunk/LayoutTests/fast/css-grid-layout/non-grid-element-repeat-get-set-expected.txt
r200510 r291956 5 5 6 6 Test 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 250px15% [last]"24 PASS window.getComputedStyle(mixNonRepeatAfterRepeat, '').getPropertyValue('grid-template-rows') is " 10px 10px[end] auto"7 PASS window.getComputedStyle(singleSingleTrackRepeat, '').getPropertyValue('grid-template-columns') is "repeat(1, 15%)" 8 PASS window.getComputedStyle(singleSingleTrackRepeat, '').getPropertyValue('grid-template-rows') is "repeat(1, 18px)" 9 PASS window.getComputedStyle(twoSingleTrackRepeat, '').getPropertyValue('grid-template-columns') is "repeat(2, minmax(15px, 50%))" 10 PASS window.getComputedStyle(twoSingleTrackRepeat, '').getPropertyValue('grid-template-rows') is "repeat(2, auto)" 11 PASS window.getComputedStyle(twoDoubleTrackRepeat, '').getPropertyValue('grid-template-columns') is "repeat(2, auto minmax(100px, 120px))" 12 PASS window.getComputedStyle(twoDoubleTrackRepeat, '').getPropertyValue('grid-template-rows') is "repeat(2, minmax(5px, 10px) auto)" 13 PASS window.getComputedStyle(twoDoubleTrackWithNamedGridLineRepeat, '').getPropertyValue('grid-template-columns') is "repeat(2, auto [middle] 250px [end])" 14 PASS window.getComputedStyle(twoDoubleTrackWithNamedGridLineRepeat, '').getPropertyValue('grid-template-rows') is "repeat(2, 10px [start] auto [end])" 15 PASS window.getComputedStyle(twoDoubleTrackWithTrailingNamedGridLineRepeat, '').getPropertyValue('grid-template-columns') is "repeat(2, [before] auto)" 16 PASS window.getComputedStyle(twoDoubleTrackWithTrailingNamedGridLineRepeat, '').getPropertyValue('grid-template-rows') is "repeat(2, [before] 10px)" 17 PASS window.getComputedStyle(trailingNamedGridLineRepeat, '').getPropertyValue('grid-template-columns') is "repeat(1, 250px) [end]" 18 PASS window.getComputedStyle(trailingNamedGridLineRepeat, '').getPropertyValue('grid-template-rows') is "repeat(1, 10px) [end]" 19 PASS window.getComputedStyle(leadingNamedGridLineRepeat, '').getPropertyValue('grid-template-columns') is "[start] repeat(2, 250px)" 20 PASS window.getComputedStyle(leadingNamedGridLineRepeat, '').getPropertyValue('grid-template-rows') is "[start] repeat(2, 10px)" 21 PASS window.getComputedStyle(mixRepeatAfterNonRepeat, '').getPropertyValue('grid-template-columns') is "[start] 140px repeat(2, 250px)" 22 PASS window.getComputedStyle(mixRepeatAfterNonRepeat, '').getPropertyValue('grid-template-rows') is "auto repeat(2, 10px)" 23 PASS window.getComputedStyle(mixNonRepeatAfterRepeat, '').getPropertyValue('grid-template-columns') is "repeat(2, 250px) 15% [last]" 24 PASS window.getComputedStyle(mixNonRepeatAfterRepeat, '').getPropertyValue('grid-template-rows') is "repeat(2, 10px) [end] auto" 25 25 26 26 Test invalid repeat syntax. -
trunk/LayoutTests/fast/css-grid-layout/non-grid-element-repeat-get-set.html
r200510 r291956 67 67 68 68 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"); 78 78 79 79 debug(""); -
trunk/LayoutTests/imported/w3c/ChangeLog
r291955 r291956 1 2022-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 1 16 2022-03-27 Matt Woodrow <mattwoodrow@apple.com> 2 17 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/animation/grid-template-columns-interpolation-expected.txt
r278173 r291956 340 340 PASS Web Animations: property <grid-template-columns> from [repeat(2, 2fr 30px)] to [repeat(4, 40px)] at (1) should be [repeat(4, 40px)] 341 341 PASS 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 40px2fr "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 40px2fr "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 40px2fr "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 40px2fr "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 repeat ( 2 , 1fr auto 20px ) 0fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 2fr auto 30px ) 1fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr " 346 346 PASS 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 40px2fr "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 40px2fr "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 40px2fr "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 40px2fr "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 40px2fr "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 repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 1fr auto 20px ) 0fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 2fr auto 30px ) 1fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr " 352 352 PASS 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 40px2fr "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 30px1fr "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 repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 1fr auto 20px ) 0fr " but got "1fr repeat ( 2 , 2fr auto 30px ) 1fr " 355 355 PASS 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 30px1fr "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 40px2fr "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 repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "1fr repeat ( 2 , 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 repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr " 358 358 PASS 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 40px2fr "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 30px1fr "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 repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 1fr auto 20px ) 0fr " but got "1fr repeat ( 2 , 2fr auto 30px ) 1fr " 361 361 PASS 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 30px1fr "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 40px2fr "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 repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "1fr repeat ( 2 , 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 repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr " 364 364 PASS 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 40px2fr "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 repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr " 366 366 PASS 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))] 367 367 PASS 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 340 340 PASS Web Animations: property <grid-template-rows> from [repeat(2, 2fr 30px)] to [repeat(4, 40px)] at (1) should be [repeat(4, 40px)] 341 341 PASS 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 40px2fr "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 40px2fr "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 40px2fr "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 40px2fr "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 repeat ( 2 , 1fr auto 20px ) 0fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 2fr auto 30px ) 1fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr " 346 346 PASS 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 40px2fr "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 40px2fr "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 40px2fr "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 40px2fr "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 40px2fr "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 repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 1fr auto 20px ) 0fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 2fr auto 30px ) 1fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr " 352 352 PASS 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 40px2fr "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 30px1fr "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 repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 1fr auto 20px ) 0fr " but got "1fr repeat ( 2 , 2fr auto 30px ) 1fr " 355 355 PASS 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 30px1fr "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 40px2fr "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 repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "1fr repeat ( 2 , 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 repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr " 358 358 PASS 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 40px2fr "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 30px1fr "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 repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 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 repeat ( 2 , 1fr auto 20px ) 0fr " but got "1fr repeat ( 2 , 2fr auto 30px ) 1fr " 361 361 PASS 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 30px1fr "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 40px2fr "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 repeat ( 2 , 2.4fr auto 34px ) 1.4fr " but got "1fr repeat ( 2 , 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 repeat ( 2 , 2.6fr 30px 36px ) 1.6fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr " 364 364 PASS 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 40px2fr "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 repeat ( 2 , 4fr 30px 50px ) 3fr " but got "2fr repeat ( 2 , 3fr 30px 40px ) 2fr " 366 366 PASS 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))] 367 367 PASS 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 6 6 PASS Property grid-template-columns value '[a] 1px' 7 7 PASS 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" 8 PASS Property grid-template-columns value '1px repeat(1, 2px) 3px' 9 9 PASS Property grid-template-columns value '1px repeat(auto-fill, 2px) 3px' 10 10 PASS 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" 11 PASS Property grid-template-columns value '1px [a] repeat(1, 2px 3px) [b] 4px' 12 12 PASS Property grid-template-columns value '1px [a] repeat(auto-fill, 2px 3px) [b] 4px' 13 13 PASS 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" 14 PASS Property grid-template-columns value '1px [a] repeat(1, [b] 2px [c]) [d] 3px' 15 15 PASS Property grid-template-columns value '1px [a] repeat(auto-fill, [b] 2px [c]) [d] 3px' 16 16 PASS 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]" 17 PASS Property grid-template-columns value '[a] 1px repeat(1, 2px [b] 3px) 4px [d]' 18 18 PASS Property grid-template-columns value '[a] 1px repeat(auto-fill, 2px [b] 3px) 4px [d]' 19 19 PASS 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%" 20 PASS Property grid-template-rows value '100% [a] repeat(1, [b] 200% [c]) [d] 300%' 21 21 PASS Property grid-template-rows value '100% [a] repeat(auto-fill, [b] 200% [c]) [d] 300%' 22 22 PASS 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]" 23 PASS Property grid-template-columns value '[a] 1em repeat(1, 2em [b] 3em) 4em [d]' 24 24 PASS Property grid-template-columns value '[a] 1em repeat(auto-fill, 2em [b] 3em) 4em [d]' 25 25 PASS 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 6 6 PASS Property grid-template-rows value '[a] 1px' 7 7 PASS 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" 8 PASS Property grid-template-rows value '1px repeat(1, 2px) 3px' 9 9 PASS Property grid-template-rows value '1px repeat(auto-fill, 2px) 3px' 10 10 PASS 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" 11 PASS Property grid-template-rows value '1px [a] repeat(1, 2px 3px) [b] 4px' 12 12 PASS Property grid-template-rows value '1px [a] repeat(auto-fill, 2px 3px) [b] 4px' 13 13 PASS 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" 14 PASS Property grid-template-rows value '1px [a] repeat(1, [b] 2px [c]) [d] 3px' 15 15 PASS Property grid-template-rows value '1px [a] repeat(auto-fill, [b] 2px [c]) [d] 3px' 16 16 PASS 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]" 17 PASS Property grid-template-rows value '[a] 1px repeat(1, 2px [b] 3px) 4px [d]' 18 18 PASS Property grid-template-rows value '[a] 1px repeat(auto-fill, 2px [b] 3px) 4px [d]' 19 19 PASS 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%" 20 PASS Property grid-template-rows value '100% [a] repeat(1, [b] 200% [c]) [d] 300%' 21 21 PASS Property grid-template-rows value '100% [a] repeat(auto-fill, [b] 200% [c]) [d] 300%' 22 22 PASS 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]" 23 PASS Property grid-template-rows value '[a] 1em repeat(1, 2em [b] 3em) 4em [d]' 24 24 PASS Property grid-template-rows value '[a] 1em repeat(auto-fill, 2em [b] 3em) 4em [d]' 25 25 PASS Property grid-template-rows value '[a] 1em repeat(auto-fit, 2em [b] 3em) 4em [d]' -
trunk/Source/WebCore/ChangeLog
r291955 r291956 1 2022-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 1 121 2022-03-27 Matt Woodrow <mattwoodrow@apple.com> 2 122 -
trunk/Source/WebCore/animation/CSSPropertyAnimation.cpp
r291946 r291956 610 610 } 611 611 612 static inline GridTrackList blendFunc(const GridTrackList& from, const GridTrackList& to, const CSSPropertyBlendingContext& context) 613 { 614 return context.progress < 0.5 ? from : to; 615 } 616 612 617 class AnimationPropertyWrapperBase { 613 618 WTF_MAKE_NONCOPYABLE(AnimationPropertyWrapperBase); … … 752 757 }; 753 758 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 759 class GridTemplatePropertyWrapper final : public PropertyWrapper<const GridTrackList&> { 760 WTF_MAKE_FAST_ALLOCATED; 761 public: 762 GridTemplatePropertyWrapper(CSSPropertyID property, const GridTrackList& (RenderStyle::*getter)() const, void (RenderStyle::*setter)(const GridTrackList&)) 763 : PropertyWrapper<const GridTrackList&>(property, getter, setter) 764 { 765 } 766 767 private: 768 768 void blend(RenderStyle& destination, const RenderStyle& from, const RenderStyle& to, const CSSPropertyBlendingContext& context) const final 769 769 { 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 }; 821 778 822 779 class BorderImageRepeatWrapper final : public AnimationPropertyWrapperBase { … … 3180 3137 new DiscretePropertyWrapper<GridAutoFlow>(CSSPropertyGridAutoFlow, &RenderStyle::gridAutoFlow, &RenderStyle::setGridAutoFlow), 3181 3138 new DiscretePropertyWrapper<const Vector<GridTrackSize>&>(CSSPropertyGridAutoRows, &RenderStyle::gridAutoRows, &RenderStyle::setGridAutoRows), 3182 new GridTemplate TracksWrapper<ForColumns>,3183 new GridTemplate TracksWrapper<ForRows>,3139 new GridTemplatePropertyWrapper(CSSPropertyGridTemplateRows, &RenderStyle::gridRowList, &RenderStyle::setGridRowList), 3140 new GridTemplatePropertyWrapper(CSSPropertyGridTemplateColumns, &RenderStyle::gridColumnList, &RenderStyle::setGridColumnList), 3184 3141 new DiscretePropertyWrapper<const GridPosition&>(CSSPropertyGridColumnEnd, &RenderStyle::gridItemColumnEnd, &RenderStyle::setGridItemColumnEnd), 3185 3142 new DiscretePropertyWrapper<const GridPosition&>(CSSPropertyGridColumnStart, &RenderStyle::gridItemColumnStart, &RenderStyle::setGridItemColumnStart), -
trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp
r291690 r291956 36 36 #include "CSSFunctionValue.h" 37 37 #include "CSSGridAutoRepeatValue.h" 38 #include "CSSGridIntegerRepeatValue.h" 38 39 #include "CSSLineBoxContainValue.h" 39 40 #include "CSSPrimitiveValue.h" … … 856 857 857 858 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; 859 860 860 861 virtual int namedGridLineCount() const { return m_orderedNamedGridLines.size(); } … … 867 868 const OrderedNamedGridLinesMap& m_orderedNamedGridLines; 868 869 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(); }881 870 }; 882 871 … … 942 931 } 943 932 944 void OrderedNamedLinesCollector::collectLineNamesForIndex(CSSGridLineNamesValue& lineNamesValue, unsigned i) const945 {946 ASSERT(!isEmpty());947 appendLines(lineNamesValue, i, NamedLines);948 }949 950 void OrderedNamedLinesCollectorInsideRepeat::collectLineNamesForIndex(CSSGridLineNamesValue& lineNamesValue, unsigned i) const951 {952 ASSERT(!isEmpty());953 appendLines(lineNamesValue, i, AutoRepeatNamedLines);954 }955 956 933 void OrderedNamedLinesCollectorInGridLayout::collectLineNamesForIndex(CSSGridLineNamesValue& lineNamesValue, unsigned i) const 957 934 { … … 1025 1002 1026 1003 template <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); 1004 void populateGridTrackList(CSSValueList& list, OrderedNamedLinesCollector& collector, const Vector<T>& tracks, F getTrackSize, int offset = 0) 1005 { 1006 int start = 0; 1007 int end = tracks.size(); 1030 1008 ASSERT(start <= end); 1031 1009 ASSERT(static_cast<unsigned>(end) <= tracks.size()); … … 1039 1017 } 1040 1018 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++) 1019 static void populateSubgridLineNameList(CSSValueList& list, OrderedNamedLinesCollector& collector) 1020 { 1021 for (int i = 0; i < collector.namedGridLineCount(); i++) 1050 1022 addValuesForNamedGridLinesAtIndex(collector, i, list, true); 1051 }1052 1053 static void populateSubgridLineNameList(CSSValueList& list, OrderedNamedLinesCollector& collector)1054 {1055 populateSubgridLineNameList(list, collector, 0, collector.namedGridLineCount());1056 1023 } 1057 1024 … … 1078 1045 1079 1046 auto list = CSSValueList::createSpaceSeparated(); 1080 if (isSubgrid)1081 list->append(CSSValuePool::singleton().createIdentifierValue(CSSValueSubgrid));1082 1047 1083 1048 // If the element is a grid container, the resolved value is the used value, … … 1088 1053 auto* grid = downcast<RenderGrid>(renderer); 1089 1054 if (isSubgrid) { 1055 list->append(CSSValuePool::singleton().createIdentifierValue(CSSValueSubgrid)); 1056 1090 1057 OrderedNamedLinesCollectorInSubgridLayout collector(style, isRowAxis, grid->numTracks(direction)); 1091 1058 populateSubgridLineNameList(list.get(), collector); … … 1103 1070 1104 1071 // 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 } 1108 1083 }; 1109 1084 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 1153 1109 return list; 1154 1110 } -
trunk/Source/WebCore/rendering/style/RenderStyle.h
r291588 r291956 568 568 const StyleSelfAlignmentData& justifySelf() const { return m_rareNonInheritedData->justifySelf; } 569 569 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(); } 586 588 const NamedGridLinesMap& implicitNamedGridColumnLines() const { return m_rareNonInheritedData->grid->implicitNamedGridColumnLines; } 587 589 const NamedGridLinesMap& implicitNamedGridRowLines() const { return m_rareNonInheritedData->grid->implicitNamedGridRowLines; } … … 590 592 size_t namedGridAreaColumnCount() const { return m_rareNonInheritedData->grid->namedGridAreaColumnCount; } 591 593 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(); } 594 596 bool isGridAutoFlowDirectionRow() const { return (m_rareNonInheritedData->grid->gridAutoFlow & InternalAutoFlowDirectionRow); } 595 597 bool isGridAutoFlowDirectionColumn() const { return (m_rareNonInheritedData->grid->gridAutoFlow & InternalAutoFlowDirectionColumn); } … … 1205 1207 #endif 1206 1208 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 } 1207 1219 void setGridAutoColumns(const Vector<GridTrackSize>& trackSizeList) { SET_NESTED_VAR(m_rareNonInheritedData, grid, gridAutoColumns, trackSizeList); } 1208 1220 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); }1225 1221 void setImplicitNamedGridColumnLines(const NamedGridLinesMap& namedGridColumnLines) { SET_NESTED_VAR(m_rareNonInheritedData, grid, implicitNamedGridColumnLines, namedGridColumnLines); } 1226 1222 void setImplicitNamedGridRowLines(const NamedGridLinesMap& namedGridRowLines) { SET_NESTED_VAR(m_rareNonInheritedData, grid, implicitNamedGridRowLines, namedGridRowLines); } … … 1229 1225 void setNamedGridAreaColumnCount(size_t columnCount) { SET_NESTED_VAR(m_rareNonInheritedData, grid, namedGridAreaColumnCount, columnCount); } 1230 1226 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); }1233 1227 void setGridItemColumnStart(const GridPosition& columnStartPosition) { SET_NESTED_VAR(m_rareNonInheritedData, gridItem, gridColumnStart, columnStartPosition); } 1234 1228 void setGridItemColumnEnd(const GridPosition& columnEndPosition) { SET_NESTED_VAR(m_rareNonInheritedData, gridItem, gridColumnEnd, columnEndPosition); } -
trunk/Source/WebCore/rendering/style/StyleGridData.cpp
r289722 r291956 32 32 33 33 StyleGridData::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()) 45 35 , implicitNamedGridRowLines(RenderStyle::initialNamedGridRowLines()) 46 36 , gridAutoFlow(RenderStyle::initialGridAutoFlow()) … … 50 40 , namedGridAreaRowCount(RenderStyle::initialNamedGridAreaCount()) 51 41 , 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) 60 60 { 61 61 } … … 63 63 inline StyleGridData::StyleGridData(const StyleGridData& o) 64 64 : 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)75 65 , implicitNamedGridColumnLines(o.implicitNamedGridColumnLines) 76 66 , implicitNamedGridRowLines(o.implicitNamedGridRowLines) … … 81 71 , namedGridAreaRowCount(o.namedGridAreaRowCount) 82 72 , 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 96 void 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 102 void 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 108 static 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 120 void 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 190 WTF::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 202 WTF::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; 92 218 } 93 219 -
trunk/Source/WebCore/rendering/style/StyleGridData.h
r289722 r291956 29 29 #include "GridTrackSize.h" 30 30 #include "RenderStyleConstants.h" 31 #include <variant> 31 32 #include <wtf/Ref.h> 32 33 #include <wtf/RefCounted.h> 33 34 #include <wtf/Vector.h> 35 #include <wtf/text/TextStream.h> 34 36 #include <wtf/text/WTFString.h> 35 37 … … 38 40 typedef HashMap<String, Vector<unsigned>> NamedGridLinesMap; 39 41 typedef HashMap<unsigned, Vector<String>, IntHash<unsigned>, WTF::UnsignedWithZeroKeyHashTraits<unsigned>> OrderedNamedGridLinesMap; 42 43 typedef std::variant<GridTrackSize, Vector<String>> RepeatEntry; 44 typedef Vector<RepeatEntry> RepeatTrackList; 45 46 struct GridTrackEntrySubgrid { 47 bool operator==(const GridTrackEntrySubgrid&) const = default; 48 }; 49 struct GridTrackEntryRepeat { 50 bool operator==(const GridTrackEntryRepeat&) const = default; 51 52 unsigned repeats; 53 RepeatTrackList list; 54 }; 55 struct GridTrackEntryAutoRepeat { 56 bool operator==(const GridTrackEntryAutoRepeat&) const = default; 57 58 AutoRepeatType type; 59 RepeatTrackList list; 60 }; 61 typedef std::variant<GridTrackSize, Vector<String>, GridTrackEntryRepeat, GridTrackEntryAutoRepeat, GridTrackEntrySubgrid> GridTrackEntry; 62 typedef Vector<GridTrackEntry> GridTrackList; 63 64 WTF::TextStream& operator<<(WTF::TextStream&, const RepeatEntry& item); 65 WTF::TextStream& operator<<(WTF::TextStream&, const GridTrackEntry& item); 40 66 41 67 class StyleGridData : public RefCounted<StyleGridData> { … … 46 72 bool operator==(const StyleGridData& o) const 47 73 { 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; 62 75 } 63 76 … … 67 80 } 68 81 69 Vector<GridTrackSize> gridColumns;70 Vector<GridTrackSize> gridRows;82 void setRows(const GridTrackList&); 83 void setColumns(const GridTrackList&); 71 84 72 NamedGridLinesMap namedGridColumnLines;73 NamedGridLinesMap namedGridRowLines;85 const Vector<GridTrackSize>& gridColumns() const { return m_gridColumns; } 86 const Vector<GridTrackSize>& gridRows() const { return m_gridRows; } 74 87 75 OrderedNamedGridLinesMap orderedNamedGridColumnLines;76 OrderedNamedGridLinesMap orderedNamedGridRowLines;88 const NamedGridLinesMap& namedGridColumnLines() const { return m_namedGridColumnLines; }; 89 const NamedGridLinesMap& namedGridRowLines() const { return m_namedGridRowLines; }; 77 90 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; }; 82 113 83 114 NamedGridLinesMap implicitNamedGridColumnLines; … … 95 126 unsigned namedGridAreaColumnCount; 96 127 97 Vector<GridTrackSize> gridAutoRepeatColumns; 98 Vector<GridTrackSize> gridAutoRepeatRows; 128 private: 99 129 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); 102 131 103 AutoRepeatType autoRepeatColumnsType;104 AutoRepeatType autoRepeatRowsType;132 GridTrackList m_columns; 133 GridTrackList m_rows; 105 134 106 bool subgridRows; 107 bool subgridColumns; 135 // Cached data computed from m_colmns/rows; 136 Vector<GridTrackSize> m_gridColumns; 137 Vector<GridTrackSize> m_gridRows; 108 138 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 110 162 StyleGridData(); 111 163 StyleGridData(const StyleGridData&); … … 113 165 114 166 } // namespace WebCore 167 -
trunk/Source/WebCore/style/StyleBuilderConverter.h
r291398 r291956 59 59 #include "Settings.h" 60 60 #include "StyleBuilderState.h" 61 #include "StyleGridData.h" 61 62 #include "StyleScrollSnapPoints.h" 62 63 #include "TabSize.h" … … 192 193 static GridLength createGridTrackBreadth(const CSSPrimitiveValue&, BuilderState&); 193 194 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&); 196 196 static bool createGridPosition(const CSSValue&, GridPosition&); 197 197 static void createImplicitNamedGridLinesFromGridArea(const NamedGridAreaMap&, NamedGridLinesMap&, GridTrackSizingDirection); … … 980 980 } 981 981 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) 982 inline bool BuilderConverter::createGridTrackList(const CSSValue& value, GridTrackList& trackList, BuilderState& builderState) 1013 983 { 1014 984 // Handle 'none'. … … 1019 989 return false; 1020 990 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)); 1032 1003 } 1033 1004 }; 1034 1005 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 1039 1010 for (auto& currentValue : downcast<CSSValueList>(value)) { 1040 1011 if (is<CSSGridAutoRepeatValue>(currentValue)) { 1041 ASSERT(!autoRepeatIndex);1042 autoRepeatIndex = 0;1043 1012 CSSValueID autoRepeatID = downcast<CSSGridAutoRepeatValue>(currentValue.get()).autoRepeatID(); 1044 1013 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()); 1055 1030 } 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)); 1060 1034 } 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 1077 1037 return true; 1078 1038 } -
trunk/Source/WebCore/style/StyleBuilderCustom.h
r291536 r291956 1925 1925 } 1926 1926 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()); \ 1938 1930 1939 1931 #define SET_INHERIT_TRACKS_DATA(style, parentStyle, TrackType) \ 1940 BuilderConverter::TracksData* tracksData= nullptr; \1932 GridTrackList* trackList = nullptr; \ 1941 1933 const RenderStyle* parentStylePointer = &parentStyle; \ 1942 SET_TRACKS_DATA_INTERNAL(track sData, style, parentStylePointer, TrackType)1943 1944 #define SET_TRACKS_DATA(track sData, 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; \ 1946 1938 const RenderStyle* parentStyle = nullptr; \ 1947 SET_TRACKS_DATA_INTERNAL(track sDataPointer, style, parentStyle, TrackType)1939 SET_TRACKS_DATA_INTERNAL(trackListPointer, style, parentStyle, TrackType) 1948 1940 1949 1941 inline void BuilderCustom::applyInitialGridTemplateColumns(BuilderState& builderState) 1950 1942 { 1951 BuilderConverter::TracksData initialTracksData;1952 SET_TRACKS_DATA(initialTrack sData, builderState.style(), Column);1943 GridTrackList initialTrackList; 1944 SET_TRACKS_DATA(initialTrackList, builderState.style(), Column); 1953 1945 } 1954 1946 … … 1960 1952 inline void BuilderCustom::applyValueGridTemplateColumns(BuilderState& builderState, CSSValue& value) 1961 1953 { 1962 BuilderConverter::TracksData tracksData;1963 if (!BuilderConverter::createGridTrackList(value, track sData, builderState))1964 return; 1965 SET_TRACKS_DATA(track sData, builderState.style(), Column);1954 GridTrackList trackList; 1955 if (!BuilderConverter::createGridTrackList(value, trackList, builderState)) 1956 return; 1957 SET_TRACKS_DATA(trackList, builderState.style(), Column); 1966 1958 } 1967 1959 1968 1960 inline void BuilderCustom::applyInitialGridTemplateRows(BuilderState& builderState) 1969 1961 { 1970 BuilderConverter::TracksData initialTracksData;1971 SET_TRACKS_DATA(initialTrack sData, builderState.style(), Row);1962 GridTrackList initialTrackList; 1963 SET_TRACKS_DATA(initialTrackList, builderState.style(), Row); 1972 1964 } 1973 1965 … … 1979 1971 inline void BuilderCustom::applyValueGridTemplateRows(BuilderState& builderState, CSSValue& value) 1980 1972 { 1981 BuilderConverter::TracksData tracksData;1982 if (!BuilderConverter::createGridTrackList(value, track sData, builderState))1983 return; 1984 1985 SET_TRACKS_DATA(track sData, builderState.style(), Row);1973 GridTrackList trackList; 1974 if (!BuilderConverter::createGridTrackList(value, trackList, builderState)) 1975 return; 1976 1977 SET_TRACKS_DATA(trackList, builderState.style(), Row); 1986 1978 } 1987 1979
Note: See TracChangeset
for help on using the changeset viewer.