Title: [281840] trunk
Revision
281840
Author
svil...@igalia.com
Date
2021-09-01 01:35:53 -0700 (Wed, 01 Sep 2021)

Log Message

[css-flexbox] Add initial support for css-align-3 positional alignment properties
https://bugs.webkit.org/show_bug.cgi?id=229074

Reviewed by Simon Fraser.

LayoutTests/imported/w3c:

Fixed expectations for 56 subtests that should PASS now instead of FAIL.

* web-platform-tests/css/css-flexbox/align-content-horiz-001a-expected.txt: Mark 8 subtests as PASS.
* web-platform-tests/css/css-flexbox/align-content-horiz-001b-expected.txt: Ditto.
* web-platform-tests/css/css-flexbox/align-content-horiz-002-expected.txt: Ditto.
* web-platform-tests/css/css-flexbox/align-content-vert-001a-expected.txt: Ditto.
* web-platform-tests/css/css-flexbox/align-content-vert-001b-expected.txt: Ditto.
* web-platform-tests/css/css-flexbox/align-content-vert-002-expected.txt: Ditto.
* web-platform-tests/css/css-flexbox/align-content-wmvert-001-expected.txt: Ditto.

Source/WebCore:

Added initial support for Start and End positional alignment properties from
https://drafts.csswg.org/css-align-3/#positional-values. These two properties
align the flex item to be flush with the alignment container's (the flex container)
start and end edges in the appropriate axis.

* rendering/RenderFlexibleBox.cpp:
(WebCore::RenderFlexibleBox::isColumnOrRowReverse const): New method.
(WebCore::initialJustifyContentOffset): Handle Start and End.
(WebCore::alignmentOffset): Ditto.
(WebCore::RenderFlexibleBox::staticMainAxisPositionForPositionedChild):
(WebCore::RenderFlexibleBox::alignmentForChild const):
(WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
(WebCore::RenderFlexibleBox::layoutColumnReverse):
(WebCore::initialAlignContentOffset): Handle Start and End.
(WebCore::RenderFlexibleBox::alignFlexLines):
* rendering/RenderFlexibleBox.h:

LayoutTests:

* TestExpectations: Unskipped 4 WPT tests that are passing now.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (281839 => 281840)


--- trunk/LayoutTests/ChangeLog	2021-09-01 07:55:39 UTC (rev 281839)
+++ trunk/LayoutTests/ChangeLog	2021-09-01 08:35:53 UTC (rev 281840)
@@ -1,3 +1,12 @@
+2021-08-13  Sergio Villar Senin  <svil...@igalia.com>
+
+        [css-flexbox] Add initial support for css-align-3 positional alignment properties
+        https://bugs.webkit.org/show_bug.cgi?id=229074
+
+        Reviewed by Simon Fraser.
+
+        * TestExpectations: Unskipped 4 WPT tests that are passing now.
+
 2021-08-31  Myles C. Maxfield  <mmaxfi...@apple.com>
 
         Import web-platform-tests/css/css-font-loading

Modified: trunk/LayoutTests/TestExpectations (281839 => 281840)


--- trunk/LayoutTests/TestExpectations	2021-09-01 07:55:39 UTC (rev 281839)
+++ trunk/LayoutTests/TestExpectations	2021-09-01 08:35:53 UTC (rev 281840)
@@ -4186,12 +4186,10 @@
 webkit.org/b/221472 imported/w3c/web-platform-tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-002.html [ ImageOnlyFailure ]
 webkit.org/b/221472 imported/w3c/web-platform-tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-003.html [ ImageOnlyFailure ]
 webkit.org/b/221472 imported/w3c/web-platform-tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-004.html [ ImageOnlyFailure ]
-webkit.org/b/221472 imported/w3c/web-platform-tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-005.html [ ImageOnlyFailure ]
 webkit.org/b/221472 imported/w3c/web-platform-tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-006.html [ ImageOnlyFailure ]
 webkit.org/b/221472 imported/w3c/web-platform-tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-007.html [ ImageOnlyFailure ]
 webkit.org/b/221472 imported/w3c/web-platform-tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-008.html [ ImageOnlyFailure ]
 webkit.org/b/221472 imported/w3c/web-platform-tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-001.html [ ImageOnlyFailure ]
-webkit.org/b/221472 imported/w3c/web-platform-tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-002.html [ ImageOnlyFailure ]
 webkit.org/b/221472 imported/w3c/web-platform-tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-001.html [ ImageOnlyFailure ]
 webkit.org/b/221472 imported/w3c/web-platform-tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-002.html [ ImageOnlyFailure ]
 webkit.org/b/221472 imported/w3c/web-platform-tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-002.html [ ImageOnlyFailure ]
@@ -4220,8 +4218,6 @@
 webkit.org/b/221477 imported/w3c/web-platform-tests/css/css-flexbox/flexbox-justify-content-horiz-006.xhtml [ ImageOnlyFailure ]
 webkit.org/b/221477 imported/w3c/web-platform-tests/css/css-flexbox/flexbox-justify-content-vert-006.xhtml [ ImageOnlyFailure ]
 webkit.org/b/221477 imported/w3c/web-platform-tests/css/css-flexbox/flexbox-justify-content-wmvert-001.xhtml [ ImageOnlyFailure ]
-webkit.org/b/221477 imported/w3c/web-platform-tests/css/css-flexbox/flexbox_justifycontent-start.html [ ImageOnlyFailure ]
-webkit.org/b/221477 imported/w3c/web-platform-tests/css/css-flexbox/flexbox_justifycontent-start-rtl.html [ ImageOnlyFailure ]
 webkit.org/b/221477 imported/w3c/web-platform-tests/css/css-flexbox/flexbox_justifycontent-left-001.html [ ImageOnlyFailure ]
 webkit.org/b/221477 imported/w3c/web-platform-tests/css/css-flexbox/flexbox_justifycontent-left-002.html [ ImageOnlyFailure ]
 webkit.org/b/221477 imported/w3c/web-platform-tests/css/css-flexbox/flexbox_justifycontent-right-001.html [ ImageOnlyFailure ]

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (281839 => 281840)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2021-09-01 07:55:39 UTC (rev 281839)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2021-09-01 08:35:53 UTC (rev 281840)
@@ -1,3 +1,20 @@
+2021-08-13  Sergio Villar Senin  <svil...@igalia.com>
+
+        [css-flexbox] Add initial support for css-align-3 positional alignment properties
+        https://bugs.webkit.org/show_bug.cgi?id=229074
+
+        Reviewed by Simon Fraser.
+
+        Fixed expectations for 56 subtests that should PASS now instead of FAIL.
+
+        * web-platform-tests/css/css-flexbox/align-content-horiz-001a-expected.txt: Mark 8 subtests as PASS.
+        * web-platform-tests/css/css-flexbox/align-content-horiz-001b-expected.txt: Ditto.
+        * web-platform-tests/css/css-flexbox/align-content-horiz-002-expected.txt: Ditto.
+        * web-platform-tests/css/css-flexbox/align-content-vert-001a-expected.txt: Ditto.
+        * web-platform-tests/css/css-flexbox/align-content-vert-001b-expected.txt: Ditto.
+        * web-platform-tests/css/css-flexbox/align-content-vert-002-expected.txt: Ditto.
+        * web-platform-tests/css/css-flexbox/align-content-wmvert-001-expected.txt: Ditto.
+
 2021-08-31  Myles C. Maxfield  <mmaxfi...@apple.com>
 
         Import web-platform-tests/css/css-font-loading

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-horiz-001a-expected.txt (281839 => 281840)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-horiz-001a-expected.txt	2021-09-01 07:55:39 UTC (rev 281839)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-horiz-001a-expected.txt	2021-09-01 08:35:53 UTC (rev 281840)
@@ -63,28 +63,12 @@
 PASS .flexbox div 62
 PASS .flexbox div 63
 PASS .flexbox div 64
-FAIL .flexbox div 65 assert_equals:
-<div class="a" data-expected-width="20" data-expected-height="10" data-offset-x="536" data-offset-y="198"></div>
-offsetTop expected 198 but got 8
-FAIL .flexbox div 66 assert_equals:
-<div class="a" data-expected-width="20" data-expected-height="10" data-offset-x="558" data-offset-y="168"></div>
-offsetTop expected 168 but got 8
-FAIL .flexbox div 67 assert_equals:
-<div class="b" data-expected-width="20" data-expected-height="30" data-offset-x="558" data-offset-y="178"><div class="fixedSizeChild" data-expected-width="10" data-expected-height="30" data-offset-x="558" data-offset-y="178"></div></div>
-offsetTop expected 178 but got 18
-FAIL .flexbox div 68 assert_equals:
-<div class="fixedSizeChild" data-expected-width="10" data-expected-height="30" data-offset-x="558" data-offset-y="178"></div>
-offsetTop expected 178 but got 18
-FAIL .flexbox div 69 assert_equals:
-<div class="a" data-expected-width="20" data-expected-height="10" data-offset-x="580" data-offset-y="128"></div>
-offsetTop expected 128 but got 8
-FAIL .flexbox div 70 assert_equals:
-<div class="b" data-expected-width="20" data-expected-height="30" data-offset-x="580" data-offset-y="138"><div class="fixedSizeChild" data-expected-width="10" data-expected-height="30" data-offset-x="580" data-offset-y="138"></div></div>
-offsetTop expected 138 but got 18
-FAIL .flexbox div 71 assert_equals:
-<div class="fixedSizeChild" data-expected-width="10" data-expected-height="30" data-offset-x="580" data-offset-y="138"></div>
-offsetTop expected 138 but got 18
-FAIL .flexbox div 72 assert_equals:
-<div class="c" data-expected-width="20" data-expected-height="40" data-offset-x="580" data-offset-y="168"></div>
-offsetTop expected 168 but got 48
+PASS .flexbox div 65
+PASS .flexbox div 66
+PASS .flexbox div 67
+PASS .flexbox div 68
+PASS .flexbox div 69
+PASS .flexbox div 70
+PASS .flexbox div 71
+PASS .flexbox div 72
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-horiz-001b-expected.txt (281839 => 281840)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-horiz-001b-expected.txt	2021-09-01 07:55:39 UTC (rev 281839)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-horiz-001b-expected.txt	2021-09-01 08:35:53 UTC (rev 281840)
@@ -63,28 +63,12 @@
 PASS .flexbox div 62
 PASS .flexbox div 63
 PASS .flexbox div 64
-FAIL .flexbox div 65 assert_equals:
-<div class="a" data-expected-width="20" data-expected-height="10" data-offset-x="536" data-offset-y="198"></div>
-offsetTop expected 198 but got 8
-FAIL .flexbox div 66 assert_equals:
-<div class="a" data-expected-width="20" data-expected-height="10" data-offset-x="558" data-offset-y="168"></div>
-offsetTop expected 168 but got 8
-FAIL .flexbox div 67 assert_equals:
-<div class="b" data-expected-width="20" data-expected-height="30" data-offset-x="558" data-offset-y="178"><div class="fixedSizeChild" data-expected-width="10" data-expected-height="30" data-offset-x="558" data-offset-y="178"></div></div>
-offsetTop expected 178 but got 18
-FAIL .flexbox div 68 assert_equals:
-<div class="fixedSizeChild" data-expected-width="10" data-expected-height="30" data-offset-x="558" data-offset-y="178"></div>
-offsetTop expected 178 but got 18
-FAIL .flexbox div 69 assert_equals:
-<div class="a" data-expected-width="20" data-expected-height="10" data-offset-x="580" data-offset-y="128"></div>
-offsetTop expected 128 but got 8
-FAIL .flexbox div 70 assert_equals:
-<div class="b" data-expected-width="20" data-expected-height="30" data-offset-x="580" data-offset-y="138"><div class="fixedSizeChild" data-expected-width="10" data-expected-height="30" data-offset-x="580" data-offset-y="138"></div></div>
-offsetTop expected 138 but got 18
-FAIL .flexbox div 71 assert_equals:
-<div class="fixedSizeChild" data-expected-width="10" data-expected-height="30" data-offset-x="580" data-offset-y="138"></div>
-offsetTop expected 138 but got 18
-FAIL .flexbox div 72 assert_equals:
-<div class="c" data-expected-width="20" data-expected-height="40" data-offset-x="580" data-offset-y="168"></div>
-offsetTop expected 168 but got 48
+PASS .flexbox div 65
+PASS .flexbox div 66
+PASS .flexbox div 67
+PASS .flexbox div 68
+PASS .flexbox div 69
+PASS .flexbox div 70
+PASS .flexbox div 71
+PASS .flexbox div 72
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-horiz-002-expected.txt (281839 => 281840)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-horiz-002-expected.txt	2021-09-01 07:55:39 UTC (rev 281839)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-horiz-002-expected.txt	2021-09-01 08:35:53 UTC (rev 281840)
@@ -55,30 +55,14 @@
 PASS .flexbox div 54
 PASS .flexbox div 55
 PASS .flexbox div 56
-FAIL .flexbox div 57 assert_equals:
-<div class="a" data-expected-width="20" data-expected-height="10" data-offset-x="470" data-offset-y="8"></div>
-offsetTop expected 8 but got 198
-FAIL .flexbox div 58 assert_equals:
-<div class="a" data-expected-width="20" data-expected-height="10" data-offset-x="492" data-offset-y="38"></div>
-offsetTop expected 38 but got 198
-FAIL .flexbox div 59 assert_equals:
-<div class="b" data-expected-width="20" data-expected-height="30" data-offset-x="492" data-offset-y="8"><div class="fixedSizeChild" data-expected-width="10" data-expected-height="30" data-offset-x="492" data-offset-y="8"></div></div>
-offsetTop expected 8 but got 168
-FAIL .flexbox div 60 assert_equals:
-<div class="fixedSizeChild" data-expected-width="10" data-expected-height="30" data-offset-x="492" data-offset-y="8"></div>
-offsetTop expected 8 but got 168
-FAIL .flexbox div 61 assert_equals:
-<div class="a" data-expected-width="20" data-expected-height="10" data-offset-x="514" data-offset-y="78"></div>
-offsetTop expected 78 but got 198
-FAIL .flexbox div 62 assert_equals:
-<div class="b" data-expected-width="20" data-expected-height="30" data-offset-x="514" data-offset-y="48"><div class="fixedSizeChild" data-expected-width="10" data-expected-height="30" data-offset-x="514" data-offset-y="48"></div></div>
-offsetTop expected 48 but got 168
-FAIL .flexbox div 63 assert_equals:
-<div class="fixedSizeChild" data-expected-width="10" data-expected-height="30" data-offset-x="514" data-offset-y="48"></div>
-offsetTop expected 48 but got 168
-FAIL .flexbox div 64 assert_equals:
-<div class="c" data-expected-width="20" data-expected-height="40" data-offset-x="514" data-offset-y="8"></div>
-offsetTop expected 8 but got 128
+PASS .flexbox div 57
+PASS .flexbox div 58
+PASS .flexbox div 59
+PASS .flexbox div 60
+PASS .flexbox div 61
+PASS .flexbox div 62
+PASS .flexbox div 63
+PASS .flexbox div 64
 PASS .flexbox div 65
 PASS .flexbox div 66
 PASS .flexbox div 67

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-vert-001a-expected.txt (281839 => 281840)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-vert-001a-expected.txt	2021-09-01 07:55:39 UTC (rev 281839)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-vert-001a-expected.txt	2021-09-01 08:35:53 UTC (rev 281840)
@@ -63,28 +63,12 @@
 PASS .flexbox div 62
 PASS .flexbox div 63
 PASS .flexbox div 64
-FAIL .flexbox div 65 assert_equals:
-<div class="a" data-expected-width="10" data-expected-height="10" data-offset-x="198" data-offset-y="296"></div>
-offsetLeft expected 198 but got 8
-FAIL .flexbox div 66 assert_equals:
-<div class="a" data-expected-width="10" data-expected-height="10" data-offset-x="168" data-offset-y="308"></div>
-offsetLeft expected 168 but got 8
-FAIL .flexbox div 67 assert_equals:
-<div class="b" data-expected-width="30" data-expected-height="10" data-offset-x="178" data-offset-y="308"><div class="fixedSizeChild" data-expected-width="30" data-expected-height="5" data-offset-x="178" data-offset-y="308"></div></div>
-offsetLeft expected 178 but got 18
-FAIL .flexbox div 68 assert_equals:
-<div class="fixedSizeChild" data-expected-width="30" data-expected-height="5" data-offset-x="178" data-offset-y="308"></div>
-offsetLeft expected 178 but got 18
-FAIL .flexbox div 69 assert_equals:
-<div class="a" data-expected-width="10" data-expected-height="10" data-offset-x="128" data-offset-y="320"></div>
-offsetLeft expected 128 but got 8
-FAIL .flexbox div 70 assert_equals:
-<div class="b" data-expected-width="30" data-expected-height="10" data-offset-x="138" data-offset-y="320"><div class="fixedSizeChild" data-expected-width="30" data-expected-height="5" data-offset-x="138" data-offset-y="320"></div></div>
-offsetLeft expected 138 but got 18
-FAIL .flexbox div 71 assert_equals:
-<div class="fixedSizeChild" data-expected-width="30" data-expected-height="5" data-offset-x="138" data-offset-y="320"></div>
-offsetLeft expected 138 but got 18
-FAIL .flexbox div 72 assert_equals:
-<div class="c" data-expected-width="40" data-expected-height="10" data-offset-x="168" data-offset-y="320"></div>
-offsetLeft expected 168 but got 48
+PASS .flexbox div 65
+PASS .flexbox div 66
+PASS .flexbox div 67
+PASS .flexbox div 68
+PASS .flexbox div 69
+PASS .flexbox div 70
+PASS .flexbox div 71
+PASS .flexbox div 72
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-vert-001b-expected.txt (281839 => 281840)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-vert-001b-expected.txt	2021-09-01 07:55:39 UTC (rev 281839)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-vert-001b-expected.txt	2021-09-01 08:35:53 UTC (rev 281840)
@@ -63,28 +63,12 @@
 PASS .flexbox div 62
 PASS .flexbox div 63
 PASS .flexbox div 64
-FAIL .flexbox div 65 assert_equals:
-<div class="a" data-expected-width="10" data-expected-height="10" data-offset-x="198" data-offset-y="296"></div>
-offsetLeft expected 198 but got 8
-FAIL .flexbox div 66 assert_equals:
-<div class="a" data-expected-width="10" data-expected-height="10" data-offset-x="168" data-offset-y="308"></div>
-offsetLeft expected 168 but got 8
-FAIL .flexbox div 67 assert_equals:
-<div class="b" data-expected-width="30" data-expected-height="10" data-offset-x="178" data-offset-y="308"><div class="fixedSizeChild" data-expected-width="30" data-expected-height="5" data-offset-x="178" data-offset-y="308"></div></div>
-offsetLeft expected 178 but got 18
-FAIL .flexbox div 68 assert_equals:
-<div class="fixedSizeChild" data-expected-width="30" data-expected-height="5" data-offset-x="178" data-offset-y="308"></div>
-offsetLeft expected 178 but got 18
-FAIL .flexbox div 69 assert_equals:
-<div class="a" data-expected-width="10" data-expected-height="10" data-offset-x="128" data-offset-y="320"></div>
-offsetLeft expected 128 but got 8
-FAIL .flexbox div 70 assert_equals:
-<div class="b" data-expected-width="30" data-expected-height="10" data-offset-x="138" data-offset-y="320"><div class="fixedSizeChild" data-expected-width="30" data-expected-height="5" data-offset-x="138" data-offset-y="320"></div></div>
-offsetLeft expected 138 but got 18
-FAIL .flexbox div 71 assert_equals:
-<div class="fixedSizeChild" data-expected-width="30" data-expected-height="5" data-offset-x="138" data-offset-y="320"></div>
-offsetLeft expected 138 but got 18
-FAIL .flexbox div 72 assert_equals:
-<div class="c" data-expected-width="40" data-expected-height="10" data-offset-x="168" data-offset-y="320"></div>
-offsetLeft expected 168 but got 48
+PASS .flexbox div 65
+PASS .flexbox div 66
+PASS .flexbox div 67
+PASS .flexbox div 68
+PASS .flexbox div 69
+PASS .flexbox div 70
+PASS .flexbox div 71
+PASS .flexbox div 72
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-vert-002-expected.txt (281839 => 281840)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-vert-002-expected.txt	2021-09-01 07:55:39 UTC (rev 281839)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-vert-002-expected.txt	2021-09-01 08:35:53 UTC (rev 281840)
@@ -55,30 +55,14 @@
 PASS .flexbox div 54
 PASS .flexbox div 55
 PASS .flexbox div 56
-FAIL .flexbox div 57 assert_equals:
-<div class="a" data-expected-width="10" data-expected-height="20" data-offset-x="8" data-offset-y="470"></div>
-offsetLeft expected 8 but got 198
-FAIL .flexbox div 58 assert_equals:
-<div class="a" data-expected-width="10" data-expected-height="20" data-offset-x="38" data-offset-y="492"></div>
-offsetLeft expected 38 but got 198
-FAIL .flexbox div 59 assert_equals:
-<div class="b" data-expected-width="30" data-expected-height="20" data-offset-x="8" data-offset-y="492"><div class="fixedSizeChild" data-expected-width="30" data-expected-height="10" data-offset-x="8" data-offset-y="492"></div></div>
-offsetLeft expected 8 but got 168
-FAIL .flexbox div 60 assert_equals:
-<div class="fixedSizeChild" data-expected-width="30" data-expected-height="10" data-offset-x="8" data-offset-y="492"></div>
-offsetLeft expected 8 but got 168
-FAIL .flexbox div 61 assert_equals:
-<div class="a" data-expected-width="10" data-expected-height="20" data-offset-x="78" data-offset-y="514"></div>
-offsetLeft expected 78 but got 198
-FAIL .flexbox div 62 assert_equals:
-<div class="b" data-expected-width="30" data-expected-height="20" data-offset-x="48" data-offset-y="514"><div class="fixedSizeChild" data-expected-width="30" data-expected-height="10" data-offset-x="48" data-offset-y="514"></div></div>
-offsetLeft expected 48 but got 168
-FAIL .flexbox div 63 assert_equals:
-<div class="fixedSizeChild" data-expected-width="30" data-expected-height="10" data-offset-x="48" data-offset-y="514"></div>
-offsetLeft expected 48 but got 168
-FAIL .flexbox div 64 assert_equals:
-<div class="c" data-expected-width="40" data-expected-height="20" data-offset-x="8" data-offset-y="514"></div>
-offsetLeft expected 8 but got 128
+PASS .flexbox div 57
+PASS .flexbox div 58
+PASS .flexbox div 59
+PASS .flexbox div 60
+PASS .flexbox div 61
+PASS .flexbox div 62
+PASS .flexbox div 63
+PASS .flexbox div 64
 PASS .flexbox div 65
 PASS .flexbox div 66
 PASS .flexbox div 67

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-wmvert-001-expected.txt (281839 => 281840)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-wmvert-001-expected.txt	2021-09-01 07:55:39 UTC (rev 281839)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/align-content-wmvert-001-expected.txt	2021-09-01 08:35:53 UTC (rev 281840)
@@ -55,30 +55,14 @@
 PASS .flexbox div 54
 PASS .flexbox div 55
 PASS .flexbox div 56
-FAIL .flexbox div 57 assert_equals:
-<div class="a" data-expected-width="10" data-expected-height="20" data-offset-x="8" data-offset-y="470"></div>
-offsetLeft expected 8 but got 198
-FAIL .flexbox div 58 assert_equals:
-<div class="a" data-expected-width="10" data-expected-height="20" data-offset-x="38" data-offset-y="492"></div>
-offsetLeft expected 38 but got 198
-FAIL .flexbox div 59 assert_equals:
-<div class="b" data-expected-width="30" data-expected-height="20" data-offset-x="8" data-offset-y="492"><div class="fixedSizeChild" data-expected-width="30" data-expected-height="10" data-offset-x="8" data-offset-y="492"></div></div>
-offsetLeft expected 8 but got 168
-FAIL .flexbox div 60 assert_equals:
-<div class="fixedSizeChild" data-expected-width="30" data-expected-height="10" data-offset-x="8" data-offset-y="492"></div>
-offsetLeft expected 8 but got 168
-FAIL .flexbox div 61 assert_equals:
-<div class="a" data-expected-width="10" data-expected-height="20" data-offset-x="78" data-offset-y="514"></div>
-offsetLeft expected 78 but got 198
-FAIL .flexbox div 62 assert_equals:
-<div class="b" data-expected-width="30" data-expected-height="20" data-offset-x="48" data-offset-y="514"><div class="fixedSizeChild" data-expected-width="30" data-expected-height="10" data-offset-x="48" data-offset-y="514"></div></div>
-offsetLeft expected 48 but got 168
-FAIL .flexbox div 63 assert_equals:
-<div class="fixedSizeChild" data-expected-width="30" data-expected-height="10" data-offset-x="48" data-offset-y="514"></div>
-offsetLeft expected 48 but got 168
-FAIL .flexbox div 64 assert_equals:
-<div class="c" data-expected-width="40" data-expected-height="20" data-offset-x="8" data-offset-y="514"></div>
-offsetLeft expected 8 but got 128
+PASS .flexbox div 57
+PASS .flexbox div 58
+PASS .flexbox div 59
+PASS .flexbox div 60
+PASS .flexbox div 61
+PASS .flexbox div 62
+PASS .flexbox div 63
+PASS .flexbox div 64
 PASS .flexbox div 65
 PASS .flexbox div 66
 PASS .flexbox div 67

Modified: trunk/Source/WebCore/ChangeLog (281839 => 281840)


--- trunk/Source/WebCore/ChangeLog	2021-09-01 07:55:39 UTC (rev 281839)
+++ trunk/Source/WebCore/ChangeLog	2021-09-01 08:35:53 UTC (rev 281840)
@@ -1,3 +1,27 @@
+2021-08-13  Sergio Villar Senin  <svil...@igalia.com>
+
+        [css-flexbox] Add initial support for css-align-3 positional alignment properties
+        https://bugs.webkit.org/show_bug.cgi?id=229074
+
+        Reviewed by Simon Fraser.
+
+        Added initial support for Start and End positional alignment properties from
+        https://drafts.csswg.org/css-align-3/#positional-values. These two properties
+        align the flex item to be flush with the alignment container's (the flex container)
+        start and end edges in the appropriate axis.
+
+        * rendering/RenderFlexibleBox.cpp:
+        (WebCore::RenderFlexibleBox::isColumnOrRowReverse const): New method.
+        (WebCore::initialJustifyContentOffset): Handle Start and End.
+        (WebCore::alignmentOffset): Ditto.
+        (WebCore::RenderFlexibleBox::staticMainAxisPositionForPositionedChild):
+        (WebCore::RenderFlexibleBox::alignmentForChild const):
+        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
+        (WebCore::RenderFlexibleBox::layoutColumnReverse):
+        (WebCore::initialAlignContentOffset): Handle Start and End.
+        (WebCore::RenderFlexibleBox::alignFlexLines):
+        * rendering/RenderFlexibleBox.h:
+
 2021-09-01  Said Abou-Hallawa  <s...@apple.com>
 
         [GPU Process](REGRESSION): A detached canvas leaks all the images it draws

Modified: trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp (281839 => 281840)


--- trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp	2021-09-01 07:55:39 UTC (rev 281839)
+++ trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp	2021-09-01 08:35:53 UTC (rev 281840)
@@ -482,6 +482,11 @@
     return style().isColumnFlexDirection();
 }
 
+bool RenderFlexibleBox::isColumnOrRowReverse() const
+{
+    return style().flexDirection() == FlexDirection::ColumnReverse || style().flexDirection() == FlexDirection::RowReverse;
+}
+
 bool RenderFlexibleBox::isHorizontalFlow() const
 {
     if (isHorizontalWritingMode())
@@ -1493,9 +1498,11 @@
     return !totalViolation;
 }
 
-static LayoutUnit initialJustifyContentOffset(LayoutUnit availableFreeSpace, ContentPosition justifyContent, ContentDistribution justifyContentDistribution, unsigned numberOfChildren)
+static LayoutUnit initialJustifyContentOffset(LayoutUnit availableFreeSpace, ContentPosition justifyContent, ContentDistribution justifyContentDistribution, unsigned numberOfChildren, bool isReversed)
 {
-    if (justifyContent == ContentPosition::FlexEnd)
+    if (justifyContent == ContentPosition::FlexEnd
+        || (justifyContent == ContentPosition::End && !isReversed)
+        || (justifyContent == ContentPosition::Start && isReversed))
         return availableFreeSpace;
     if (justifyContent == ContentPosition::Center)
         return availableFreeSpace / 2;
@@ -1535,6 +1542,10 @@
     case ItemPosition::Normal:
         ASSERT_NOT_REACHED();
         break;
+    case ItemPosition::Start:
+    case ItemPosition::End:
+        ASSERT_NOT_REACHED("%u alignmentForChild should have transformed this position value to something we handle below.", static_cast<uint8_t>(position));
+        break;
     case ItemPosition::Stretch:
         // Actual stretching must be handled by the caller. Since wrap-reverse
         // flips cross start and cross end, stretch children should be aligned
@@ -1559,12 +1570,9 @@
     case ItemPosition::LastBaseline:
     case ItemPosition::SelfStart:
     case ItemPosition::SelfEnd:
-    case ItemPosition::Start:
-    case ItemPosition::End:
     case ItemPosition::Left:
     case ItemPosition::Right:
-        // FIXME: Implement the extended grammar, enabled when the Grid Layout
-        // feature was enabled by default.
+        // FIXME: Implement last baseline.
         break;
     }
     return 0;
@@ -1584,8 +1592,9 @@
 
     ContentPosition position = style().resolvedJustifyContentPosition(contentAlignmentNormalBehavior());
     ContentDistribution distribution = style().resolvedJustifyContentDistribution(contentAlignmentNormalBehavior());
-    LayoutUnit offset = initialJustifyContentOffset(availableSpace, position, distribution, 1);
-    if (style().flexDirection() == FlexDirection::RowReverse || style().flexDirection() == FlexDirection::ColumnReverse)
+    auto isReverse = isColumnOrRowReverse();
+    LayoutUnit offset = initialJustifyContentOffset(availableSpace, position, distribution, 1, isReverse);
+    if (isReverse)
         offset = availableSpace - offset;
     return offset;
 }
@@ -1679,6 +1688,15 @@
     if (align == ItemPosition::Baseline && !mainAxisIsChildInlineAxis(child))
         align = ItemPosition::FlexStart;
 
+    // We can safely return here because start/end are not affected by a reversed flex-wrap because the
+    // alignment container is the flex line, and in a wrap reversed flex container the start and end within
+    // a flex line are still the same. Contrary to this flex-start/flex-end depend on the flex container
+    // start/end edges which are flipped in the case of wrap-reverse.
+    if (align == ItemPosition::Start)
+        return ItemPosition::FlexStart;
+    if (align == ItemPosition::End)
+        return ItemPosition::FlexEnd;
+
     if (style().flexWrap() == FlexWrap::Reverse) {
         if (align == ItemPosition::FlexStart)
             align = ItemPosition::FlexEnd;
@@ -1812,7 +1830,7 @@
 
     LayoutUnit autoMarginOffset = autoMarginOffsetInMainAxis(children, availableFreeSpace);
     LayoutUnit mainAxisOffset = flowAwareBorderStart() + flowAwarePaddingStart();
-    mainAxisOffset += initialJustifyContentOffset(availableFreeSpace, position, distribution, children.size());
+    mainAxisOffset += initialJustifyContentOffset(availableFreeSpace, position, distribution, children.size(), isColumnOrRowReverse());
     if (style().flexDirection() == FlexDirection::RowReverse)
         mainAxisOffset += isHorizontalFlow() ? verticalScrollbarWidth() : horizontalScrollbarHeight();
 
@@ -1920,7 +1938,7 @@
     // the children starting from the end of the flexbox. We also don't need to
     // layout anything since we're just moving the children to a new position.
     LayoutUnit mainAxisOffset = logicalHeight() - flowAwareBorderEnd() - flowAwarePaddingEnd();
-    mainAxisOffset -= initialJustifyContentOffset(availableFreeSpace, position, distribution, children.size());
+    mainAxisOffset -= initialJustifyContentOffset(availableFreeSpace, position, distribution, children.size(), isColumnOrRowReverse());
     mainAxisOffset -= isHorizontalFlow() ? verticalScrollbarWidth() : horizontalScrollbarHeight();
     
     for (size_t i = 0; i < children.size(); ++i) {
@@ -1933,9 +1951,11 @@
     }
 }
     
-static LayoutUnit initialAlignContentOffset(LayoutUnit availableFreeSpace, ContentPosition alignContent, ContentDistribution alignContentDistribution, unsigned numberOfLines)
+static LayoutUnit initialAlignContentOffset(LayoutUnit availableFreeSpace, ContentPosition alignContent, ContentDistribution alignContentDistribution, unsigned numberOfLines, bool isReversed)
 {
-    if (alignContent == ContentPosition::FlexEnd)
+    if (alignContent == ContentPosition::FlexEnd
+        || (alignContent == ContentPosition::End && !isReversed)
+        || (alignContent == ContentPosition::Start && isReversed))
         return availableFreeSpace;
     if (alignContent == ContentPosition::Center)
         return availableFreeSpace / 2;
@@ -1983,7 +2003,7 @@
     for (size_t i = 0; i < numLines; ++i)
         availableCrossAxisSpace -= lineContexts[i].crossAxisExtent;
 
-    LayoutUnit lineOffset = initialAlignContentOffset(availableCrossAxisSpace, position, distribution, numLines);
+    LayoutUnit lineOffset = initialAlignContentOffset(availableCrossAxisSpace, position, distribution, numLines, style().flexWrap() == FlexWrap::Reverse);
     for (unsigned lineNumber = 0; lineNumber < numLines; ++lineNumber) {
         LineContext& lineContext = lineContexts[lineNumber];
         lineContext.crossAxisOffset += lineOffset;

Modified: trunk/Source/WebCore/rendering/RenderFlexibleBox.h (281839 => 281840)


--- trunk/Source/WebCore/rendering/RenderFlexibleBox.h	2021-09-01 07:55:39 UTC (rev 281839)
+++ trunk/Source/WebCore/rendering/RenderFlexibleBox.h	2021-09-01 08:35:53 UTC (rev 281840)
@@ -109,6 +109,7 @@
     
     bool mainAxisIsChildInlineAxis(const RenderBox&) const;
     bool isColumnFlow() const;
+    bool isColumnOrRowReverse() const;
     bool isLeftToRightFlow() const;
     bool isMultiline() const;
     Length flexBasisForChild(const RenderBox& child) const;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to