Changeset 192154 in webkit
- Timestamp:
- Nov 9, 2015 4:56:43 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 8 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r192153 r192154 1 2015-11-02 Sergio Villar Senin <svillar@igalia.com> 2 3 [css-grid] Improve grid container sizing with size constraints and intrinsic sizes 4 https://bugs.webkit.org/show_bug.cgi?id=150679 5 6 Reviewed by Darin Adler. 7 8 * fast/css-grid-layout/absolute-positioning-definite-sizes-expected.txt: Added. 9 * fast/css-grid-layout/absolute-positioning-definite-sizes.html: Added. 10 * fast/css-grid-layout/flex-and-intrinsic-sizes-expected.txt: Added. 11 * fast/css-grid-layout/flex-and-intrinsic-sizes.html: Added. 12 * fast/css-grid-layout/grid-element-change-columns-repaint.html: 13 * fast/css-grid-layout/grid-item-change-column-repaint.html: 14 * fast/css-grid-layout/grid-preferred-logical-widths.html: 15 * fast/css-grid-layout/maximize-tracks-definite-indefinite-height-expected.txt: Added. 16 * fast/css-grid-layout/maximize-tracks-definite-indefinite-height.html: Added. 17 * fast/css-grid-layout/maximize-tracks-definite-indefinite-width-expected.txt: Added. 18 * fast/css-grid-layout/maximize-tracks-definite-indefinite-width.html: Added. 19 * fast/css-grid-layout/percent-of-indefinite-track-size.html: 20 * fast/events/key-events-in-editable-gridbox-expected.txt: 21 * fast/events/key-events-in-editable-gridbox.html: Added more test 22 cases for intrinsic and fixed sized heights. 23 1 24 2015-11-05 Sergio Villar Senin <svillar@igalia.com> 2 25 -
trunk/LayoutTests/fast/css-grid-layout/grid-element-change-columns-repaint.html
r168416 r192154 17 17 18 18 .grid { 19 width: -webkit- fit-content;19 width: -webkit-min-content; 20 20 -webkit-grid-template-rows: 50px; 21 21 -webkit-grid-template-columns: minmax(100px, 180px) 100px minmax(50px, 100px); -
trunk/LayoutTests/fast/css-grid-layout/grid-item-change-column-repaint.html
r168416 r192154 17 17 18 18 .grid { 19 width: -webkit- fit-content;19 width: -webkit-min-content; 20 20 -webkit-grid-template-rows: 50px; 21 21 -webkit-grid-template-columns: minmax(100px, 180px) 100px minmax(50px, 100px); -
trunk/LayoutTests/fast/css-grid-layout/grid-preferred-logical-widths.html
r189166 r192154 44 44 } 45 45 46 .dummyContainer { }47 48 46 .minWidth70 { 49 47 min-width: 70px; … … 57 55 </head> 58 56 <script src="../../resources/check-layout.js"></script> 59 <body onload="checkLayout('. dummyContainer')">57 <body onload="checkLayout('.grid')"> 60 58 <body> 61 59 <p>This test checks that the grid element's preferred logical widths are properly computed with different combinations of minmax().</p> 62 <div class="dummyContainer"> 63 <div class="grid gridMinContentFixed min-content" data-expected-height="10" data-expected-width="40"> 64 <div class="firstRowFirstColumn">XX XX XX</div> 65 <div class="firstRowSecondColumn">XX XX XX</div> 66 </div> 67 </div> 68 69 <div class="dummyContainer"> 70 <div class="grid gridMinContentFixed max-content" data-expected-height="10" data-expected-width="80"> 71 <div class="firstRowFirstColumn">XX XX XX</div> 72 <div class="firstRowSecondColumn">XX XX XX</div> 73 </div> 74 </div> 75 76 <div class="dummyContainer"> 77 <div class="grid gridFixedMinContent min-content" data-expected-height="10" data-expected-width="60"> 78 <div class="firstRowFirstColumn">XXXXX XXXXX</div> 79 <div class="firstRowSecondColumn">XXXXX XXXXX</div> 80 </div> 81 </div> 82 83 <div class="dummyContainer"> 84 <div class="grid gridFixedMinContent max-content" data-expected-height="10" data-expected-width="100"> 85 <div class="firstRowFirstColumn">XXXXX XXXXX</div> 86 <div class="firstRowSecondColumn">XXXXX XXXXX</div> 87 </div> 88 </div> 89 90 <div class="dummyContainer"> 91 <div class="grid gridFixedMaxContent min-content" data-expected-height="10" data-expected-width="80"> 92 <div class="firstRowFirstColumn">XX XX XX</div> 93 <div class="firstRowSecondColumn">XX XX XX</div> 94 </div> 95 </div> 96 97 <div class="dummyContainer"> 98 <div class="grid gridFixedMaxContent max-content" data-expected-height="10" data-expected-width="160"> 99 <div class="firstRowFirstColumn">XX XX XX</div> 100 <div class="firstRowSecondColumn">XX XX XX</div> 101 </div> 102 </div> 103 104 <div class="dummyContainer"> 105 <div class="grid gridFixedFixed min-content" data-expected-height="10" data-expected-width="60"></div> 106 </div> 107 108 <div class="dummyContainer"> 109 <div class="grid gridFixedFixed max-content" data-expected-height="10" data-expected-width="80"></div> 110 </div> 111 112 <div class="dummyContainer"> 113 <div class="grid gridAutoContent min-content" data-expected-height="10" data-expected-width="40"> 114 <div class="firstRowFirstColumn">XX XX XX</div> 115 <div class="firstRowSecondColumn">XX XX XX</div> 116 </div> 117 </div> 118 119 <div class="dummyContainer"> 120 <div class="grid gridAutoContent max-content" data-expected-height="10" data-expected-width="160"> 121 <div class="firstRowFirstColumn">XX XX XX</div> 122 <div class="firstRowSecondColumn">XX XX XX</div> 123 </div> 124 </div> 125 126 <div class="dummyContainer"> 127 <div class="grid gridFixedFraction min-content" data-expected-height="10" data-expected-width="10"></div> 128 </div> 129 130 <div class="dummyContainer"> 131 <div class="grid gridFixedFraction max-content" data-expected-height="10" data-expected-width="30"></div> 132 </div> 60 <div class="grid gridMinContentFixed min-content" data-expected-height="10" data-expected-width="40"> 61 <div class="firstRowFirstColumn">XX XX XX</div> 62 <div class="firstRowSecondColumn">XX XX XX</div> 63 </div> 64 65 <div class="grid gridMinContentFixed max-content" data-expected-height="10" data-expected-width="80"> 66 <div class="firstRowFirstColumn">XX XX XX</div> 67 <div class="firstRowSecondColumn">XX XX XX</div> 68 </div> 69 70 <div class="grid gridFixedMinContent min-content" data-expected-height="10" data-expected-width="60"> 71 <div class="firstRowFirstColumn">XXXXX XXXXX</div> 72 <div class="firstRowSecondColumn">XXXXX XXXXX</div> 73 </div> 74 75 <div class="grid gridFixedMinContent max-content" data-expected-height="10" data-expected-width="100"> 76 <div class="firstRowFirstColumn">XXXXX XXXXX</div> 77 <div class="firstRowSecondColumn">XXXXX XXXXX</div> 78 </div> 79 80 <div class="grid gridFixedMaxContent min-content" data-expected-height="10" data-expected-width="80"> 81 <div class="firstRowFirstColumn">XX XX XX</div> 82 <div class="firstRowSecondColumn">XX XX XX</div> 83 </div> 84 85 <div class="grid gridFixedMaxContent max-content" data-expected-height="10" data-expected-width="160"> 86 <div class="firstRowFirstColumn">XX XX XX</div> 87 <div class="firstRowSecondColumn">XX XX XX</div> 88 </div> 89 90 <div class="grid gridFixedFixed min-content" data-expected-height="10" data-expected-width="60"></div> 91 92 <div class="grid gridFixedFixed max-content" data-expected-height="10" data-expected-width="80"></div> 93 94 <div class="grid gridAutoContent min-content" data-expected-height="10" data-expected-width="40"> 95 <div class="firstRowFirstColumn">XX XX XX</div> 96 <div class="firstRowSecondColumn">XX XX XX</div> 97 </div> 98 99 <div class="grid gridAutoContent max-content" data-expected-height="10" data-expected-width="160"> 100 <div class="firstRowFirstColumn">XX XX XX</div> 101 <div class="firstRowSecondColumn">XX XX XX</div> 102 </div> 103 104 <div class="grid gridFixedFraction min-content" data-expected-height="10" data-expected-width="10"></div> 105 106 <div class="grid gridFixedFraction max-content" data-expected-height="10" data-expected-width="30"></div> 133 107 <!-- Now with margin on one of the grid items. --> 134 <div class="dummyContainer"> 135 <div class="grid gridMinContentFixed min-content" data-expected-height="10" data-expected-width="100"> 136 <div class="firstRowFirstColumn">XX XX XX</div> 137 <div class="firstRowSecondColumn margins">XX XX XX</div> 138 </div> 139 </div> 140 141 <div class="dummyContainer"> 142 <div class="grid gridMinContentFixed max-content" data-expected-height="10" data-expected-width="120"> 143 <div class="firstRowFirstColumn margins">XX XX XX</div> 144 <div class="firstRowSecondColumn">XX XX XX</div> 145 </div> 146 </div> 147 148 <div class="dummyContainer"> 149 <div class="grid gridFixedMinContent min-content" data-expected-height="10" data-expected-width="60"> 150 <div class="firstRowFirstColumn">XXXXX XXXXX</div> 151 <div class="firstRowSecondColumn margins">XXXXX XXXXX</div> 152 </div> 153 </div> 154 155 <div class="dummyContainer"> 156 <div class="grid gridFixedMinContent max-content" data-expected-height="10" data-expected-width="160"> 157 <div class="firstRowFirstColumn margins">XXXXX XXXXX</div> 158 <div class="firstRowSecondColumn">XXXXX XXXXX</div> 159 </div> 160 </div> 161 162 <div class="dummyContainer"> 163 <div class="grid gridFixedMaxContent min-content" data-expected-height="10" data-expected-width="80"> 164 <div class="firstRowFirstColumn">XX XX XX</div> 165 <div class="firstRowSecondColumn margins">XX XX XX</div> 166 </div> 167 </div> 168 169 <div class="dummyContainer"> 170 <div class="grid gridFixedMaxContent max-content" data-expected-height="10" data-expected-width="220"> 171 <div class="firstRowFirstColumn margins">XX XX XX</div> 172 <div class="firstRowSecondColumn">XX XX XX</div> 173 </div> 108 <div class="grid gridMinContentFixed min-content" data-expected-height="10" data-expected-width="100"> 109 <div class="firstRowFirstColumn">XX XX XX</div> 110 <div class="firstRowSecondColumn margins">XX XX XX</div> 111 </div> 112 113 <div class="grid gridMinContentFixed max-content" data-expected-height="10" data-expected-width="120"> 114 <div class="firstRowFirstColumn margins">XX XX XX</div> 115 <div class="firstRowSecondColumn">XX XX XX</div> 116 </div> 117 118 <div class="grid gridFixedMinContent min-content" data-expected-height="10" data-expected-width="60"> 119 <div class="firstRowFirstColumn">XXXXX XXXXX</div> 120 <div class="firstRowSecondColumn margins">XXXXX XXXXX</div> 121 </div> 122 123 <div class="grid gridFixedMinContent max-content" data-expected-height="10" data-expected-width="160"> 124 <div class="firstRowFirstColumn margins">XXXXX XXXXX</div> 125 <div class="firstRowSecondColumn">XXXXX XXXXX</div> 126 </div> 127 128 <div class="grid gridFixedMaxContent min-content" data-expected-height="10" data-expected-width="80"> 129 <div class="firstRowFirstColumn">XX XX XX</div> 130 <div class="firstRowSecondColumn margins">XX XX XX</div> 131 </div> 132 133 <div class="grid gridFixedMaxContent max-content" data-expected-height="10" data-expected-width="220"> 134 <div class="firstRowFirstColumn margins">XX XX XX</div> 135 <div class="firstRowSecondColumn">XX XX XX</div> 174 136 </div> 175 137 176 138 <!-- Spanning cells --> 177 <div class="dummyContainer"> 178 <div class="grid gridMinContentFixed min-content" data-expected-height="10" data-expected-width="20"> 179 <div class="firstRowBothColumn">XX XX XX</div> 180 </div> 181 </div> 182 183 <div class="dummyContainer"> 184 <div class="grid gridFixedMinContent max-content" data-expected-height="10" data-expected-width="80"> 185 <div class="firstRowBothColumn">XXXXX XXXXX</div> 186 <div class="firstRowSecondColumn">XXXXX XXXXX</div> 187 </div> 188 </div> 189 190 <div class="dummyContainer"> 191 <div class="grid gridFixedMaxContent max-content" data-expected-height="10" data-expected-width="80"> 192 <div class="firstRowBothColumn">XX XX XX</div> 193 <div class="firstRowBothColumn">XX XX XX</div> 194 </div> 195 </div> 196 197 <div class="dummyContainer"> 198 <div class="grid gridAutoContent min-content" data-expected-height="10" data-expected-width="20"> 199 <div class="firstRowFirstColumn">XX XX XX</div> 200 <div class="firstRowBothColumn">XX XX XX</div> 201 </div> 202 </div> 203 204 <div class="dummyContainer"> 205 <div class="grid gridAutoContent max-content" data-expected-height="10" data-expected-width="80"> 206 <div class="firstRowBothColumn">XX XX XX</div> 207 <div class="firstRowSecondColumn">XX XX XX</div> 208 </div> 139 <div class="grid gridMinContentFixed min-content" data-expected-height="10" data-expected-width="20"> 140 <div class="firstRowBothColumn">XX XX XX</div> 141 </div> 142 143 <div class="grid gridFixedMinContent max-content" data-expected-height="10" data-expected-width="80"> 144 <div class="firstRowBothColumn">XXXXX XXXXX</div> 145 <div class="firstRowSecondColumn">XXXXX XXXXX</div> 146 </div> 147 148 <div class="grid gridFixedMaxContent max-content" data-expected-height="10" data-expected-width="80"> 149 <div class="firstRowBothColumn">XX XX XX</div> 150 <div class="firstRowBothColumn">XX XX XX</div> 151 </div> 152 153 <div class="grid gridAutoContent min-content" data-expected-height="10" data-expected-width="20"> 154 <div class="firstRowFirstColumn">XX XX XX</div> 155 <div class="firstRowBothColumn">XX XX XX</div> 156 </div> 157 158 <div class="grid gridAutoContent max-content" data-expected-height="10" data-expected-width="80"> 159 <div class="firstRowBothColumn">XX XX XX</div> 160 <div class="firstRowSecondColumn">XX XX XX</div> 209 161 </div> 210 162 211 163 <!-- Grids under min-width / max-width constraints --> 212 <div class="dummyContainer min-content" data-expected-height="10" data-expected-width="70"> 213 <div class="grid gridMinContentFixed minWidth70" data-expected-height="10" data-expected-width="70"> 214 <div class="firstRowFirstColumn">XX XX XX</div> 215 <div class="firstRowSecondColumn">XX XX XX</div> 216 </div> 217 </div> 218 219 <div class="dummyContainer max-content" data-expected-height="10" data-expected-width="20"> 220 <div class="grid gridMinContentFixed maxWidth20" data-expected-height="10" data-expected-width="20"> 221 <div class="firstRowFirstColumn">XX XX XX</div> 222 <div class="firstRowSecondColumn">XX XX XX</div> 223 </div> 224 </div> 225 226 <div class="dummyContainer min-content" data-expected-height="10" data-expected-width="70"> 227 <div class="grid gridFixedMinContent minWidth70" data-expected-height="10" data-expected-width="70"> 228 <div class="firstRowFirstColumn">XXXXX XXXXX</div> 229 <div class="firstRowSecondColumn">XXXXX XXXXX</div> 230 </div> 231 </div> 232 233 <div class="dummyContainer max-content" data-expected-height="10" data-expected-width="20"> 234 <div class="grid gridFixedMinContent maxWidth20" data-expected-height="10" data-expected-width="20"> 235 <div class="firstRowFirstColumn">XXXXX XXXXX</div> 236 <div class="firstRowSecondColumn">XXXXX XXXXX</div> 237 </div> 238 </div> 239 240 <div class="dummyContainer min-content" data-expected-height="10" data-expected-width="80"> 241 <div class="grid gridFixedMaxContent minWidth70" data-expected-height="10" data-expected-width="80"> 242 <div class="firstRowFirstColumn">XX XX XX</div> 243 <div class="firstRowSecondColumn">XX XX XX</div> 244 </div> 245 </div> 246 247 <div class="dummyContainer max-content" data-expected-height="10" data-expected-width="20"> 248 <div class="grid gridFixedMaxContent maxWidth20" data-expected-height="10" data-expected-width="20"> 249 <div class="firstRowFirstColumn">XX XX XX</div> 250 <div class="firstRowSecondColumn">XX XX XX</div> 251 </div> 252 </div> 253 254 <div class="dummyContainer min-content" data-expected-height="10" data-expected-width="70"> 255 <div class="grid gridFixedFixed minWidth70" data-expected-height="10" data-expected-width="70"></div> 256 </div> 257 258 <div class="dummyContainer max-content" data-expected-height="10" data-expected-width="20"> 259 <div class="grid gridFixedFixed maxWidth20" data-expected-height="10" data-expected-width="20"></div> 260 </div> 261 262 <div class="dummyContainer min-content" data-expected-height="10" data-expected-width="70"> 263 <div class="grid gridAutoContent minWidth70" data-expected-height="10" data-expected-width="70"> 264 <div class="firstRowFirstColumn">XX XX XX</div> 265 <div class="firstRowSecondColumn">XX XX XX</div> 266 </div> 267 </div> 268 269 <div class="dummyContainer max-content" data-expected-height="10" data-expected-width="20"> 270 <div class="grid gridAutoContent maxWidth20" data-expected-height="10" data-expected-width="20"> 271 <div class="firstRowFirstColumn">XX XX XX</div> 272 <div class="firstRowSecondColumn">XX XX XX</div> 273 </div> 274 </div> 275 276 <div class="dummyContainer min-content" data-expected-height="10" data-expected-width="70"> 277 <div class="grid gridFixedFraction minWidth70" data-expected-height="10" data-expected-width="70"></div> 278 </div> 279 280 <div class="dummyContainer max-content" data-expected-height="10" data-expected-width="20"> 281 <div class="grid gridFixedFraction maxWidth20" data-expected-height="10" data-expected-width="20"></div> 282 </div> 164 <div class="min-content grid gridMinContentFixed minWidth70" data-expected-height="10" data-expected-width="70"> 165 <div class="firstRowFirstColumn">XX XX XX</div> 166 <div class="firstRowSecondColumn">XX XX XX</div> 167 </div> 168 169 <div class="max-content grid gridMinContentFixed maxWidth20" data-expected-height="10" data-expected-width="20"> 170 <div class="firstRowFirstColumn">XX XX XX</div> 171 <div class="firstRowSecondColumn">XX XX XX</div> 172 </div> 173 174 <div class="min-content grid gridFixedMinContent minWidth70" data-expected-height="10" data-expected-width="70"> 175 <div class="firstRowFirstColumn">XXXXX XXXXX</div> 176 <div class="firstRowSecondColumn">XXXXX XXXXX</div> 177 </div> 178 179 <div class="max-content grid gridFixedMinContent maxWidth20" data-expected-height="10" data-expected-width="20"> 180 <div class="firstRowFirstColumn">XXXXX XXXXX</div> 181 <div class="firstRowSecondColumn">XXXXX XXXXX</div> 182 </div> 183 184 <div class="min-content grid gridFixedMaxContent minWidth70" data-expected-height="10" data-expected-width="80"> 185 <div class="firstRowFirstColumn">XX XX XX</div> 186 <div class="firstRowSecondColumn">XX XX XX</div> 187 </div> 188 189 <div class="max-content grid gridFixedMaxContent maxWidth20" data-expected-height="10" data-expected-width="20"> 190 <div class="firstRowFirstColumn">XX XX XX</div> 191 <div class="firstRowSecondColumn">XX XX XX</div> 192 </div> 193 194 <div class="min-content grid gridFixedFixed minWidth70" data-expected-height="10" data-expected-width="70"></div> 195 196 <div class="max-content grid gridFixedFixed maxWidth20" data-expected-height="10" data-expected-width="20"></div> 197 198 <div class="min-content grid gridAutoContent minWidth70" data-expected-height="10" data-expected-width="70"> 199 <div class="firstRowFirstColumn">XX XX XX</div> 200 <div class="firstRowSecondColumn">XX XX XX</div> 201 </div> 202 203 <div class="max-content grid gridAutoContent maxWidth20" data-expected-height="10" data-expected-width="20"> 204 <div class="firstRowFirstColumn">XX XX XX</div> 205 <div class="firstRowSecondColumn">XX XX XX</div> 206 </div> 207 208 <div class="min-content grid gridFixedFraction minWidth70" data-expected-height="10" data-expected-width="70"></div> 209 210 <div class="max-content grid gridFixedFraction maxWidth20" data-expected-height="10" data-expected-width="20"></div> 283 211 284 212 </body> -
trunk/LayoutTests/fast/css-grid-layout/percent-of-indefinite-track-size.html
r178642 r192154 4 4 .indefiniteSizeGrid { 5 5 font: 10px/1 Ahem; 6 width: -webkit-min-content; 6 7 } 7 8 .gridWithPercent { -
trunk/LayoutTests/fast/events/key-events-in-editable-gridbox-expected.txt
r180050 r192154 1 PASS targetDiv.innerText is "TEST" 2 PASS targetDiv.innerText is "" 3 PASS targetDiv.innerText is "TEST" 4 PASS targetDiv.innerText is "TEST" 5 PASS targetDiv.innerText is "" 6 PASS targetDiv.innerText is "TEST" 1 7 PASS targetDiv.innerText is "TEST" 2 8 PASS targetDiv.innerText is "" … … 6 12 TEST COMPLETE 7 13 TEST 14 TEST 15 TEST -
trunk/LayoutTests/fast/events/key-events-in-editable-gridbox.html
r180050 r192154 4 4 <script src="../../resources/js-test.js"></script> 5 5 <style> 6 #target { 7 display: -webkit-grid; 8 6 .grid { display: -webkit-grid; } 7 .intrinsicSize { height: -webkit-min-content; } 8 .fixedSize { height: 1px; } 9 9 </style> 10 11 <div id="targetAuto" class="grid" contentEditable>T</div> 12 <div id="targetFixed" class="grid fixedSize" contentEditable>T</div> 13 <div id="targetIntrinsic" class="grid intrinsicSize" contentEditable>T</div> 14 10 15 <script> 11 12 function test()13 14 targetDiv = document.getElementById('target');15 16 var targetDiv; 17 function test(id) 18 { 19 targetDiv = document.getElementById(id); 20 targetDiv.focus(); 16 21 17 18 22 // Move cursor to the end of line. 23 getSelection().modify('move', 'forward', 'lineboundary'); 19 24 20 21 25 document.execCommand("insertText", false, "EST"); 26 shouldBeEqualToString("targetDiv.innerText", "TEST"); 22 27 23 24 25 26 27 28 28 document.execCommand("delete"); 29 document.execCommand("delete"); 30 document.execCommand("delete"); 31 document.execCommand("delete"); 32 document.execCommand("delete"); // Remove '\n' 33 shouldBeEmptyString("targetDiv.innerText"); 29 34 30 document.execCommand("insertText", false, "TEST"); 31 shouldBeEqualToString("targetDiv.innerText", "TEST"); 32 } 35 document.execCommand("insertText", false, "TEST"); 36 shouldBeEqualToString("targetDiv.innerText", "TEST"); 37 } 38 test("targetAuto"); 39 test("targetFixed"); 40 test("targetIntrinsic"); 33 41 </script> 34 </head>35 <body onload="test()">36 <div id="target" contentEditable>T</div>37 </body>38 </html> -
trunk/Source/WebCore/ChangeLog
r192153 r192154 1 2015-11-02 Sergio Villar Senin <svillar@igalia.com> 2 3 [css-grid] Improve grid container sizing with size constraints and intrinsic sizes 4 https://bugs.webkit.org/show_bug.cgi?id=150679 5 6 Reviewed by Darin Adler. 7 8 The grid container stores from now on its min-content and 9 max-content block sizes in order to be able to properly 10 compute its intrinsic size. It has to redefine 11 computeIntrinsicLogicalContentHeightUsing() because the 12 behavior of grid is different to "normal" blocks: 13 14 - the min-content size is the sum of the grid container's 15 track sizes in the appropiate axis when the grid is sized 16 under a min-content constraint. 17 - the max-content size is the sum of the grid container's 18 track sizes in the appropiate axis when the grid is sized 19 under a max-content constraint. 20 - the auto block size is the max-content size. 21 22 A nice side effect is that we can now properly detect whether 23 the grid has a definite size on a given axis or not. 24 25 Tests: fast/css-grid-layout/absolute-positioning-definite-sizes.html 26 fast/css-grid-layout/flex-and-intrinsic-sizes.html 27 fast/css-grid-layout/maximize-tracks-definite-indefinite-height.html 28 fast/css-grid-layout/maximize-tracks-definite-indefinite-width.html 29 30 * rendering/RenderBox.h: made 31 computeIntrinsicLogicalContentHeightUsing() virtual. 32 * rendering/RenderGrid.cpp: 33 (WebCore::RenderGrid::GridSizingData::GridSizingData): 34 (WebCore::RenderGrid::GridSizingData::freeSpaceForDirection): 35 (WebCore::RenderGrid::GridSizingData::setFreeSpaceForDirection): 36 (WebCore::RenderGrid::computeTrackBasedLogicalHeight): 37 (WebCore::RenderGrid::computeTrackSizesForDirection): 38 (WebCore::RenderGrid::layoutBlock): 39 (WebCore::RenderGrid::computeIntrinsicLogicalWidths): 40 (WebCore::RenderGrid::computeIntrinsicLogicalHeight): 41 (WebCore::RenderGrid::computeIntrinsicLogicalContentHeightUsing): 42 (WebCore::RenderGrid::computeUsedBreadthOfGridTracks): 43 (WebCore::RenderGrid::distributeSpaceToTracks): 44 (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth): 45 (WebCore::RenderGrid::applyStretchAlignmentToTracksIfNeeded): 46 (WebCore::RenderGrid::layoutGridItems): 47 (WebCore::RenderGrid::populateGridPositions): 48 (WebCore::RenderGrid::gridElementIsShrinkToFit): Deleted. 49 * rendering/RenderGrid.h: 50 1 51 2015-11-05 Sergio Villar Senin <svillar@igalia.com> 2 52 -
trunk/Source/WebCore/rendering/RenderBox.h
r192054 r192154 653 653 654 654 LayoutUnit computeIntrinsicLogicalWidthUsing(Length logicalWidthLength, LayoutUnit availableLogicalWidth, LayoutUnit borderAndPadding) const; 655 Optional<LayoutUnit> computeIntrinsicLogicalContentHeightUsing(Length logicalHeightLength, Optional<LayoutUnit> intrinsicContentHeight, LayoutUnit borderAndPadding) const;655 virtual Optional<LayoutUnit> computeIntrinsicLogicalContentHeightUsing(Length logicalHeightLength, Optional<LayoutUnit> intrinsicContentHeight, LayoutUnit borderAndPadding) const; 656 656 657 657 virtual bool shouldComputeSizeAsReplaced() const { return isReplaced() && !isInlineBlockOrInlineTable(); } -
trunk/Source/WebCore/rendering/RenderGrid.cpp
r192054 r192154 211 211 WTF_MAKE_NONCOPYABLE(GridSizingData); 212 212 public: 213 GridSizingData(unsigned gridColumnCount, unsigned gridRowCount , LayoutUnit freeSpaceForColumns, LayoutUnit freeSpaceForRows)213 GridSizingData(unsigned gridColumnCount, unsigned gridRowCount) 214 214 : columnTracks(gridColumnCount) 215 215 , rowTracks(gridRowCount) 216 , freeSpaceForColumns(freeSpaceForColumns)217 , freeSpaceForRows(freeSpaceForRows)218 216 { 219 217 } … … 228 226 Vector<GridItemWithSpan> itemsSortedByIncreasingSpan; 229 227 230 LayoutUnit& freeSpaceForDirection(GridTrackSizingDirection direction) { return direction == ForColumns ? freeSpaceForColumns : freeSpaceForRows; } 228 Optional<LayoutUnit> freeSpaceForDirection(GridTrackSizingDirection direction) { return direction == ForColumns ? freeSpaceForColumns : freeSpaceForRows; } 229 void setFreeSpaceForDirection(GridTrackSizingDirection, Optional<LayoutUnit> freeSpace); 231 230 232 231 private: 233 LayoutUnitfreeSpaceForColumns;234 LayoutUnitfreeSpaceForRows;232 Optional<LayoutUnit> freeSpaceForColumns; 233 Optional<LayoutUnit> freeSpaceForRows; 235 234 }; 235 236 void RenderGrid::GridSizingData::setFreeSpaceForDirection(GridTrackSizingDirection direction, Optional<LayoutUnit> freeSpace) 237 { 238 if (direction == ForColumns) 239 freeSpaceForColumns = freeSpace; 240 else 241 freeSpaceForRows = freeSpace; 242 } 236 243 237 244 RenderGrid::RenderGrid(Element& element, Ref<RenderStyle>&& style) … … 294 301 } 295 302 303 LayoutUnit RenderGrid::computeTrackBasedLogicalHeight(const GridSizingData& sizingData) const 304 { 305 LayoutUnit logicalHeight; 306 307 for (const auto& row : sizingData.rowTracks) 308 logicalHeight += row.baseSize(); 309 310 logicalHeight += guttersSize(ForRows, sizingData.rowTracks.size()); 311 312 return logicalHeight; 313 } 314 315 void RenderGrid::computeTrackSizesForDirection(GridTrackSizingDirection direction, GridSizingData& sizingData, LayoutUnit freeSpace) 316 { 317 ASSERT(freeSpace >= 0); 318 LayoutUnit totalGuttersSize = guttersSize(direction, direction == ForRows ? gridRowCount() : gridColumnCount()); 319 freeSpace = std::max<LayoutUnit>(0, freeSpace - totalGuttersSize); 320 sizingData.setFreeSpaceForDirection(direction, freeSpace); 321 322 LayoutUnit baseSizes, growthLimits; 323 computeUsedBreadthOfGridTracks(direction, sizingData, baseSizes, growthLimits); 324 ASSERT(tracksAreWiderThanMinTrackBreadth(direction, sizingData)); 325 } 326 296 327 void RenderGrid::layoutBlock(bool relayoutChildren, LayoutUnit) 297 328 { … … 301 332 return; 302 333 303 // FIXME: Much of this method is boiler plate that matches RenderBox::layoutBlock and Render*FlexibleBox::layoutBlock.304 // It would be nice to refactor some of the duplicate code.305 334 LayoutRepainter repainter(*this, checkForRepaintDuringLayout()); 306 335 LayoutStateMaintainer statePusher(view(), *this, locationOffset(), hasTransform() || hasReflection() || style().isFlippedBlocksWritingMode()); … … 312 341 setLogicalHeight(0); 313 342 updateLogicalWidth(); 314 315 layoutGridItems(); 343 bool logicalHeightWasIndefinite = !computeContentLogicalHeight(MainOrPreferredSize, style().logicalHeight(), Nullopt); 344 345 placeItemsOnGrid(); 346 347 GridSizingData sizingData(gridColumnCount(), gridRowCount()); 348 349 // At this point the logical width is always definite as the above call to updateLogicalWidth() 350 // properly resolves intrinsic sizes. We cannot do the same for heights though because many code 351 // paths inside updateLogicalHeight() require a previous call to setLogicalHeight() to resolve 352 // heights properly (like for positioned items for example). 353 computeTrackSizesForDirection(ForColumns, sizingData, availableLogicalWidth()); 354 355 if (logicalHeightWasIndefinite) 356 computeIntrinsicLogicalHeight(sizingData); 357 else 358 computeTrackSizesForDirection(ForRows, sizingData, availableLogicalHeight(ExcludeMarginBorderPadding)); 359 setLogicalHeight(computeTrackBasedLogicalHeight(sizingData) + borderAndPaddingLogicalHeight()); 316 360 317 361 LayoutUnit oldClientAfterEdge = clientLogicalBottom(); 318 362 updateLogicalHeight(); 363 364 // The above call might have changed the grid's logical height depending on min|max height restrictions. 365 // Update the sizes of the rows whose size depends on the logical height (also on definite|indefinite sizes). 366 if (logicalHeightWasIndefinite) 367 computeTrackSizesForDirection(ForRows, sizingData, logicalHeight()); 368 369 // Grid container should have the minimum height of a line if it's editable. That does not affect track sizing though. 370 if (hasLineIfEmpty()) { 371 LayoutUnit minHeightForEmptyLine = borderAndPaddingLogicalHeight() 372 + lineHeight(true, isHorizontalWritingMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes) 373 + scrollbarLogicalHeight(); 374 setLogicalHeight(std::max(logicalHeight(), minHeightForEmptyLine)); 375 } 376 377 applyStretchAlignmentToTracksIfNeeded(ForColumns, sizingData); 378 applyStretchAlignmentToTracksIfNeeded(ForRows, sizingData); 379 380 layoutGridItems(sizingData); 319 381 320 382 if (size() != previousSize) … … 356 418 const_cast<RenderGrid*>(this)->placeItemsOnGrid(); 357 419 358 GridSizingData sizingData(gridColumnCount(), gridRowCount(), 0, 0); 359 const_cast<RenderGrid*>(this)->computeUsedBreadthOfGridTracks(ForColumns, sizingData); 360 361 for (auto& column : sizingData.columnTracks) { 362 LayoutUnit minTrackBreadth = column.baseSize(); 363 LayoutUnit maxTrackBreadth = column.growthLimit(); 364 365 minLogicalWidth += minTrackBreadth; 366 maxLogicalWidth += maxTrackBreadth; 367 } 420 GridSizingData sizingData(gridColumnCount(), gridRowCount()); 421 sizingData.setFreeSpaceForDirection(ForColumns, Nullopt); 422 const_cast<RenderGrid*>(this)->computeUsedBreadthOfGridTracks(ForColumns, sizingData, minLogicalWidth, maxLogicalWidth); 368 423 369 424 LayoutUnit totalGuttersSize = guttersSize(ForColumns, sizingData.columnTracks.size()); … … 379 434 } 380 435 381 bool RenderGrid::gridElementIsShrinkToFit() 382 { 383 return isFloatingOrOutOfFlowPositioned(); 436 void RenderGrid::computeIntrinsicLogicalHeight(GridSizingData& sizingData) 437 { 438 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData)); 439 sizingData.setFreeSpaceForDirection(ForRows, Nullopt); 440 LayoutUnit minHeight, maxHeight; 441 computeUsedBreadthOfGridTracks(ForRows, sizingData, minHeight, maxHeight); 442 443 // FIXME: This should be really added to the intrinsic height in RenderBox::computeContentAndScrollbarLogicalHeightUsing(). 444 // Remove this when that is fixed. 445 LayoutUnit scrollbarHeight = scrollbarLogicalHeight(); 446 minHeight += scrollbarHeight; 447 maxHeight += scrollbarHeight; 448 449 LayoutUnit totalGuttersSize = guttersSize(ForRows, gridRowCount()); 450 minHeight += totalGuttersSize; 451 maxHeight += totalGuttersSize; 452 453 m_minContentHeight = minHeight; 454 m_maxContentHeight = maxHeight; 455 456 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData)); 457 } 458 459 Optional<LayoutUnit> RenderGrid::computeIntrinsicLogicalContentHeightUsing(Length logicalHeightLength, Optional<LayoutUnit> intrinsicLogicalHeight, LayoutUnit borderAndPadding) const 460 { 461 if (!intrinsicLogicalHeight) 462 return Nullopt; 463 464 if (logicalHeightLength.isMinContent()) 465 return m_minContentHeight; 466 467 if (logicalHeightLength.isMaxContent()) 468 return m_maxContentHeight; 469 470 if (logicalHeightLength.isFitContent()) { 471 LayoutUnit fillAvailableExtent = containingBlock()->availableLogicalHeight(ExcludeMarginBorderPadding); 472 return std::min(m_maxContentHeight.valueOr(0), std::max(m_minContentHeight.valueOr(0), fillAvailableExtent)); 473 } 474 475 if (logicalHeightLength.isFillAvailable()) 476 return containingBlock()->availableLogicalHeight(ExcludeMarginBorderPadding) - borderAndPadding; 477 ASSERT_NOT_REACHED(); 478 return Nullopt; 384 479 } 385 480 … … 389 484 } 390 485 391 void RenderGrid::computeUsedBreadthOfGridTracks(GridTrackSizingDirection direction, GridSizingData& sizingData) 392 { 393 LayoutUnit& availableLogicalSpace = sizingData.freeSpaceForDirection(direction); 394 const LayoutUnit initialAvailableLogicalSpace = availableLogicalSpace; 486 void RenderGrid::computeUsedBreadthOfGridTracks(GridTrackSizingDirection direction, GridSizingData& sizingData, LayoutUnit& baseSizesWithoutMaximization, LayoutUnit& growthLimitsWithoutMaximization) 487 { 488 const Optional<LayoutUnit> initialFreeSpace = sizingData.freeSpaceForDirection(direction); 395 489 Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTracks : sizingData.rowTracks; 396 490 Vector<unsigned> flexibleSizedTracksIndex; 397 491 sizingData.contentSizedTracksIndex.shrink(0); 398 492 399 const LayoutUnit maxSize = direction == ForColumns ? contentLogicalWidth() : computeContentLogicalHeight(MainOrPreferredSize, style().logicalHeight(), Nullopt).valueOr(0);493 const LayoutUnit maxSize = initialFreeSpace.valueOr(0); 400 494 // 1. Initialize per Grid track variables. 401 495 for (unsigned i = 0; i < tracks.size(); ++i) { … … 419 513 resolveContentBasedTrackSizingFunctions(direction, sizingData); 420 514 515 baseSizesWithoutMaximization = growthLimitsWithoutMaximization = 0; 516 421 517 for (auto& track : tracks) { 422 518 ASSERT(!track.growthLimitIsInfinite()); 423 availableLogicalSpace -= track.baseSize(); 424 } 425 426 const bool hasUndefinedRemainingSpace = (direction == ForRows) ? style().logicalHeight().isAuto() : gridElementIsShrinkToFit(); 427 428 if (!hasUndefinedRemainingSpace && availableLogicalSpace <= 0) 519 baseSizesWithoutMaximization += track.baseSize(); 520 growthLimitsWithoutMaximization += track.growthLimit(); 521 } 522 LayoutUnit freeSpace = initialFreeSpace ? initialFreeSpace.value() - baseSizesWithoutMaximization : LayoutUnit(0); 523 524 const bool hasDefiniteFreeSpace = !!initialFreeSpace; 525 526 if (hasDefiniteFreeSpace && freeSpace <= 0) { 527 sizingData.setFreeSpaceForDirection(direction, freeSpace); 429 528 return; 430 431 // 3. Grow all Grid tracks in GridTracks from their UsedBreadth up to their MaxBreadth value until availableLogicalSpace is exhausted. 432 if (!hasUndefinedRemainingSpace) { 529 } 530 531 // 3. Grow all Grid tracks in GridTracks from their UsedBreadth up to their MaxBreadth value until freeSpace is exhausted. 532 if (hasDefiniteFreeSpace) { 433 533 const unsigned tracksSize = tracks.size(); 434 534 Vector<GridTrack*> tracksForDistribution(tracksSize); … … 438 538 } 439 539 440 distributeSpaceToTracks<MaximizeTracks>(tracksForDistribution, nullptr, availableLogicalSpace);540 distributeSpaceToTracks<MaximizeTracks>(tracksForDistribution, nullptr, freeSpace); 441 541 442 542 for (auto* track : tracksForDistribution) … … 447 547 } 448 548 449 if (flexibleSizedTracksIndex.isEmpty()) 549 if (flexibleSizedTracksIndex.isEmpty()) { 550 sizingData.setFreeSpaceForDirection(direction, freeSpace); 450 551 return; 552 } 451 553 452 554 // 4. Grow all Grid tracks having a fraction as the MaxTrackSizingFunction. 453 555 double flexFraction = 0; 454 if ( !hasUndefinedRemainingSpace)455 flexFraction = findFlexFactorUnitSize(tracks, GridSpan(0, tracks.size() - 1), direction, initial AvailableLogicalSpace);556 if (hasDefiniteFreeSpace) 557 flexFraction = findFlexFactorUnitSize(tracks, GridSpan(0, tracks.size() - 1), direction, initialFreeSpace.value()); 456 558 else { 457 559 for (const auto& trackIndex : flexibleSizedTracksIndex) … … 480 582 if (LayoutUnit increment = baseSize - oldBaseSize) { 481 583 track.setBaseSize(baseSize); 482 availableLogicalSpace -= increment; 483 } 484 } 584 freeSpace -= increment; 585 586 baseSizesWithoutMaximization += increment; 587 growthLimitsWithoutMaximization += increment; 588 } 589 } 590 sizingData.setFreeSpaceForDirection(direction, freeSpace); 485 591 } 486 592 … … 962 1068 963 1069 template <RenderGrid::TrackSizeComputationPhase phase> 964 void RenderGrid::distributeSpaceToTracks(Vector<GridTrack*>& tracks, const Vector<GridTrack*>* growBeyondGrowthLimitsTracks, LayoutUnit& availableLogicalSpace)965 { 966 ASSERT( availableLogicalSpace >= 0);1070 void RenderGrid::distributeSpaceToTracks(Vector<GridTrack*>& tracks, const Vector<GridTrack*>* growBeyondGrowthLimitsTracks, LayoutUnit& freeSpace) 1071 { 1072 ASSERT(freeSpace >= 0); 967 1073 968 1074 for (auto* track : tracks) 969 1075 track->tempSize() = trackSizeForTrackSizeComputationPhase(phase, *track, ForbidInfinity); 970 1076 971 if ( availableLogicalSpace > 0) {1077 if (freeSpace > 0) { 972 1078 std::sort(tracks.begin(), tracks.end(), sortByGridTrackGrowthPotential); 973 1079 … … 980 1086 // Let's avoid computing availableLogicalSpaceShare as much as possible as it's a hot spot in performance tests. 981 1087 if (trackGrowthPotential > 0 || infiniteGrowthPotential) { 982 LayoutUnit availableLogicalSpaceShare = availableLogicalSpace / (tracksSize - i);1088 LayoutUnit availableLogicalSpaceShare = freeSpace / (tracksSize - i); 983 1089 LayoutUnit growthShare = infiniteGrowthPotential ? availableLogicalSpaceShare : std::min(availableLogicalSpaceShare, trackGrowthPotential); 984 ASSERT_WITH_MESSAGE(growthShare >= 0, "We should never shrink any grid track or else we can't guarantee we abide by our min-sizing function. We can still have 0 as growthShare if the amount of tracks greatly exceeds the availableLogicalSpace.");1090 ASSERT_WITH_MESSAGE(growthShare >= 0, "We should never shrink any grid track or else we can't guarantee we abide by our min-sizing function. We can still have 0 as growthShare if the amount of tracks greatly exceeds the freeSpace."); 985 1091 track.tempSize() += growthShare; 986 availableLogicalSpace -= growthShare;1092 freeSpace -= growthShare; 987 1093 } 988 1094 } 989 1095 } 990 1096 991 if ( availableLogicalSpace > 0 && growBeyondGrowthLimitsTracks) {1097 if (freeSpace > 0 && growBeyondGrowthLimitsTracks) { 992 1098 unsigned tracksGrowingBeyondGrowthLimitsSize = growBeyondGrowthLimitsTracks->size(); 993 1099 for (unsigned i = 0; i < tracksGrowingBeyondGrowthLimitsSize; ++i) { 994 1100 GridTrack* track = growBeyondGrowthLimitsTracks->at(i); 995 LayoutUnit growthShare = availableLogicalSpace / (tracksGrowingBeyondGrowthLimitsSize - i);1101 LayoutUnit growthShare = freeSpace / (tracksGrowingBeyondGrowthLimitsSize - i); 996 1102 track->tempSize() += growthShare; 997 availableLogicalSpace -= growthShare;1103 freeSpace -= growthShare; 998 1104 } 999 1105 } … … 1004 1110 1005 1111 #ifndef NDEBUG 1006 bool RenderGrid::tracksAreWiderThanMinTrackBreadth(GridTrackSizingDirection direction, const Vector<GridTrack>& tracks) 1007 { 1008 const LayoutUnit maxSize = direction == ForColumns ? contentLogicalWidth() : computeContentLogicalHeight(MainOrPreferredSize, style().logicalHeight(), Nullopt).valueOr(0); 1112 bool RenderGrid::tracksAreWiderThanMinTrackBreadth(GridTrackSizingDirection direction, GridSizingData& sizingData) 1113 { 1114 const Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTracks : sizingData.rowTracks; 1115 const LayoutUnit maxSize = sizingData.freeSpaceForDirection(direction).valueOr(0); 1009 1116 for (unsigned i = 0; i < tracks.size(); ++i) { 1010 1117 const GridTrackSize& trackSize = gridTrackSize(direction, i); … … 1245 1352 void RenderGrid::applyStretchAlignmentToTracksIfNeeded(GridTrackSizingDirection direction, GridSizingData& sizingData) 1246 1353 { 1247 LayoutUnit& availableSpace = sizingData.freeSpaceForDirection(direction); 1248 if (availableSpace <= 0 1354 Optional<LayoutUnit> freeSpace = sizingData.freeSpaceForDirection(direction); 1355 if (!freeSpace 1356 || freeSpace.value() <= 0 1249 1357 || (direction == ForColumns && style().resolvedJustifyContentDistribution() != ContentDistributionStretch) 1250 1358 || (direction == ForRows && style().resolvedAlignContentDistribution() != ContentDistributionStretch)) … … 1264 1372 return; 1265 1373 1266 LayoutUnit sizeToIncrease = availableSpace/ numberOfAutoSizedTracks;1374 LayoutUnit sizeToIncrease = freeSpace.value() / numberOfAutoSizedTracks; 1267 1375 for (const auto& trackIndex : autoSizedTracksIndex) { 1268 1376 auto& track = tracks[trackIndex]; 1269 1377 track.setBaseSize(track.baseSize() + sizeToIncrease); 1270 1378 } 1271 availableSpace = 0; 1272 } 1273 1274 void RenderGrid::layoutGridItems() 1275 { 1276 placeItemsOnGrid(); 1277 1278 LayoutUnit availableSpaceForColumns = availableLogicalWidth(); 1279 LayoutUnit availableSpaceForRows = availableLogicalHeight(IncludeMarginBorderPadding); 1280 1281 // Remove space consumed by gutters from the available logical space. 1282 availableSpaceForColumns -= guttersSize(ForColumns, gridColumnCount()); 1283 availableSpaceForRows -= guttersSize(ForRows, gridRowCount()); 1284 1285 GridSizingData sizingData(gridColumnCount(), gridRowCount(), availableSpaceForColumns, availableSpaceForRows); 1286 computeUsedBreadthOfGridTracks(ForColumns, sizingData); 1287 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks)); 1288 computeUsedBreadthOfGridTracks(ForRows, sizingData); 1289 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks)); 1290 1291 applyStretchAlignmentToTracksIfNeeded(ForColumns, sizingData); 1292 applyStretchAlignmentToTracksIfNeeded(ForRows, sizingData); 1293 1379 sizingData.setFreeSpaceForDirection(direction, Optional<LayoutUnit>(0)); 1380 } 1381 1382 void RenderGrid::layoutGridItems(GridSizingData& sizingData) 1383 { 1294 1384 populateGridPositions(sizingData); 1295 1385 … … 1336 1426 child->repaintDuringLayoutIfMoved(oldChildRect); 1337 1427 } 1338 1339 LayoutUnit height = borderAndPaddingLogicalHeight() + scrollbarLogicalHeight();1340 for (auto& row : sizingData.rowTracks)1341 height += row.baseSize();1342 1343 height += guttersSize(ForRows, sizingData.rowTracks.size());1344 // min / max logical height is handled in updateLogicalHeight().1345 if (hasLineIfEmpty()) {1346 LayoutUnit minHeight = borderAndPaddingLogicalHeight()1347 + lineHeight(true, isHorizontalWritingMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes)1348 + scrollbarLogicalHeight();1349 height = std::max(height, minHeight);1350 }1351 setLogicalHeight(height);1352 1428 } 1353 1429 … … 1489 1565 unsigned lastLine = numberOfLines - 1; 1490 1566 unsigned nextToLastLine = numberOfLines - 2; 1491 ContentAlignmentData offset = computeContentPositionAndDistributionOffset(ForColumns, sizingData.freeSpaceForDirection(ForColumns) , numberOfTracks);1567 ContentAlignmentData offset = computeContentPositionAndDistributionOffset(ForColumns, sizingData.freeSpaceForDirection(ForColumns).value(), numberOfTracks); 1492 1568 LayoutUnit trackGap = guttersSize(ForColumns, 2); 1493 1569 m_columnPositions.resize(numberOfLines); … … 1501 1577 lastLine = numberOfLines - 1; 1502 1578 nextToLastLine = numberOfLines - 2; 1503 offset = computeContentPositionAndDistributionOffset(ForRows, sizingData.freeSpaceForDirection(ForRows) , numberOfTracks);1579 offset = computeContentPositionAndDistributionOffset(ForRows, sizingData.freeSpaceForDirection(ForRows).value(), numberOfTracks); 1504 1580 trackGap = guttersSize(ForRows, 2); 1505 1581 m_rowPositions.resize(numberOfLines); -
trunk/Source/WebCore/rendering/RenderGrid.h
r192054 r192154 68 68 virtual void computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const override; 69 69 70 Optional<LayoutUnit> computeIntrinsicLogicalContentHeightUsing(Length logicalHeightLength, Optional<LayoutUnit> intrinsicContentHeight, LayoutUnit borderAndPadding) const override; 71 70 72 class GridIterator; 71 73 class GridSizingData; 72 void computeUsedBreadthOfGridTracks(GridTrackSizingDirection, GridSizingData&); 73 bool gridElementIsShrinkToFit(); 74 void computeUsedBreadthOfGridTracks(GridTrackSizingDirection, GridSizingData&, LayoutUnit& baseSizesWithoutMaximization, LayoutUnit& growthLimitsWithoutMaximization); 74 75 LayoutUnit computeUsedBreadthOfMinLength(const GridLength&, LayoutUnit maxSize) const; 75 76 LayoutUnit computeUsedBreadthOfMaxLength(const GridLength&, LayoutUnit usedBreadth, LayoutUnit maxSize) const; … … 88 89 GridTrackSizingDirection autoPlacementMinorAxisDirection() const; 89 90 90 void layoutGridItems();91 91 void prepareChildForPositionedLayout(RenderBox&); 92 92 void layoutPositionedObject(RenderBox&, bool relayoutChildren, bool fixedPositionObjectsOnly) override; 93 93 void offsetAndBreadthForPositionedChild(const RenderBox&, GridTrackSizingDirection, LayoutUnit& offset, LayoutUnit& breadth); 94 95 void computeIntrinsicLogicalHeight(GridSizingData&); 96 LayoutUnit computeTrackBasedLogicalHeight(const GridSizingData&) const; 97 void computeTrackSizesForDirection(GridTrackSizingDirection, GridSizingData&, LayoutUnit freeSpace); 98 99 void layoutGridItems(GridSizingData&); 94 100 void populateGridPositions(GridSizingData&); 95 101 void clearGrid(); … … 156 162 157 163 #ifndef NDEBUG 158 bool tracksAreWiderThanMinTrackBreadth(GridTrackSizingDirection, const Vector<GridTrack>&);164 bool tracksAreWiderThanMinTrackBreadth(GridTrackSizingDirection, GridSizingData&); 159 165 #endif 160 166 … … 181 187 HashMap<const RenderBox*, GridCoordinate> m_gridItemCoordinate; 182 188 OrderIterator m_orderIterator; 189 190 Optional<LayoutUnit> m_minContentHeight; 191 Optional<LayoutUnit> m_maxContentHeight; 183 192 }; 184 193
Note: See TracChangeset
for help on using the changeset viewer.