Title: [279278] trunk
Revision
279278
Author
[email protected]
Date
2021-06-25 06:58:25 -0700 (Fri, 25 Jun 2021)

Log Message

[css-grid] Consider container's writing mode to get grid item's margin
https://bugs.webkit.org/show_bug.cgi?id=226877

Reviewed by Sergio Villar Senin.

LayoutTests/imported/w3c:

Update test results.

* web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008-expected.txt:
* web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011-expected.txt:

Source/WebCore:

When computing the logical offset of a non-static absolute positioned grid item, we need
to pass its container's style in order to resolve the child margin correctly, especially
for the case when the item has flipped block writing mode (vertical-rl).

This change is an import of the Chromium change at
https://chromium-review.googlesource.com/c/chromium/src/+/2577365

* rendering/RenderBox.h:
(WebCore::RenderBox::marginLogicalLeft const):
(WebCore::RenderBox::marginLogicalRight const):
* rendering/RenderGrid.cpp:
(WebCore::RenderGrid::logicalOffsetForOutOfFlowChild const):

Modified Paths

Diff

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (279277 => 279278)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2021-06-25 13:49:07 UTC (rev 279277)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2021-06-25 13:58:25 UTC (rev 279278)
@@ -1,5 +1,17 @@
 2021-06-25  Ziran Sun  <[email protected]>
 
+        [css-grid] Consider container's writing mode to get grid item's margin
+        https://bugs.webkit.org/show_bug.cgi?id=226877
+
+        Reviewed by Sergio Villar Senin.
+
+        Update test results.
+  
+        * web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008-expected.txt:
+        * web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011-expected.txt:
+
+2021-06-25  Ziran Sun  <[email protected]>
+
         Resync web-platform-tests/css/css-grid tests from upstream
         https://bugs.webkit.org/show_bug.cgi?id=223593
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008-expected.txt (279277 => 279278)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008-expected.txt	2021-06-25 13:49:07 UTC (rev 279277)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008-expected.txt	2021-06-25 13:58:25 UTC (rev 279278)
@@ -22,29 +22,8 @@
 X
 XX XXX
 
-FAIL .grid 1 assert_equals:
-<div class="grid">
-  <div data-offset-x="25" data-offset-y="5" data-expected-width="10" data-expected-height="60" class="firstRowFirstColumn verticalLR">X XX X</div>
-  <div data-offset-x="200" data-offset-y="65" data-expected-width="30" data-expected-height="70" class="firstRowSecondColumn verticalRL">XX X<br>X XXX X<br>XX XXX</div>
-  <div data-offset-x="20" data-offset-y="165" data-expected-width="60" data-expected-height="10" class="secondRowFirstColumn RTL">X XX X</div>
-  <div data-offset-x="125" data-offset-y="165" data-expected-width="40" data-expected-height="60" class="secondRowSecondColumn verticalLR RTL">XX X<br>X XXX<br>X<br>XX XXX</div>
-</div>
-offsetLeft expected 200 but got 210
-FAIL .grid 2 assert_equals:
-<div class="grid RTL">
-  <div data-offset-x="175" data-offset-y="5" data-expected-width="10" data-expected-height="60" class="firstRowFirstColumn verticalLR">X XX X</div>
-  <div data-offset-x="100" data-offset-y="65" data-expected-width="30" data-expected-height="70" class="firstRowSecondColumn verticalRL">XX X<br>X XXX X<br>XX XXX</div>
-  <div data-offset-x="180" data-offset-y="165" data-expected-width="60" data-expected-height="10" class="secondRowFirstColumn LTR">X XX X</div>
-  <div data-offset-x="25" data-offset-y="165" data-expected-width="40" data-expected-height="60" class="secondRowSecondColumn verticalRL RTL">XX X<br>X XXX<br>X<br>XX XXX</div>
-</div>
-offsetLeft expected 100 but got 110
+PASS .grid 1
+PASS .grid 2
 PASS .grid 3
-FAIL .grid 4 assert_equals:
-<div class="grid verticalRL">
-  <div data-offset-x="125" data-offset-y="75" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn horizontal">X XX X</div>
-  <div data-offset-x="160" data-offset-y="155" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn horizontal">XX X<br>X XXX X<br>XX XXX</div>
-  <div data-offset-x="25" data-offset-y="15" data-expected-width="60" data-expected-height="10" class="secondRowFirstColumn horizontal RTL">X XX X</div>
-  <div data-offset-x="25" data-offset-y="115" data-expected-width="40" data-expected-height="60" class="secondRowSecondColumn verticalLR">XX X<br>X XXX<br>X<br>XX XXX</div>
-</div>
-offsetLeft expected 125 but got 135
+PASS .grid 4
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011-expected.txt (279277 => 279278)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011-expected.txt	2021-06-25 13:49:07 UTC (rev 279277)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011-expected.txt	2021-06-25 13:58:25 UTC (rev 279278)
@@ -22,29 +22,8 @@
 X
 XX XXX
 
-FAIL .grid 1 assert_equals:
-<div class="grid">
-  <div data-offset-x="13" data-offset-y="2" data-expected-width="26" data-expected-height="70" class="firstRowFirstColumn verticalLR">X XX X</div>
-  <div data-offset-x="190" data-offset-y="64" data-expected-width="46" data-expected-height="80" class="firstRowSecondColumn verticalRL">XX X<br>X XXX X<br>XX XXX</div>
-  <div data-offset-x="8" data-offset-y="162" data-expected-width="76" data-expected-height="20" class="secondRowFirstColumn RTL">X XX X</div>
-  <div data-offset-x="113" data-offset-y="162" data-expected-width="56" data-expected-height="70" class="secondRowSecondColumn verticalLR RTL">XX X<br>X XXX<br>X<br>XX XXX</div>
-</div>
-offsetLeft expected 190 but got 194
-FAIL .grid 2 assert_equals:
-<div class="grid RTL">
-  <div data-offset-x="163" data-offset-y="2" data-expected-width="26" data-expected-height="70" class="firstRowFirstColumn verticalLR">X XX X</div>
-  <div data-offset-x="90" data-offset-y="64" data-expected-width="46" data-expected-height="80" class="firstRowSecondColumn verticalRL">XX X<br>X XXX X<br>XX XXX</div>
-  <div data-offset-x="170" data-offset-y="162" data-expected-width="76" data-expected-height="20" class="secondRowFirstColumn LTR">X XX X</div>
-  <div data-offset-x="13" data-offset-y="162" data-expected-width="56" data-expected-height="70" class="secondRowSecondColumn verticalRL RTL">XX X<br>X XXX<br>X<br>XX XXX</div>
-</div>
-offsetLeft expected 90 but got 94
+PASS .grid 1
+PASS .grid 2
 PASS .grid 3
-FAIL .grid 4 assert_equals:
-<div class="grid verticalRL">
-  <div data-offset-x="113" data-offset-y="74" data-expected-width="76" data-expected-height="20" class="firstRowFirstColumn horizontal">X XX X</div>
-  <div data-offset-x="150" data-offset-y="153" data-expected-width="86" data-expected-height="40" class="firstRowSecondColumn horizontal">XX X<br>X XXX X<br>XX XXX</div>
-  <div data-offset-x="14" data-offset-y="12" data-expected-width="76" data-expected-height="20" class="secondRowFirstColumn horizontal RTL">X XX X</div>
-  <div data-offset-x="13" data-offset-y="112" data-expected-width="56" data-expected-height="70" class="secondRowSecondColumn verticalLR">XX X<br>X XXX<br>X<br>XX XXX</div>
-</div>
-offsetLeft expected 113 but got 117
+PASS .grid 4
 

Modified: trunk/Source/WebCore/ChangeLog (279277 => 279278)


--- trunk/Source/WebCore/ChangeLog	2021-06-25 13:49:07 UTC (rev 279277)
+++ trunk/Source/WebCore/ChangeLog	2021-06-25 13:58:25 UTC (rev 279278)
@@ -1,3 +1,23 @@
+2021-06-25  Ziran Sun  <[email protected]>
+
+        [css-grid] Consider container's writing mode to get grid item's margin
+        https://bugs.webkit.org/show_bug.cgi?id=226877
+
+        Reviewed by Sergio Villar Senin.
+
+        When computing the logical offset of a non-static absolute positioned grid item, we need
+        to pass its container's style in order to resolve the child margin correctly, especially
+        for the case when the item has flipped block writing mode (vertical-rl).
+
+        This change is an import of the Chromium change at
+        https://chromium-review.googlesource.com/c/chromium/src/+/2577365
+
+        * rendering/RenderBox.h:
+        (WebCore::RenderBox::marginLogicalLeft const):
+        (WebCore::RenderBox::marginLogicalRight const):
+        * rendering/RenderGrid.cpp:
+        (WebCore::RenderGrid::logicalOffsetForOutOfFlowChild const):
+
 2021-06-25  Philippe Normand  <[email protected]>
 
         [GStreamer] Minor debugging improvements in mediastream source element

Modified: trunk/Source/WebCore/rendering/RenderBox.h (279277 => 279278)


--- trunk/Source/WebCore/rendering/RenderBox.h	2021-06-25 13:49:07 UTC (rev 279277)
+++ trunk/Source/WebCore/rendering/RenderBox.h	2021-06-25 13:58:25 UTC (rev 279278)
@@ -265,9 +265,9 @@
     void setMarginLeft(LayoutUnit margin) { m_marginBox.setLeft(margin); }
     void setMarginRight(LayoutUnit margin) { m_marginBox.setRight(margin); }
 
-    LayoutUnit marginLogicalLeft() const { return m_marginBox.start(style().writingMode()); }
-    LayoutUnit marginLogicalRight() const { return m_marginBox.end(style().writingMode()); }
-    
+    LayoutUnit marginLogicalLeft(const RenderStyle* overrideStyle = nullptr) const { return m_marginBox.start((overrideStyle ? overrideStyle : &style())->writingMode()); }
+    LayoutUnit marginLogicalRight(const RenderStyle* overrideStyle = nullptr) const { return m_marginBox.end((overrideStyle ? overrideStyle : &style())->writingMode()); }
+
     LayoutUnit marginBefore(const RenderStyle* overrideStyle = nullptr) const final { return m_marginBox.before((overrideStyle ? overrideStyle : &style())->writingMode()); }
     LayoutUnit marginAfter(const RenderStyle* overrideStyle = nullptr) const final { return m_marginBox.after((overrideStyle ? overrideStyle : &style())->writingMode()); }
     LayoutUnit marginStart(const RenderStyle* overrideStyle = nullptr) const final

Modified: trunk/Source/WebCore/rendering/RenderGrid.cpp (279277 => 279278)


--- trunk/Source/WebCore/rendering/RenderGrid.cpp	2021-06-25 13:49:07 UTC (rev 279277)
+++ trunk/Source/WebCore/rendering/RenderGrid.cpp	2021-06-25 13:58:25 UTC (rev 279278)
@@ -1588,7 +1588,7 @@
     bool isFlowAwareRowAxis = GridLayoutFunctions::flowAwareDirectionForChild(*this, child, direction) == ForColumns;
     LayoutUnit childPosition = isFlowAwareRowAxis ? child.logicalLeft() : child.logicalTop();
     LayoutUnit gridBorder = isRowAxis ? borderLogicalLeft() : borderBefore();
-    LayoutUnit childMargin = isFlowAwareRowAxis ? child.marginLogicalLeft() : child.marginBefore();
+    LayoutUnit childMargin = isRowAxis ? child.marginLogicalLeft(&style()) : child.marginBefore(&style());
     LayoutUnit offset = childPosition - gridBorder - childMargin;
     if (!isRowAxis || style().isLeftToRightDirection())
         return offset;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to