No subject
Mon Jan 28 08:41:14 PST 2013
8091">r148091</a> by <jchaffraix at chromium.org>
Source/WebCore:
This change makes us match the updated specification by making
grid line numbers to always resolve against the
grid-{column|row}-start edge (the previous code would resolve
grid-{column|row}-end grid lines against the grid-{column|row}-end
edge).
To keep feature parity, negative numbers resolve against the
grid-{column|row}-end edge of the 'explicit grid'.
Test: fast/css-grid-layout/grid-item-negative-integer-explicit-grid-resol=
ution.html
* rendering/RenderGrid.cpp:
(WebCore::estimatedGridSizeForPosition):
(WebCore::RenderGrid::explicitGridColumnCount): New utility function.
(WebCore::RenderGrid::explicitGridRowCount): Ditto.
(WebCore::RenderGrid::maximumIndexInDirection): Use explicitGridXXXCount(=
).
(WebCore::RenderGrid::resolveGridPositionsFromStyle): Check that row-end =
> row-start.
(WebCore::RenderGrid::resolveGridPositionFromStyle): Clamp negative value=
s to the first line.
* rendering/RenderGrid.h:
* rendering/style/GridPosition.h:
LayoutTests:
Added a couple of new tests to cover the cases of grid resolutions
using negative integers. Negative integers must resolve against
the grid-{column|row}-end of the explicit grid.
* fast/css-grid-layout/grid-auto-flow-resolution-expected.txt:
* fast/css-grid-layout/grid-auto-flow-resolution.html:
* fast/css-grid-layout/grid-item-negative-integer-explicit-grid-resolutio=
n-expected.txt: Added.
* fast/css-grid-layout/grid-item-negative-integer-explicit-grid-resolutio=
n.html: Added.
* fast/css-grid-layout/grid-item-spanning-resolution-expected.txt:
* fast/css-grid-layout/grid-item-spanning-resolution.html:
* fast/css-grid-layout/resources/grid.css:
(.autoLastRowAutoLastColumn):
(.autoSecondRowAutoFirstColumn):
(.firstRowBothColumn):
(.secondRowBothColumn):
(.bothRowFirstColumn):
(.bothRowSecondColumn):
(.bothRowBothColumn):</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href=3D"#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a=
></li>
<li><a href=3D"#trunkLayoutTestsfastcssgridlayoutgridautoflowresolutionex=
pectedtxt">trunk/LayoutTests/fast/css-grid-layout/grid-auto-flow-resoluti=
on-expected.txt</a></li>
<li><a href=3D"#trunkLayoutTestsfastcssgridlayoutgridautoflowresolutionht=
ml">trunk/LayoutTests/fast/css-grid-layout/grid-auto-flow-resolution.html=
</a></li>
<li><a href=3D"#trunkLayoutTestsfastcssgridlayoutgriditemspanningresoluti=
onexpectedtxt">trunk/LayoutTests/fast/css-grid-layout/grid-item-spanning-=
resolution-expected.txt</a></li>
<li><a href=3D"#trunkLayoutTestsfastcssgridlayoutgriditemspanningresoluti=
onhtml">trunk/LayoutTests/fast/css-grid-layout/grid-item-spanning-resolut=
ion.html</a></li>
<li><a href=3D"#trunkLayoutTestsfastcssgridlayoutresourcesgridcss">trunk/=
LayoutTests/fast/css-grid-layout/resources/grid.css</a></li>
<li><a href=3D"#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeL=
og</a></li>
<li><a href=3D"#trunkSourceWebCorerenderingRenderGridcpp">trunk/Source/We=
bCore/rendering/RenderGrid.cpp</a></li>
<li><a href=3D"#trunkSourceWebCorerenderingRenderGridh">trunk/Source/WebC=
ore/rendering/RenderGrid.h</a></li>
<li><a href=3D"#trunkSourceWebCorerenderingstyleGridPositionh">trunk/Sour=
ce/WebCore/rendering/style/GridPosition.h</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href=3D"#trunkLayoutTestsfastcssgridlayoutgriditemnegativeintegere=
xplicitgridresolutionexpectedtxt">trunk/LayoutTests/fast/css-grid-layout/=
grid-item-negative-integer-explicit-grid-resolution-expected.txt</a></li>
<li><a href=3D"#trunkLayoutTestsfastcssgridlayoutgriditemnegativeintegere=
xplicitgridresolutionhtml">trunk/LayoutTests/fast/css-grid-layout/grid-it=
em-negative-integer-explicit-grid-resolution.html</a></li>
</ul>
</div>
<div id=3D"patch">
<h3>Diff</h3>
<a id=3D"trunkLayoutTestsChangeLog"></a>
<div class=3D"modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (154043 =
=3D> 154044)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/LayoutTests/ChangeLog 2013-08-14 10:12:38 =
UTC (rev 154043)
+++ trunk/LayoutTests/ChangeLog 2013-08-14 10:40:40 UTC (rev 154044)
</span><span class=3D"lines">@@ -1,3 +1,31 @@
</span><ins>+2013-08-13 Sergio Villar Senin <svillar at igalia.com>
+
+ [CSS Grid Layout] Align our grid-line handling with the updated =
specification
+ https://bugs.webkit.org/show_bug.cgi?id=3D113546
+
+ Reviewed by Andreas Kling.
+
+ From Blink r148091 by <jchaffraix at chromium.org>
+
+ Added a couple of new tests to cover the cases of grid resolutio=
ns
+ using negative integers. Negative integers must resolve against
+ the grid-{column|row}-end of the explicit grid.
+
+ * fast/css-grid-layout/grid-auto-flow-resolution-expected.txt:
+ * fast/css-grid-layout/grid-auto-flow-resolution.html:
+ * fast/css-grid-layout/grid-item-negative-integer-explicit-grid-=
resolution-expected.txt: Added.
+ * fast/css-grid-layout/grid-item-negative-integer-explicit-grid-=
resolution.html: Added.
+ * fast/css-grid-layout/grid-item-spanning-resolution-expected.tx=
t:
+ * fast/css-grid-layout/grid-item-spanning-resolution.html:
+ * fast/css-grid-layout/resources/grid.css:
+ (.autoLastRowAutoLastColumn):
+ (.autoSecondRowAutoFirstColumn):
+ (.firstRowBothColumn):
+ (.secondRowBothColumn):
+ (.bothRowFirstColumn):
+ (.bothRowSecondColumn):
+ (.bothRowBothColumn):
+
</ins><span class=3D"cx"> 2013-08-13 Gyuyoung Kim <gyuyoung.kim at sams=
ung.com>
</span><span class=3D"cx">=20
</span><span class=3D"cx"> The length of scheme is at least five =
characters even when the scheme has 'web+' prefix
</span></span></pre></div>
<a id=3D"trunkLayoutTestsfastcssgridlayoutgridautoflowresolutionexpectedt=
xt"></a>
<div class=3D"modfile"><h4>Modified: trunk/LayoutTests/fast/css-grid-layo=
ut/grid-auto-flow-resolution-expected.txt (154043 =3D> 154044)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/LayoutTests/fast/css-grid-layout/grid-auto=
-flow-resolution-expected.txt 2013-08-14 10:12:38 UTC (rev 154043)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-auto-flow-resolution-expe=
cted.txt 2013-08-14 10:40:40 UTC (rev 154044)
</span><span class=3D"lines">@@ -49,3 +49,9 @@
</span><span class=3D"cx"> XXXXX XXXXX XXXXX
</span><span class=3D"cx"> XXXXX XXXXX XXXXX
</span><span class=3D"cx"> PASS
</span><ins>+XXXXX XXXXX XXXXX
+XXXXX XXXXX XXXXX
+PASS
+XXXXX XXXXX XXXXX
+XXXXX XXXXX XXXXX
+PASS
</ins></span></pre></div>
<a id=3D"trunkLayoutTestsfastcssgridlayoutgridautoflowresolutionhtml"></a=
>
<div class=3D"modfile"><h4>Modified: trunk/LayoutTests/fast/css-grid-layo=
ut/grid-auto-flow-resolution.html (154043 =3D> 154044)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/LayoutTests/fast/css-grid-layout/grid-auto=
-flow-resolution.html 2013-08-14 10:12:38 UTC (rev 154043)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-auto-flow-resolution.html=
2013-08-14 10:40:40 UTC (rev 154044)
</span><span class=3D"lines">@@ -16,8 +16,6 @@
</span><span class=3D"cx"> -webkit-grid-definition-rows: 50px 100px 1=
50px 200px;
</span><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><del>-/* These 2 classes forces the grid to be sized after the gri=
d-{end|after}, thus end up in the
- first row / columns. */
</del><span class=3D"cx"> .overflowingRowFirstColumn {
</span><span class=3D"cx"> -webkit-grid-row: auto / 10;
</span><span class=3D"cx"> -webkit-grid-column: 1;
</span><span class=3D"lines">@@ -28,6 +26,18 @@
</span><span class=3D"cx"> -webkit-grid-column: auto / 8;
</span><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><ins>+/* These 2 classes forces the grid to be sized after the gri=
d-{column|row}-end, thus end up in the
+ first row / columns. */
+.negativeOverflowingRowFirstColumn {
+ -webkit-grid-row: auto / -10;
+ -webkit-grid-column: 1;
+}
+
+.secondRowNegativeOverflowingColumn {
+ -webkit-grid-row: 2;
+ -webkit-grid-column: auto / -8;
+}
+
</ins><span class=3D"cx"> .unconstrainedContainer {
</span><span class=3D"cx"> /* For accurate x / y offset. */
</span><span class=3D"cx"> position: relative;
</span><span class=3D"lines">@@ -92,7 +102,7 @@
</span><span class=3D"cx"> <!-- Using some 2 positions non-spanning fi=
xed grid-{row|column} -->
</span><span class=3D"cx"> <div class=3D"unconstrainedContainer&q=
uot;>
</span><span class=3D"cx"> <div class=3D"grid bigGrid gridAut=
oFlowColumn">
</span><del>- <div class=3D"sizedToGridArea autoFirstRowAu=
toFirstColumn" data-offset-x=3D"300" data-offset-y=3D"=
;300" data-expected-width=3D"200" data-expected-height=3D&=
quot;200">XXXXX XXXXX XXXXX</div>
</del><ins>+ <div class=3D"sizedToGridArea autoLastRowAuto=
LastColumn" data-offset-x=3D"300" data-offset-y=3D"30=
0" data-expected-width=3D"200" data-expected-height=3D&quo=
t;200">XXXXX XXXXX XXXXX</div>
</ins><span class=3D"cx"> <div class=3D"sizedToGridArea f=
irstAutoRowSecondAutoColumn" data-offset-x=3D"50" data-off=
set-y=3D"0" data-expected-width=3D"100" data-expected=
-height=3D"50">XXXXX XXXXX XXXXX</div>
</span><span class=3D"cx"> <div class=3D"sizedToGridArea =
secondRowAutoColumn" data-offset-x=3D"0" data-offset-y=3D&=
quot;50" data-expected-width=3D"50" data-expected-height=3D=
"100">XXXXX XXXXX XXXXX</div>
</span><span class=3D"cx"> <div class=3D"sizedToGridArea =
firstRowFirstColumn" data-offset-x=3D"0" data-offset-y=3D&=
quot;0" data-expected-width=3D"50" data-expected-height=3D=
"50">XXXXX XXXXX XXXXX</div>
</span><span class=3D"lines">@@ -102,7 +112,7 @@
</span><span class=3D"cx">=20
</span><span class=3D"cx"> <div class=3D"unconstrainedContainer&q=
uot;>
</span><span class=3D"cx"> <div class=3D"grid bigGrid gridAut=
oFlowRow">
</span><del>- <div class=3D"sizedToGridArea autoFirstRowAu=
toFirstColumn" data-offset-x=3D"300" data-offset-y=3D"=
;300" data-expected-width=3D"200" data-expected-height=3D&=
quot;200">XXXXX XXXXX XXXXX</div>
</del><ins>+ <div class=3D"sizedToGridArea autoLastRowAuto=
LastColumn" data-offset-x=3D"300" data-offset-y=3D"30=
0" data-expected-width=3D"200" data-expected-height=3D&quo=
t;200">XXXXX XXXXX XXXXX</div>
</ins><span class=3D"cx"> <div class=3D"sizedToGridArea f=
irstAutoRowSecondAutoColumn" data-offset-x=3D"50" data-off=
set-y=3D"0" data-expected-width=3D"100" data-expected=
-height=3D"50">XXXXX XXXXX XXXXX</div>
</span><span class=3D"cx"> <div class=3D"sizedToGridArea =
secondRowAutoColumn" data-offset-x=3D"0" data-offset-y=3D&=
quot;50" data-expected-width=3D"50" data-expected-height=3D=
"100">XXXXX XXXXX XXXXX</div>
</span><span class=3D"cx"> <div class=3D"sizedToGridArea =
firstRowFirstColumn" data-offset-x=3D"0" data-offset-y=3D&=
quot;0" data-expected-width=3D"50" data-expected-height=3D=
"50">XXXXX XXXXX XXXXX</div>
</span><span class=3D"lines">@@ -110,18 +120,31 @@
</span><span class=3D"cx"> </div>
</span><span class=3D"cx"> </div>
</span><span class=3D"cx">=20
</span><ins>+<div class=3D"unconstrainedContainer">
+ <div class=3D"grid bigGrid gridAutoFlowColumn">
+ <div class=3D"sizedToGridArea overflowingRowFirstColumn&=
quot; data-offset-x=3D"0" data-offset-y=3D"500" data-=
expected-width=3D"50" data-expected-height=3D"30">=
XXXXX XXXXX XXXXX</div>
+ <div class=3D"sizedToGridArea secondRowOverflowingColumn=
" data-offset-x=3D"500" data-offset-y=3D"50" dat=
a-expected-width=3D"170" data-expected-height=3D"100"=
>XXXXX XXXXX XXXXX</div>
+ </div>
+</div>
</ins><span class=3D"cx">=20
</span><span class=3D"cx"> <div class=3D"unconstrainedContainer&q=
uot;>
</span><ins>+ <div class=3D"grid bigGrid gridAutoFlowRow"=
>
+ <div class=3D"sizedToGridArea overflowingRowFirstColumn&=
quot; data-offset-x=3D"0" data-offset-y=3D"500" data-=
expected-width=3D"50" data-expected-height=3D"30">=
XXXXX XXXXX XXXXX</div>
+ <div class=3D"sizedToGridArea secondRowOverflowingColumn=
" data-offset-x=3D"500" data-offset-y=3D"50" dat=
a-expected-width=3D"170" data-expected-height=3D"100"=
>XXXXX XXXXX XXXXX</div>
+ </div>
+</div>
+
+<div class=3D"unconstrainedContainer">
</ins><span class=3D"cx"> <div class=3D"grid bigGrid gridAuto=
FlowColumn">
</span><del>- <div class=3D"sizedToGridArea overflowingRow=
FirstColumn" data-offset-x=3D"0" data-offset-y=3D"0&q=
uot; data-expected-width=3D"50" data-expected-height=3D"50=
">XXXXX XXXXX XXXXX</div>
- <div class=3D"sizedToGridArea secondRowOverflowingColumn=
" data-offset-x=3D"0" data-offset-y=3D"50" data-=
expected-width=3D"50" data-expected-height=3D"100">=
;XXXXX XXXXX XXXXX</div>
</del><ins>+ <div class=3D"sizedToGridArea negativeOverflo=
wingRowFirstColumn" data-offset-x=3D"0" data-offset-y=3D&q=
uot;0" data-expected-width=3D"50" data-expected-height=3D&=
quot;50">XXXXX XXXXX XXXXX</div>
+ <div class=3D"sizedToGridArea secondRowNegativeOverflowi=
ngColumn" data-offset-x=3D"0" data-offset-y=3D"50&quo=
t; data-expected-width=3D"50" data-expected-height=3D"100&=
quot;>XXXXX XXXXX XXXXX</div>
</ins><span class=3D"cx"> </div>
</span><span class=3D"cx"> </div>
</span><span class=3D"cx">=20
</span><span class=3D"cx"> <div class=3D"unconstrainedContainer&q=
uot;>
</span><span class=3D"cx"> <div class=3D"grid bigGrid gridAut=
oFlowRow">
</span><del>- <div class=3D"sizedToGridArea overflowingRow=
FirstColumn" data-offset-x=3D"0" data-offset-y=3D"0&q=
uot; data-expected-width=3D"50" data-expected-height=3D"50=
">XXXXX XXXXX XXXXX</div>
- <div class=3D"sizedToGridArea secondRowOverflowingColumn=
" data-offset-x=3D"0" data-offset-y=3D"50" data-=
expected-width=3D"50" data-expected-height=3D"100">=
;XXXXX XXXXX XXXXX</div>
</del><ins>+ <div class=3D"sizedToGridArea negativeOverflo=
wingRowFirstColumn" data-offset-x=3D"0" data-offset-y=3D&q=
uot;0" data-expected-width=3D"50" data-expected-height=3D&=
quot;50">XXXXX XXXXX XXXXX</div>
+ <div class=3D"sizedToGridArea secondRowNegativeOverflowi=
ngColumn" data-offset-x=3D"0" data-offset-y=3D"50&quo=
t; data-expected-width=3D"50" data-expected-height=3D"100&=
quot;>XXXXX XXXXX XXXXX</div>
</ins><span class=3D"cx"> </div>
</span><span class=3D"cx"> </div>
</span><span class=3D"cx">=20
</span></span></pre></div>
<a id=3D"trunkLayoutTestsfastcssgridlayoutgriditemnegativeintegerexplicit=
gridresolutionexpectedtxt"></a>
<div class=3D"addfile"><h4>Added: trunk/LayoutTests/fast/css-grid-layout/=
grid-item-negative-integer-explicit-grid-resolution-expected.txt (0 =3D> =
154044)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/LayoutTests/fast/css-grid-layout/grid-item=
-negative-integer-explicit-grid-resolution-expected.txt =
(rev 0)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-item-negative-integer-exp=
licit-grid-resolution-expected.txt 2013-08-14 10:40:40 UTC (rev 154044)
</span><span class=3D"lines">@@ -0,0 +1,10 @@
</span><ins>+Test that negative <integer> positions are resolved ag=
ainst the explicit grid (that is don't account for implicit columns and r=
ows).
+
+XXXXXX XXXXX XXXXX
+PASS
+XXXXXX XXXXX XXXXX
+PASS
+XXXXXX XXXXX XXXXX
+PASS
+XXXXXX XXXXX XXXXX
+PASS
</ins></span></pre></div>
<a id=3D"trunkLayoutTestsfastcssgridlayoutgriditemnegativeintegerexplicit=
gridresolutionhtml"></a>
<div class=3D"addfile"><h4>Added: trunk/LayoutTests/fast/css-grid-layout/=
grid-item-negative-integer-explicit-grid-resolution.html (0 =3D> 154044)<=
/h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/LayoutTests/fast/css-grid-layout/grid-item=
-negative-integer-explicit-grid-resolution.html (=
rev 0)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-item-negative-integer-exp=
licit-grid-resolution.html 2013-08-14 10:40:40 UTC (rev 154044)
</span><span class=3D"lines">@@ -0,0 +1,55 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<script>
+if (window.testRunner)
+ testRunner.overridePreference("WebKitCSSGridLayoutEnabled"=
, 1);
+</script>
+<link href=3D"resources/grid.css" rel=3D"stylesheet&qu=
ot;>
+<style>
+.columnGrid {
+ -webkit-grid-definition-columns: 50px 100px;
+ /* -webkit-grid-definition-rows is left unset so that the grid items=
' row is implicit. */
+ font: 10px/1 Ahem;
+}
+
+.rowGrid {
+ -webkit-grid-definition-rows: 50px 100px;
+ /* -webkit-grid-definition-columns is left unset so that the grid it=
ems' column is implicit. */
+ font: 10px/1 Ahem;
+}
+</style>
+<script src=3D"../../resources/check-layout.js"></scr=
ipt>
+<body onload=3D"checkLayout('.grid');">
+
+<p>Test that negative &lt;integer&gt; positions are resolv=
ed against the explicit grid (that is don't account for implicit columns =
and rows).</p>
+
+<div class=3D"constrainedContainer">
+ <div class=3D"grid columnGrid">
+ <div class=3D"sizedToGridArea autoRowThirdColumn" d=
ata-expected-width=3D"60" data-expected-height=3D"30"=
>XXXXXX XXXXX XXXXX</div>
+ <div class=3D"sizedToGridArea autoLastRowAutoLastColumn&=
quot; data-expected-width=3D"100" data-expected-height=3D"=
30"></div>
+ </div>
+</div>
+
+<div class=3D"constrainedContainer">
+ <div class=3D"grid columnGrid">
+ <div class=3D"sizedToGridArea thirdRowAutoColumn" d=
ata-expected-width=3D"50" data-expected-height=3D"30"=
>XXXXXX XXXXX XXXXX</div>
+ <div class=3D"sizedToGridArea autoLastRowAutoLastColumn&=
quot; data-expected-width=3D"100" data-expected-height=3D"=
0"></div>
+ </div>
+</div>
+
+<div class=3D"constrainedContainer">
+ <div class=3D"grid rowGrid">
+ <div class=3D"sizedToGridArea autoRowThirdColumn" d=
ata-expected-width=3D"60" data-expected-height=3D"50"=
>XXXXXX XXXXX XXXXX</div>
+ <div class=3D"sizedToGridArea autoLastRowAutoLastColumn&=
quot; data-expected-width=3D"0" data-expected-height=3D"10=
0"></div>
+ </div>
+</div>
+
+<div class=3D"constrainedContainer">
+ <div class=3D"grid rowGrid">
+ <div class=3D"sizedToGridArea thirdRowAutoColumn" d=
ata-expected-width=3D"60" data-expected-height=3D"30"=
>XXXXXX XXXXX XXXXX</div>
+ <div class=3D"sizedToGridArea autoLastRowAutoLastColumn&=
quot; data-expected-width=3D"60" data-expected-height=3D"1=
00"></div>
+ </div>
+</div>
+
+</body>
+</html>
</ins></span></pre></div>
<a id=3D"trunkLayoutTestsfastcssgridlayoutgriditemspanningresolutionexpec=
tedtxt"></a>
<div class=3D"modfile"><h4>Modified: trunk/LayoutTests/fast/css-grid-layo=
ut/grid-item-spanning-resolution-expected.txt (154043 =3D> 154044)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/LayoutTests/fast/css-grid-layout/grid-item=
-spanning-resolution-expected.txt 2013-08-14 10:12:38 UTC (rev 154043)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-item-spanning-resolution-=
expected.txt 2013-08-14 10:40:40 UTC (rev 154044)
</span><span class=3D"lines">@@ -8,10 +8,6 @@
</span><span class=3D"cx"> PASS
</span><span class=3D"cx"> PASS
</span><span class=3D"cx"> PASS
</span><del>-FAIL:
-Expected 240 for width, but got 160.=20
-Expected 160 for offsetLeft, but got 0.=20
-
-<div class=3D"grid" data-expected-width=3D"400" d=
ata-expected-height=3D"300">
- <div class=3D"sizedToGridArea autoSecondRowAutoFirstColumn&q=
uot; data-offset-x=3D"160" data-offset-y=3D"0" data-e=
xpected-width=3D"240" data-expected-height=3D"90">=
</div>
-</div>
</del><ins>+PASS
+PASS
+PASS
</ins></span></pre></div>
<a id=3D"trunkLayoutTestsfastcssgridlayoutgriditemspanningresolutionhtml"=
></a>
<div class=3D"modfile"><h4>Modified: trunk/LayoutTests/fast/css-grid-layo=
ut/grid-item-spanning-resolution.html (154043 =3D> 154044)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/LayoutTests/fast/css-grid-layout/grid-item=
-spanning-resolution.html 2013-08-14 10:12:38 UTC (rev 154043)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-item-spanning-resolution.=
html 2013-08-14 10:40:40 UTC (rev 154044)
</span><span class=3D"lines">@@ -13,11 +13,21 @@
</span><span class=3D"cx"> height: 300px;
</span><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><ins>+.negativeOverflowRowFirstColumn {
+ -webkit-grid-row: 1 / -5;
+ -webkit-grid-column: 1;
+}
+
</ins><span class=3D"cx"> .overflowRowFirstColumn {
</span><span class=3D"cx"> -webkit-grid-row: 1 / 5;
</span><span class=3D"cx"> -webkit-grid-column: 1;
</span><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><ins>+.firstRowNegativeOverflowColumn {
+ -webkit-grid-row: 1;
+ -webkit-grid-column: 1 / -5;
+}
+
</ins><span class=3D"cx"> .firstRowOverflowColumn {
</span><span class=3D"cx"> -webkit-grid-row: 1;
</span><span class=3D"cx"> -webkit-grid-column: 1 / 5;
</span><span class=3D"lines">@@ -60,25 +70,37 @@
</span><span class=3D"cx">=20
</span><span class=3D"cx"> <div style=3D"position: relative"=
>
</span><span class=3D"cx"> <div class=3D"grid" data-expected=
-width=3D"400" data-expected-height=3D"300">
</span><del>- <div class=3D"sizedToGridArea overflowRowFirstCo=
lumn" data-offset-x=3D"0" data-offset-y=3D"0" da=
ta-expected-width=3D"160" data-expected-height=3D"90"=
></div>
</del><ins>+ <div class=3D"sizedToGridArea negativeOverflowRow=
FirstColumn" data-offset-x=3D"0" data-offset-y=3D"0&q=
uot; data-expected-width=3D"160" data-expected-height=3D"9=
0"></div>
</ins><span class=3D"cx"> </div>
</span><span class=3D"cx"> </div>
</span><span class=3D"cx">=20
</span><span class=3D"cx"> <div style=3D"position: relative"=
>
</span><span class=3D"cx"> <div class=3D"grid" data-expected=
-width=3D"400" data-expected-height=3D"300">
</span><del>- <div class=3D"sizedToGridArea firstRowOverflowCo=
lumn" data-offset-x=3D"0" data-offset-y=3D"0" da=
ta-expected-width=3D"160" data-expected-height=3D"90"=
></div>
</del><ins>+ <div class=3D"sizedToGridArea overflowRowFirstCol=
umn" data-offset-x=3D"0" data-offset-y=3D"0" dat=
a-expected-width=3D"160" data-expected-height=3D"300"=
></div>
</ins><span class=3D"cx"> </div>
</span><span class=3D"cx"> </div>
</span><span class=3D"cx">=20
</span><span class=3D"cx"> <div style=3D"position: relative"=
>
</span><span class=3D"cx"> <div class=3D"grid" data-expected=
-width=3D"400" data-expected-height=3D"300">
</span><ins>+ <div class=3D"sizedToGridArea firstRowNegativeOv=
erflowColumn" data-offset-x=3D"0" data-offset-y=3D"0&=
quot; data-expected-width=3D"160" data-expected-height=3D"=
90"></div>
+</div>
+</div>
+
+<div style=3D"position: relative">
+<div class=3D"grid" data-expected-width=3D"400" d=
ata-expected-height=3D"300">
+ <div class=3D"sizedToGridArea firstRowOverflowColumn" d=
ata-offset-x=3D"0" data-offset-y=3D"0" data-expected-=
width=3D"400" data-expected-height=3D"90"></div=
>
+</div>
+</div>
+
+<div style=3D"position: relative">
+<div class=3D"grid" data-expected-width=3D"400" d=
ata-expected-height=3D"300">
</ins><span class=3D"cx"> <div class=3D"sizedToGridArea first=
AutoRowSecondAutoColumn" data-offset-x=3D"160" data-offset=
-y=3D"0" data-expected-width=3D"240" data-expected-he=
ight=3D"90"></div>
</span><span class=3D"cx"> </div>
</span><span class=3D"cx"> </div>
</span><span class=3D"cx">=20
</span><span class=3D"cx"> <div style=3D"position: relative"=
>
</span><span class=3D"cx"> <div class=3D"grid" data-expected=
-width=3D"400" data-expected-height=3D"300">
</span><del>- <div class=3D"sizedToGridArea autoSecondRowAutoF=
irstColumn" data-offset-x=3D"160" data-offset-y=3D"0&=
quot; data-expected-width=3D"240" data-expected-height=3D"=
90"></div>
</del><ins>+ <div class=3D"sizedToGridArea autoSecondRowAutoFi=
rstColumn" data-offset-x=3D"0" data-offset-y=3D"90&qu=
ot; data-expected-width=3D"160" data-expected-height=3D"21=
0"></div>
</ins><span class=3D"cx"> </div>
</span><span class=3D"cx"> </div>
</span><span class=3D"cx">=20
</span></span></pre></div>
<a id=3D"trunkLayoutTestsfastcssgridlayoutresourcesgridcss"></a>
<div class=3D"modfile"><h4>Modified: trunk/LayoutTests/fast/css-grid-layo=
ut/resources/grid.css (154043 =3D> 154044)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/LayoutTests/fast/css-grid-layout/resources=
/grid.css 2013-08-14 10:12:38 UTC (rev 154043)
+++ trunk/LayoutTests/fast/css-grid-layout/resources/grid.css 2013-08-14 =
10:40:40 UTC (rev 154044)
</span><span class=3D"lines">@@ -37,34 +37,39 @@
</span><span class=3D"cx"> -webkit-grid-column: 2 / auto;
</span><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><del>-.autoFirstRowAutoFirstColumn {
- -webkit-grid-row: auto / 1;
</del><ins>+.autoLastRowAutoLastColumn {
+ -webkit-grid-row: auto / -1;
+ -webkit-grid-column: auto / -1;
+}
+
+.autoSecondRowAutoFirstColumn {
+ -webkit-grid-row: auto / 2;
</ins><span class=3D"cx"> -webkit-grid-column: auto / 1;
</span><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><span class=3D"cx"> .firstRowBothColumn {
</span><span class=3D"cx"> -webkit-grid-row: 1;
</span><del>- -webkit-grid-column: 1 / 1;
</del><ins>+ -webkit-grid-column: 1 / -1;
</ins><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><span class=3D"cx"> .secondRowBothColumn {
</span><span class=3D"cx"> -webkit-grid-row: 2;
</span><del>- -webkit-grid-column: 1 / 1;
</del><ins>+ -webkit-grid-column: 1 / -1;
</ins><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><span class=3D"cx"> .bothRowFirstColumn {
</span><del>- -webkit-grid-row: 1 / 1;
</del><ins>+ -webkit-grid-row: 1 / -1;
</ins><span class=3D"cx"> -webkit-grid-column: 1;
</span><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><span class=3D"cx"> .bothRowSecondColumn {
</span><del>- -webkit-grid-row: 1 / 1;
</del><ins>+ -webkit-grid-row: 1 / -1;
</ins><span class=3D"cx"> -webkit-grid-column: 2;
</span><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><span class=3D"cx"> .bothRowBothColumn {
</span><del>- -webkit-grid-row: 1 / 1;
- -webkit-grid-column: 1 / 1;
</del><ins>+ -webkit-grid-row: 1 / -1;
+ -webkit-grid-column: 1 / -1;
</ins><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><span class=3D"cx"> /* Auto column / row. */
</span></span></pre></div>
<a id=3D"trunkSourceWebCoreChangeLog"></a>
<div class=3D"modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (1540=
43 =3D> 154044)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/ChangeLog 2013-08-14 10:12:=
38 UTC (rev 154043)
+++ trunk/Source/WebCore/ChangeLog 2013-08-14 10:40:40 UTC (rev 154044)
</span><span class=3D"lines">@@ -1,3 +1,33 @@
</span><ins>+2013-08-13 Sergio Villar Senin <svillar at igalia.com>
+
+ [CSS Grid Layout] Align our grid-line handling with the updated =
specification
+ https://bugs.webkit.org/show_bug.cgi?id=3D113546
+
+ Reviewed by Andreas Kling.
+
+ From Blink r148091 by <jchaffraix at chromium.org>
+
+ This change makes us match the updated specification by making
+ grid line numbers to always resolve against the
+ grid-{column|row}-start edge (the previous code would resolve
+ grid-{column|row}-end grid lines against the grid-{column|row}-e=
nd
+ edge).
+
+ To keep feature parity, negative numbers resolve against the
+ grid-{column|row}-end edge of the 'explicit grid'.
+
+ Test: fast/css-grid-layout/grid-item-negative-integer-explicit-g=
rid-resolution.html
+
+ * rendering/RenderGrid.cpp:
+ (WebCore::estimatedGridSizeForPosition):
+ (WebCore::RenderGrid::explicitGridColumnCount): New utility func=
tion.
+ (WebCore::RenderGrid::explicitGridRowCount): Ditto.
+ (WebCore::RenderGrid::maximumIndexInDirection): Use explicitGrid=
XXXCount().
+ (WebCore::RenderGrid::resolveGridPositionsFromStyle): Check that=
row-end > row-start.
+ (WebCore::RenderGrid::resolveGridPositionFromStyle): Clamp negat=
ive values to the first line.
+ * rendering/RenderGrid.h:
+ * rendering/style/GridPosition.h:
+
</ins><span class=3D"cx"> 2013-08-14 Gyuyoung Kim <gyuyoung.kim at sams=
ung.com>
</span><span class=3D"cx">=20
</span><span class=3D"cx"> Add toSVGTextPathElement(), and use it
</span></span></pre></div>
<a id=3D"trunkSourceWebCorerenderingRenderGridcpp"></a>
<div class=3D"modfile"><h4>Modified: trunk/Source/WebCore/rendering/Rende=
rGrid.cpp (154043 =3D> 154044)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/rendering/RenderGrid.cpp 20=
13-08-14 10:12:38 UTC (rev 154043)
+++ trunk/Source/WebCore/rendering/RenderGrid.cpp 2013-08-14 10:40:40 UTC=
(rev 154044)
</span><span class=3D"lines">@@ -333,15 +333,25 @@
</span><span class=3D"cx"> if (position.isAuto())
</span><span class=3D"cx"> return 1;
</span><span class=3D"cx">=20
</span><ins>+ // Negative explicit values never grow the grid as they =
are clamped against
+ // the explicit grid's size. Thus we don't special case them here.
</ins><span class=3D"cx"> return std::max(position.integerPosition(),=
1);
</span><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><ins>+size_t RenderGrid::explicitGridColumnCount() const
+{
+ return style()->gridColumns().size();
+}
+
+size_t RenderGrid::explicitGridRowCount() const
+{
+ return style()->gridRows().size();
+}
+
</ins><span class=3D"cx"> size_t RenderGrid::maximumIndexInDirection(Trac=
kSizingDirection direction) const
</span><span class=3D"cx"> {
</span><del>- const Vector<GridTrackSize>& trackStyles =3D (=
direction =3D=3D ForColumns) ? style()->gridColumns() : style()->gr=
idRows();
</del><ins>+ size_t maximumIndex =3D std::max<size_t>(1, (direct=
ion =3D=3D ForColumns) ? explicitGridColumnCount() : explicitGridRowCount=
());
</ins><span class=3D"cx">=20
</span><del>- size_t maximumIndex =3D std::max<size_t>(1, trackS=
tyles.size());
-
</del><span class=3D"cx"> for (RenderBox* child =3D firstChildBox(); =
child; child =3D child->nextSiblingBox()) {
</span><span class=3D"cx"> // This function bypasses the cache (c=
achedGridCoordinate()) as it is used to build it.
</span><span class=3D"cx"> // Also we can't call resolveGridPosit=
ionsFromStyle here as it assumes that the grid is build and we are in
</span><span class=3D"lines">@@ -748,7 +758,14 @@
</span><span class=3D"cx"> return adoptPtr(new GridSpan(initialRe=
solvedPosition, initialResolvedPosition));
</span><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><del>- return adoptPtr(new GridSpan(resolveGridPositionFromStyl=
e(initialPosition, initialPositionSide), resolveGridPositionFromStyle(fin=
alPosition, finalPositionSide)));
</del><ins>+ size_t resolvedInitialPosition =3D resolveGridPositionFro=
mStyle(initialPosition, initialPositionSide);
+ size_t resolvedFinalPosition =3D resolveGridPositionFromStyle(finalP=
osition, finalPositionSide);
+
+ // If 'grid-row-end' specifies a line at or before that specified by=
'grid-row-start', it computes to 'span 1'.
+ if (resolvedFinalPosition < resolvedInitialPosition)
+ resolvedFinalPosition =3D resolvedInitialPosition;
+
+ return adoptPtr(new GridSpan(resolvedInitialPosition, resolvedFinalP=
osition));
</ins><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><span class=3D"cx"> size_t RenderGrid::resolveGridPositionFromStyl=
e(const GridPosition& position, GridPositionSide side) const
</span><span class=3D"lines">@@ -758,14 +775,18 @@
</span><span class=3D"cx"> // FIXME: Handle other values for grid-{ro=
w,column} like ranges or line names.
</span><span class=3D"cx"> switch (position.type()) {
</span><span class=3D"cx"> case IntegerPosition: {
</span><del>- // FIXME: What does a non-positive integer mean for =
a column/row?
- size_t resolvedPosition =3D position.isPositive() ? position.int=
egerPosition() - 1 : 0;
</del><ins>+ if (position.isPositive())
+ return position.integerPosition() - 1;
</ins><span class=3D"cx">=20
</span><del>- if (side =3D=3D ColumnStartSide || side =3D=3D RowSt=
artSide)
- return resolvedPosition;
</del><ins>+ size_t resolvedPosition =3D abs(position.integerPosit=
ion());
+ // FIXME: This returns one less than the expected result for sid=
e =3D=3D ColumnStartSide or RowStartSide as we don't properly convert
+ // the grid line to its grid track. However this avoids the issu=
e of growing the grid when inserting the item (e.g. -1 / auto).
+ const size_t endOfTrack =3D (side =3D=3D ColumnStartSide || side=
=3D=3D ColumnEndSide) ? explicitGridColumnCount() : explicitGridRowCount=
();
</ins><span class=3D"cx">=20
</span><del>- const size_t endOfTrack =3D (side =3D=3D ColumnEndSi=
de) ? gridColumnCount() - 1 : gridRowCount() - 1;
- ASSERT(endOfTrack >=3D resolvedPosition);
</del><ins>+ // Per http://lists.w3.org/Archives/Public/www-style/=
2013Mar/0589.html, we clamp negative value to the first line.
+ if (endOfTrack < resolvedPosition)
+ return 0;
+
</ins><span class=3D"cx"> return endOfTrack - resolvedPosition;
</span><span class=3D"cx"> }
</span><span class=3D"cx"> case AutoPosition:
</span></span></pre></div>
<a id=3D"trunkSourceWebCorerenderingRenderGridh"></a>
<div class=3D"modfile"><h4>Modified: trunk/Source/WebCore/rendering/Rende=
rGrid.h (154043 =3D> 154044)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/rendering/RenderGrid.h 2013=
-08-14 10:12:38 UTC (rev 154043)
+++ trunk/Source/WebCore/rendering/RenderGrid.h 2013-08-14 10:40:40 UTC (=
rev 154044)
</span><span class=3D"lines">@@ -110,6 +110,8 @@
</span><span class=3D"cx"> void distributeSpaceToTracks(Vector<Gri=
dTrack*>&, Vector<GridTrack*>* tracksForGrowthAboveMaxBreadt=
h, AccumulatorGetter, AccumulatorGrowFunction, LayoutUnit& availableL=
ogicalSpace);
</span><span class=3D"cx">=20
</span><span class=3D"cx"> const GridTrackSize& gridTrackSize(Tra=
ckSizingDirection, size_t) const;
</span><ins>+ size_t explicitGridColumnCount() const;
+ size_t explicitGridRowCount() const;
</ins><span class=3D"cx"> size_t maximumIndexInDirection(TrackSizingD=
irection) const;
</span><span class=3D"cx">=20
</span><span class=3D"cx"> LayoutUnit logicalContentHeightForChild(Re=
nderBox*, Vector<GridTrack>&);
</span></span></pre></div>
<a id=3D"trunkSourceWebCorerenderingstyleGridPositionh"></a>
<div class=3D"modfile"><h4>Modified: trunk/Source/WebCore/rendering/style=
/GridPosition.h (154043 =3D> 154044)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/rendering/style/GridPositio=
n.h 2013-08-14 10:12:38 UTC (rev 154043)
+++ trunk/Source/WebCore/rendering/style/GridPosition.h 2013-08-14 10:40:=
40 UTC (rev 154044)
</span><span class=3D"lines">@@ -88,7 +88,6 @@
</span><span class=3D"cx">=20
</span><span class=3D"cx"> private:
</span><span class=3D"cx"> GridPositionType m_type;
</span><del>- // FIXME: This should probably be a size_t but the spec =
currently allows any <integer>.
</del><span class=3D"cx"> int m_integerPosition;
</span><span class=3D"cx"> };
</span><span class=3D"cx">=20
</span></span></pre>
</div>
</div>
</body>
</html>
More information about the webkit-changes
mailing list