Changeset 225776 in webkit
- Timestamp:
- Dec 11, 2017 11:11:04 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r225764 r225776 1 2017-12-11 Manuel Rego Casasnovas <rego@igalia.com> 2 3 [css-grid] Automatic minimum size is not clamped if min track sizing function is auto 4 https://bugs.webkit.org/show_bug.cgi?id=180283 5 6 Reviewed by Darin Adler. 7 8 This patch updates a bunch of tests that were wrong 9 to follow the new behavior. 10 11 * TestExpectations: Now we're passing one WPT test more. 12 * fast/css-grid-layout/min-height-border-box.html: 13 * fast/css-grid-layout/min-width-margin-box.html: 14 * fast/css-grid-layout/percent-of-indefinite-track-size-in-auto.html: 15 * fast/css-grid-layout/percent-of-indefinite-track-size.html: 16 1 17 2017-12-11 Eric Carlson <eric.carlson@apple.com> 2 18 -
trunk/LayoutTests/TestExpectations
r225741 r225776 479 479 webkit.org/b/165062 fast/css-grid-layout/grid-baseline-margins.html [ ImageOnlyFailure ] 480 480 webkit.org/b/169271 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-sizing-alignment-001.html [ ImageOnlyFailure ] 481 webkit.org/b/180283 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-minimum-size-grid-items-017.html [ ImageOnlyFailure ]482 481 webkit.org/b/180290 imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-001.html [ ImageOnlyFailure ] 483 482 webkit.org/b/180290 imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-002.html [ ImageOnlyFailure ] -
trunk/LayoutTests/fast/css-grid-layout/min-height-border-box.html
r200510 r225776 30 30 <h3>min-height: auto. grid height: auto</h3> 31 31 <div class="container"> 32 <div class="grid" data-expected-width="150" data-expected-height=" 35">33 <div class="item" data-expected-width="140" data-expected-height=" 25">XXXX</div>32 <div class="grid" data-expected-width="150" data-expected-height="10"> 33 <div class="item" data-expected-width="140" data-expected-height="0">XXXX</div> 34 34 </div> 35 35 </div> 36 36 37 37 <div class="container"> 38 <div class="grid" data-expected-width="150" data-expected-height=" 77">39 <div class="item borderPaddingMargin" data-expected-width="116" data-expected-height=" 48">XXX</div>38 <div class="grid" data-expected-width="150" data-expected-height="52"> 39 <div class="item borderPaddingMargin" data-expected-width="116" data-expected-height="23">XXX</div> 40 40 </div> 41 41 </div> -
trunk/LayoutTests/fast/css-grid-layout/min-width-margin-box.html
r200510 r225776 39 39 <div class="container"> 40 40 <div class="grid" data-expected-width="150" data-expected-height="50"> 41 <div class="item" data-expected-width=" 100" data-expected-height="25">XXXX</div>42 <div class="stretchedItem" data-expected-width=" 100" data-expected-height="15"></div>41 <div class="item" data-expected-width="0" data-expected-height="25">XXXX</div> 42 <div class="stretchedItem" data-expected-width="0" data-expected-height="15"></div> 43 43 </div> 44 44 </div> … … 46 46 <div class="container"> 47 47 <div class="grid" data-expected-width="150" data-expected-height="92"> 48 <div class="item borderPaddingMargin" data-expected-width=" 141" data-expected-height="48">XXXX</div>49 <div class="stretchedItem" data-expected-width=" 165" data-expected-height="15"></div>48 <div class="item borderPaddingMargin" data-expected-width="41" data-expected-height="48">XXXX</div> 49 <div class="stretchedItem" data-expected-width="65" data-expected-height="15"></div> 50 50 </div> 51 51 </div> -
trunk/LayoutTests/fast/css-grid-layout/percent-of-indefinite-track-size-in-auto.html
r200510 r225776 40 40 </div> 41 41 <div style="position: relative;"> 42 <div class="grid min-content gridWithPercentInMinOfMinMax" data-expected-width="30" data-expected-height=" 20">42 <div class="grid min-content gridWithPercentInMinOfMinMax" data-expected-width="30" data-expected-height="15"> 43 43 <div class="firstRowFirstColumn">XXX</div> 44 44 <div class="firstRowFirstColumn">XX XX</div> -
trunk/LayoutTests/fast/css-grid-layout/percent-of-indefinite-track-size.html
r200510 r225776 40 40 </div> 41 41 <div style="position: relative;"> 42 <div class="grid min-content gridWithPercentInMinOfMinMax" data-expected-width="30" data-expected-height=" 20">42 <div class="grid min-content gridWithPercentInMinOfMinMax" data-expected-width="30" data-expected-height="15"> 43 43 <div class="firstRowFirstColumn">XXX</div> 44 44 <div class="firstRowFirstColumn">XX XX</div> -
trunk/LayoutTests/imported/w3c/ChangeLog
r225741 r225776 1 2017-12-11 Manuel Rego Casasnovas <rego@igalia.com> 2 3 [css-grid] Automatic minimum size is not clamped if min track sizing function is auto 4 https://bugs.webkit.org/show_bug.cgi?id=180283 5 6 Reviewed by Darin Adler. 7 8 Update expected result in the following WPT tests, as now everything 9 is passing there. 10 11 * web-platform-tests/css/css-grid/grid-items/grid-minimum-size-grid-items-022-expected.txt: 12 * web-platform-tests/css/css-grid/grid-items/grid-minimum-size-grid-items-023-expected.txt: 13 1 14 2017-12-11 Manuel Rego Casasnovas <rego@igalia.com> 2 15 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-minimum-size-grid-items-022-expected.txt
r225561 r225776 10 10 PASS .grid 9 11 11 PASS .grid 10 12 FAIL .grid 11 assert_equals: 13 <div class="grid" style="grid-template-columns: minmax(auto, 25px);"> 14 <div data-expected-width="25">XXXXXXXXXX</div> 15 <div data-expected-width="25"></div> 16 </div> 17 width expected 25 but got 100 18 FAIL .grid 12 assert_equals: 19 <div class="grid" style="grid-template-columns: minmax(auto, 0px);"> 20 <div data-expected-width="0">XXXXXXXXXX</div> 21 <div data-expected-width="0"></div> 22 </div> 23 width expected 0 but got 100 12 PASS .grid 11 13 PASS .grid 12 24 14 PASS .grid 13 25 15 PASS .grid 14 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-minimum-size-grid-items-023-expected.txt
r225561 r225776 10 10 PASS .grid 9 11 11 PASS .grid 10 12 FAIL .grid 11 assert_equals: 13 <div class="grid" style="grid-template-rows: minmax(auto, 25px);"> 14 <div class="verticalRL" data-expected-height="25">XXXXXXXXXX</div> 15 <div data-expected-height="25"></div> 16 </div> 17 height expected 25 but got 100 18 FAIL .grid 12 assert_equals: 19 <div class="grid" style="grid-template-rows: minmax(auto, 0px);"> 20 <div class="verticalRL" data-expected-height="0">XXXXXXXXXX</div> 21 <div data-expected-height="0"></div> 22 </div> 23 height expected 0 but got 100 12 PASS .grid 11 13 PASS .grid 12 24 14 PASS .grid 13 25 15 PASS .grid 14 … … 35 25 PASS .grid 24 36 26 PASS .grid 25 37 FAIL .grid 26 assert_equals: 38 <div class="grid" style="grid-template-rows: minmax(auto, 25px);"> 39 <div class="verticalLR" data-expected-height="25">XXXXXXXXXX</div> 40 <div data-expected-height="25"></div> 41 </div> 42 height expected 25 but got 100 43 FAIL .grid 27 assert_equals: 44 <div class="grid" style="grid-template-rows: minmax(auto, 0px);"> 45 <div class="verticalLR" data-expected-height="0">XXXXXXXXXX</div> 46 <div data-expected-height="0"></div> 47 </div> 48 height expected 0 but got 100 27 PASS .grid 26 28 PASS .grid 27 49 29 PASS .grid 28 50 30 PASS .grid 29 -
trunk/Source/WebCore/ChangeLog
r225775 r225776 1 2017-12-11 Manuel Rego Casasnovas <rego@igalia.com> 2 3 [css-grid] Automatic minimum size is not clamped if min track sizing function is auto 4 https://bugs.webkit.org/show_bug.cgi?id=180283 5 6 Reviewed by Darin Adler. 7 8 We were not clamping the automatic minimum size when 9 the min track sizing function was intrinsic (e.g. minmax(auto, 0px)). 10 However the spec (https://drafts.csswg.org/css-grid/#min-size-auto) 11 is very clear regarding that. 12 13 This patch modifies 14 GridTrackSizingAlgorithm::sizeTrackToFitNonSpanningItem(), 15 so in the case of a fixed max track sizing function it clamps 16 the automatic minimum size of the item to the stretch fit 17 of the grid area's size. 18 It needs to take into account if the item has fixed size, margin, border 19 and/or padding as those cannot be clamped. 20 21 Using WPT tests to verify this behavior, 22 and corrected a bunch of other tests that were wrong. 23 24 Test: imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-minimum-size-grid-items-017.html 25 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-minimum-size-grid-items-022.html 26 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-minimum-size-grid-items-023.html 27 28 * rendering/GridTrackSizingAlgorithm.cpp: 29 (WebCore::GridTrackSizingAlgorithm::sizeTrackToFitNonSpanningItem): 30 * rendering/GridTrackSizingAlgorithm.h: 31 (WebCore::GridTrack::growthLimitIsInfinite const): 32 * rendering/style/GridTrackSize.h: 33 (WebCore::GridTrackSize::cacheMinMaxTrackBreadthTypes): 34 (WebCore::GridTrackSize::hasFixedMaxTrackBreadth const): 35 1 36 2017-12-11 Zan Dobersek <zdobersek@igalia.com> 2 37 -
trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp
r225741 r225776 236 236 GridTrackSize trackSize = gridTrackSize(m_direction, trackPosition); 237 237 238 if (trackSize.hasMinContentMinTrackBreadth()) 238 if (trackSize.hasMinContentMinTrackBreadth()) { 239 239 track.setBaseSize(std::max(track.baseSize(), m_strategy->minContentForChild(gridItem))); 240 else if (trackSize.hasMaxContentMinTrackBreadth())240 } else if (trackSize.hasMaxContentMinTrackBreadth()) { 241 241 track.setBaseSize(std::max(track.baseSize(), m_strategy->maxContentForChild(gridItem))); 242 else if (trackSize.hasAutoMinTrackBreadth()) 243 track.setBaseSize(std::max(track.baseSize(), m_strategy->minSizeForChild(gridItem))); 242 } else if (trackSize.hasAutoMinTrackBreadth()) { 243 auto minSize = m_strategy->minSizeForChild(gridItem); 244 bool isRowAxis = m_direction == GridLayoutFunctions::flowAwareDirectionForChild(*m_renderGrid, gridItem, ForColumns); 245 Length gridItemSize = isRowAxis ? gridItem.style().logicalWidth() : gridItem.style().logicalHeight(); 246 Length gridItemMinSize = isRowAxis ? gridItem.style().logicalMinWidth() : gridItem.style().logicalMinHeight(); 247 bool overflowIsVisible = isRowAxis ? gridItem.style().overflowInlineDirection() == OVISIBLE : gridItem.style().overflowBlockDirection() == OVISIBLE; 248 249 if (gridItemSize.isAuto() && gridItemMinSize.isAuto() && overflowIsVisible && trackSize.hasFixedMaxTrackBreadth()) { 250 auto maxTrackBreadth = valueForLength(trackSize.maxTrackBreadth().length(), availableSpace().value_or(LayoutUnit())); 251 if (minSize > maxTrackBreadth) { 252 auto marginAndBorderAndPadding = GridLayoutFunctions::marginLogicalSizeForChild(*m_renderGrid, m_direction, gridItem); 253 marginAndBorderAndPadding += isRowAxis ? gridItem.borderAndPaddingLogicalWidth() : gridItem.borderAndPaddingLogicalHeight(); 254 minSize = std::max(maxTrackBreadth, marginAndBorderAndPadding); 255 } 256 } 257 258 track.setBaseSize(std::max(track.baseSize(), minSize)); 259 } 244 260 245 261 if (trackSize.hasMinContentMaxTrackBreadth()) { -
trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.h
r225741 r225776 54 54 55 55 const LayoutUnit& growthLimit() const; 56 bool growthLimitIsInfinite() const { return m_growthLimit == infinity; } 56 57 void setGrowthLimit(LayoutUnit); 57 58 … … 73 74 74 75 private: 75 bool growthLimitIsInfinite() const { return m_growthLimit == infinity; }76 76 bool isGrowthLimitBiggerThanBaseSize() const { return growthLimitIsInfinite() || m_growthLimit >= m_baseSize; } 77 77 -
trunk/Source/WebCore/rendering/style/GridTrackSize.h
r212629 r225776 103 103 m_maxTrackBreadthIsMinContent = maxTrackBreadth().isLength() && maxTrackBreadth().length().isMinContent(); 104 104 m_maxTrackBreadthIsAuto = maxTrackBreadth().isLength() && maxTrackBreadth().length().isAuto(); 105 m_maxTrackBreadthIsFixed = maxTrackBreadth().isLength() && maxTrackBreadth().length().isSpecified(); 105 106 106 107 // These values depend on the above ones so keep them here. … … 124 125 bool hasMaxContentMinTrackBreadthAndMaxContentMaxTrackBreadth() const { return m_minTrackBreadthIsMaxContent && m_maxTrackBreadthIsMaxContent; } 125 126 bool hasAutoOrMinContentMinTrackBreadthAndIntrinsicMaxTrackBreadth() const { return (m_minTrackBreadthIsMinContent || m_minTrackBreadthIsAuto) && m_maxTrackBreadthIsIntrinsic; } 127 bool hasFixedMaxTrackBreadth() const { return m_maxTrackBreadthIsFixed; } 126 128 127 129 private: … … 139 141 bool m_minTrackBreadthIsIntrinsic : 1; 140 142 bool m_maxTrackBreadthIsIntrinsic : 1; 143 bool m_maxTrackBreadthIsFixed : 1; 141 144 }; 142 145
Note: See TracChangeset
for help on using the changeset viewer.