Changeset 202974 in webkit
- Timestamp:
- Jul 8, 2016 3:11:10 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r202973 r202974 1 2016-07-08 Manuel Rego Casasnovas <rego@igalia.com> 2 3 [css-grid] Inline size is never indefinite during layout 4 https://bugs.webkit.org/show_bug.cgi?id=159253 5 6 Reviewed by Sergio Villar Senin. 7 8 Created a new test verifying the expected behavior. Updated the results 9 in a few tests too. 10 11 * fast/css-grid-layout/grid-columns-rows-get-set-expected.txt: 12 * fast/css-grid-layout/grid-columns-rows-get-set-multiple-expected.txt: 13 * fast/css-grid-layout/grid-columns-rows-get-set-multiple.html: 14 * fast/css-grid-layout/grid-columns-rows-get-set.html: 15 * fast/css-grid-layout/grid-container-percentage-columns-expected.txt: Added. 16 * fast/css-grid-layout/grid-container-percentage-columns.html: Added. 17 * fast/css-grid-layout/named-grid-line-get-set-expected.txt: 18 * fast/css-grid-layout/named-grid-line-get-set.html: 19 * fast/css-grid-layout/percent-track-breadths-regarding-container-size-expected.txt: 20 * fast/css-grid-layout/percent-track-breadths-regarding-container-size.html: 21 The results of this test now show some FAIL messages becase of a bug in 22 RenderBox::hasDefiniteLogicalHeight() (http://webkit.org/b/159251). 23 * fast/css-grid-layout/resources/grid-columns-rows-get-set-multiple.js: 24 * fast/css-grid-layout/resources/grid-columns-rows-get-set.js: 25 1 26 2016-07-08 Frederic Wang <fwang@igalia.com> 2 27 -
trunk/LayoutTests/fast/css-grid-layout/grid-columns-rows-get-set-expected.txt
r201325 r202974 9 9 PASS window.getComputedStyle(gridWithFixedElement, '').getPropertyValue('grid-template-columns') is "10px" 10 10 PASS window.getComputedStyle(gridWithFixedElement, '').getPropertyValue('grid-template-rows') is "15px" 11 PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('grid-template-columns') is "4 24px"11 PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('grid-template-columns') is "400px" 12 12 PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('grid-template-rows') is "162px" 13 13 PASS window.getComputedStyle(gridWithPercentWithoutSize, '').getPropertyValue('grid-template-columns') is "0px" 14 14 PASS window.getComputedStyle(gridWithPercentWithoutSize, '').getPropertyValue('grid-template-rows') is "0px" 15 PASS window.getComputedStyle(gridWithPercentWithoutSizeWithChildren, '').getPropertyValue('grid-template-columns') is " 7px"15 PASS window.getComputedStyle(gridWithPercentWithoutSizeWithChildren, '').getPropertyValue('grid-template-columns') is "3.5px" 16 16 PASS window.getComputedStyle(gridWithPercentWithoutSizeWithChildren, '').getPropertyValue('grid-template-rows') is "11px" 17 17 PASS window.getComputedStyle(gridWithAutoElement, '').getPropertyValue('grid-template-columns') is "0px" -
trunk/LayoutTests/fast/css-grid-layout/grid-columns-rows-get-set-multiple-expected.txt
r200510 r202974 7 7 PASS window.getComputedStyle(gridWithFixedElement, '').getPropertyValue('grid-template-columns') is "7px 11px" 8 8 PASS window.getComputedStyle(gridWithFixedElement, '').getPropertyValue('grid-template-rows') is "17px 2px" 9 PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('grid-template-columns') is "4 24px 792px"9 PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('grid-template-columns') is "400px 800px" 10 10 PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('grid-template-rows') is "162px 312px" 11 PASS window.getComputedStyle(gridWithPercentWithoutSize, '').getPropertyValue('grid-template-columns') is " 7px 0px"11 PASS window.getComputedStyle(gridWithPercentWithoutSize, '').getPropertyValue('grid-template-columns') is "3.5px 7px" 12 12 PASS window.getComputedStyle(gridWithPercentWithoutSize, '').getPropertyValue('grid-template-rows') is "11px 0px" 13 13 PASS window.getComputedStyle(gridWithAutoElement, '').getPropertyValue('grid-template-columns') is "0px 17px" -
trunk/LayoutTests/fast/css-grid-layout/grid-columns-rows-get-set-multiple.html
r200510 r202974 28 28 } 29 29 .gridWithPercent { 30 grid-template-columns: 5 3% 99%;30 grid-template-columns: 50% 100%; 31 31 grid-template-rows: 27% 52%; 32 32 } -
trunk/LayoutTests/fast/css-grid-layout/grid-columns-rows-get-set.html
r200510 r202974 32 32 } 33 33 .gridWithPercent { 34 grid-template-columns: 5 3%;34 grid-template-columns: 50%; 35 35 grid-template-rows: 27%; 36 36 } -
trunk/LayoutTests/fast/css-grid-layout/named-grid-line-get-set-expected.txt
r200510 r202974 7 7 PASS window.getComputedStyle(gridWithFixedElement, '').getPropertyValue('grid-template-columns') is "[first] 10px" 8 8 PASS window.getComputedStyle(gridWithFixedElement, '').getPropertyValue('grid-template-rows') is "[first] 15px" 9 PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('grid-template-columns') is "4 24px [last]"9 PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('grid-template-columns') is "400px [last]" 10 10 PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('grid-template-rows') is "162px [last]" 11 11 PASS window.getComputedStyle(gridWithPercentWithoutSize, '').getPropertyValue('grid-template-columns') is "0px [last]" 12 12 PASS window.getComputedStyle(gridWithPercentWithoutSize, '').getPropertyValue('grid-template-rows') is "0px [last]" 13 PASS window.getComputedStyle(gridWithPercentWithoutSizeWithChildren, '').getPropertyValue('grid-template-columns') is " 77px [last]"13 PASS window.getComputedStyle(gridWithPercentWithoutSizeWithChildren, '').getPropertyValue('grid-template-columns') is "38.5px [last]" 14 14 PASS window.getComputedStyle(gridWithPercentWithoutSizeWithChildren, '').getPropertyValue('grid-template-rows') is "22px [last]" 15 15 PASS window.getComputedStyle(gridWithAutoElement, '').getPropertyValue('grid-template-columns') is "[first] 0px" -
trunk/LayoutTests/fast/css-grid-layout/named-grid-line-get-set.html
r200510 r202974 22 22 } 23 23 .gridWithPercent { 24 grid-template-columns: 5 3% [last];24 grid-template-columns: 50% [last]; 25 25 grid-template-rows: 27% [last]; 26 26 } … … 100 100 debug("Test getting grid-template-columns and grid-template-rows set through CSS"); 101 101 testGridTemplatesValues(document.getElementById("gridWithFixedElement"), "[first] 10px", "[first] 15px"); 102 testGridTemplatesValues(document.getElementById("gridWithPercentElement"), "4 24px [last]", "162px [last]");102 testGridTemplatesValues(document.getElementById("gridWithPercentElement"), "400px [last]", "162px [last]"); 103 103 testGridTemplatesValues(document.getElementById("gridWithPercentWithoutSize"), "0px [last]", "0px [last]"); 104 testGridTemplatesValues(document.getElementById("gridWithPercentWithoutSizeWithChildren"), " 77px [last]", "22px [last]");104 testGridTemplatesValues(document.getElementById("gridWithPercentWithoutSizeWithChildren"), "38.5px [last]", "22px [last]"); 105 105 testGridTemplatesValues(document.getElementById("gridWithAutoElement"), "[first] 0px", "0px [last]"); 106 106 testGridTemplatesValues(document.getElementById("gridWithAutoWithChildrenElement"), "[first] 77px", "22px [last]"); -
trunk/LayoutTests/fast/css-grid-layout/percent-track-breadths-regarding-container-size-expected.txt
r183385 r202974 36 36 XXXXX 37 37 XXX 38 PASS 38 FAIL: 39 Expected 10 for height, but got 4. 40 Expected 10 for height, but got 4. 41 Expected 10 for height, but got 4. 42 43 <div class="grid absolutelyPositioned"> 44 <div class="firstRowFirstColumn sizedToGridArea" data-expected-width="20" data-expected-height="10">XX</div> 45 <div class="firstRowSecondColumn sizedToGridArea" data-expected-width="50" data-expected-height="10">XXXXX</div> 46 <div class="firstRowThirdColumn sizedToGridArea" data-expected-width="30" data-expected-height="10">XXX</div> 47 </div> 48 XX 49 XXXXX 50 XXX 51 FAIL: 52 Expected 10 for height, but got 4. 53 Expected 10 for height, but got 4. 54 Expected 10 for height, but got 4. 55 56 <div class="grid absolutelyPositioned"> 57 <div class="firstRowFirstColumn sizedToGridArea" data-expected-width="20" data-expected-height="10">XX</div> 58 <div class="firstRowSecondColumn sizedToGridArea" data-expected-width="50" data-expected-height="10">XXXXX</div> 59 <div class="firstRowThirdColumn sizedToGridArea" data-expected-width="30" data-expected-height="10">XXX</div> 60 </div> 39 61 XX 40 62 XXXXX … … 45 67 XXX 46 68 PASS 47 XX48 XXXXX49 XXX50 PASS -
trunk/LayoutTests/fast/css-grid-layout/percent-track-breadths-regarding-container-size.html
r200510 r202974 90 90 <div class="fit-content indefiniteHeight"> 91 91 <div class="grid calculatedSize justifyContentStart"> 92 <div class="firstRowFirstColumn sizedToGridArea" data-expected-width=" 20" data-expected-height="10">XX</div>93 <div class="firstRowSecondColumn sizedToGridArea" data-expected-width=" 50" data-expected-height="10">XXXXX</div>94 <div class="firstRowThirdColumn sizedToGridArea" data-expected-width=" 30" data-expected-height="10">XXX</div>92 <div class="firstRowFirstColumn sizedToGridArea" data-expected-width="44" data-expected-height="10">XX</div> 93 <div class="firstRowSecondColumn sizedToGridArea" data-expected-width="110" data-expected-height="10">XXXXX</div> 94 <div class="firstRowThirdColumn sizedToGridArea" data-expected-width="66" data-expected-height="10">XXX</div> 95 95 </div> 96 96 </div> … … 106 106 <div class="fit-content indefiniteHeight"> 107 107 <div class="grid percentageSize"> 108 <div class="firstRowFirstColumn sizedToGridArea" data-expected-width=" 20" data-expected-height="10">XX</div>109 <div class="firstRowSecondColumn sizedToGridArea" data-expected-width=" 50" data-expected-height="10">XXXXX</div>110 <div class="firstRowThirdColumn sizedToGridArea" data-expected-width=" 30" data-expected-height="10">XXX</div>108 <div class="firstRowFirstColumn sizedToGridArea" data-expected-width="10" data-expected-height="10">XX</div> 109 <div class="firstRowSecondColumn sizedToGridArea" data-expected-width="25" data-expected-height="10">XXXXX</div> 110 <div class="firstRowThirdColumn sizedToGridArea" data-expected-width="15" data-expected-height="10">XXX</div> 111 111 </div> 112 112 </div> … … 120 120 </div> 121 121 122 <!-- FIXME: The height of the row is wrong calculated in the following 2 examples because of a bug in 123 RenderBox::hasDefiniteLogicalHeight() that considers that any positioned element has a definite height. 124 See: https://bugs.webkit.org/show_bug.cgi?id=159251 --> 122 125 <div class="fit-content indefiniteHeight"> 123 126 <div class="grid absolutelyPositioned"> 124 <div class="firstRowFirstColumn sizedToGridArea" data-expected-width=" 0" data-expected-height="0">XX</div>125 <div class="firstRowSecondColumn sizedToGridArea" data-expected-width=" 0" data-expected-height="0">XXXXX</div>126 <div class="firstRowThirdColumn sizedToGridArea" data-expected-width=" 0" data-expected-height="0">XXX</div>127 <div class="firstRowFirstColumn sizedToGridArea" data-expected-width="20" data-expected-height="10">XX</div> 128 <div class="firstRowSecondColumn sizedToGridArea" data-expected-width="50" data-expected-height="10">XXXXX</div> 129 <div class="firstRowThirdColumn sizedToGridArea" data-expected-width="30" data-expected-height="10">XXX</div> 127 130 </div> 128 131 </div> … … 130 133 <div class="unconstrainedContainer"> 131 134 <div class="grid absolutelyPositioned"> 132 <div class="firstRowFirstColumn sizedToGridArea" data-expected-width=" 0" data-expected-height="0">XX</div>133 <div class="firstRowSecondColumn sizedToGridArea" data-expected-width=" 0" data-expected-height="0">XXXXX</div>134 <div class="firstRowThirdColumn sizedToGridArea" data-expected-width=" 0" data-expected-height="0">XXX</div>135 <div class="firstRowFirstColumn sizedToGridArea" data-expected-width="20" data-expected-height="10">XX</div> 136 <div class="firstRowSecondColumn sizedToGridArea" data-expected-width="50" data-expected-height="10">XXXXX</div> 137 <div class="firstRowThirdColumn sizedToGridArea" data-expected-width="30" data-expected-height="10">XXX</div> 135 138 </div> 136 139 </div> -
trunk/LayoutTests/fast/css-grid-layout/resources/grid-columns-rows-get-set-multiple.js
r200510 r202974 3 3 debug("Test getting |grid-template-columns| and |grid-template-rows| set through CSS"); 4 4 testGridTemplatesValues(document.getElementById("gridWithFixedElement"), "7px 11px", "17px 2px"); 5 testGridTemplatesValues(document.getElementById("gridWithPercentElement"), "5 3% 99%", "27% 52%", "424px 792px", "162px 312px");6 testGridTemplatesValues(document.getElementById("gridWithPercentWithoutSize"), "5 3% 99%", "27% 52%", "7px 0px", "11px 0px");5 testGridTemplatesValues(document.getElementById("gridWithPercentElement"), "50% 100%", "27% 52%", "400px 800px", "162px 312px"); 6 testGridTemplatesValues(document.getElementById("gridWithPercentWithoutSize"), "50% 100%", "27% 52%", "3.5px 7px", "11px 0px"); 7 7 testGridTemplatesValues(document.getElementById("gridWithAutoElement"), "auto auto", "auto auto", "0px 17px", "0px 3px"); 8 8 testGridTemplatesValues(document.getElementById("gridWithEMElement"), "100px 120px", "150px 170px"); -
trunk/LayoutTests/fast/css-grid-layout/resources/grid-columns-rows-get-set.js
r201325 r202974 4 4 testGridTemplatesValues(document.getElementById("gridWithNoneElement"), "none", "none"); 5 5 testGridTemplatesValues(document.getElementById("gridWithFixedElement"), "10px", "15px"); 6 testGridTemplatesValues(document.getElementById("gridWithPercentElement"), "4 24px", "162px");6 testGridTemplatesValues(document.getElementById("gridWithPercentElement"), "400px", "162px"); 7 7 testGridTemplatesValues(document.getElementById("gridWithPercentWithoutSize"), "0px", "0px"); 8 testGridTemplatesValues(document.getElementById("gridWithPercentWithoutSizeWithChildren"), " 7px", "11px");8 testGridTemplatesValues(document.getElementById("gridWithPercentWithoutSizeWithChildren"), "3.5px", "11px"); 9 9 testGridTemplatesValues(document.getElementById("gridWithAutoElement"), "0px", "0px"); 10 10 testGridTemplatesValues(document.getElementById("gridWithAutoWithChildrenElement"), "7px", "11px"); -
trunk/Source/WebCore/ChangeLog
r202973 r202974 1 2016-07-08 Manuel Rego Casasnovas <rego@igalia.com> 2 3 [css-grid] Inline size is never indefinite during layout 4 https://bugs.webkit.org/show_bug.cgi?id=159253 5 6 Reviewed by Sergio Villar Senin. 7 8 The issue is that the inline size of the grid container 9 is only indefinite while we're computing the intrinsic sizes. 10 During layout we should be able to resolve the percentage tracks 11 against that size. This makes Grid Layout compatible with regular blocks 12 regarding how inline percentages are resolved. 13 14 The patch passes the SizingOperation enum to RenderGrid::gridTrackSize(). 15 That way we can know if we're computing the intrinsic sizes or not. 16 17 Test: fast/css-grid-layout/grid-container-percentage-columns.html 18 19 * rendering/RenderGrid.cpp: 20 (WebCore::RenderGrid::computeTrackSizesForDirection): 21 (WebCore::RenderGrid::computeIntrinsicLogicalWidths): 22 (WebCore::RenderGrid::computeIntrinsicLogicalHeight): 23 (WebCore::RenderGrid::computeUsedBreadthOfGridTracks): 24 (WebCore::RenderGrid::gridTrackSize): 25 (WebCore::RenderGrid::minSizeForChild): 26 (WebCore::RenderGrid::spanningItemCrossesFlexibleSizedTracks): 27 (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions): 28 (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems): 29 (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth): 30 (WebCore::RenderGrid::rawGridTrackSize): Deleted. 31 * rendering/RenderGrid.h: 32 1 33 2016-07-08 Frederic Wang <fwang@igalia.com> 2 34 -
trunk/Source/WebCore/rendering/RenderGrid.cpp
r201709 r202974 239 239 void setFreeSpaceForDirection(GridTrackSizingDirection, Optional<LayoutUnit> freeSpace); 240 240 241 enum SizingOperation { TrackSizing, IntrinsicSizeComputation };242 241 SizingOperation sizingOperation { TrackSizing }; 243 242 … … 361 360 LayoutUnit totalGuttersSize = guttersSize(direction, direction == ForRows ? gridRowCount() : gridColumnCount()); 362 361 sizingData.setFreeSpaceForDirection(direction, freeSpace - totalGuttersSize); 363 sizingData.sizingOperation = GridSizingData::TrackSizing;362 sizingData.sizingOperation = TrackSizing; 364 363 365 364 LayoutUnit baseSizes, growthLimits; … … 466 465 GridSizingData sizingData(gridColumnCount(), gridRowCount()); 467 466 sizingData.setFreeSpaceForDirection(ForColumns, Nullopt); 468 sizingData.sizingOperation = GridSizingData::IntrinsicSizeComputation;467 sizingData.sizingOperation = IntrinsicSizeComputation; 469 468 const_cast<RenderGrid*>(this)->computeUsedBreadthOfGridTracks(ForColumns, sizingData, minLogicalWidth, maxLogicalWidth); 470 469 … … 485 484 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData)); 486 485 sizingData.setFreeSpaceForDirection(ForRows, Nullopt); 487 sizingData.sizingOperation = GridSizingData::IntrinsicSizeComputation;486 sizingData.sizingOperation = IntrinsicSizeComputation; 488 487 LayoutUnit minHeight, maxHeight; 489 488 computeUsedBreadthOfGridTracks(ForRows, sizingData, minHeight, maxHeight); … … 548 547 for (unsigned i = 0; i < tracks.size(); ++i) { 549 548 GridTrack& track = tracks[i]; 550 const GridTrackSize& trackSize = gridTrackSize(direction, i );549 const GridTrackSize& trackSize = gridTrackSize(direction, i, sizingData.sizingOperation); 551 550 const GridLength& minTrackBreadth = trackSize.minTrackBreadth(); 552 551 const GridLength& maxTrackBreadth = trackSize.maxTrackBreadth(); … … 608 607 double flexFraction = 0; 609 608 if (hasDefiniteFreeSpace) 610 flexFraction = findFlexFactorUnitSize(tracks, GridSpan::translatedDefiniteGridSpan(0, tracks.size()), direction, initialFreeSpace.value());609 flexFraction = findFlexFactorUnitSize(tracks, GridSpan::translatedDefiniteGridSpan(0, tracks.size()), direction, sizingData.sizingOperation, initialFreeSpace.value()); 611 610 else { 612 611 for (const auto& trackIndex : flexibleSizedTracksIndex) 613 flexFraction = std::max(flexFraction, normalizedFlexFraction(tracks[trackIndex], gridTrackSize(direction, trackIndex ).maxTrackBreadth().flex()));612 flexFraction = std::max(flexFraction, normalizedFlexFraction(tracks[trackIndex], gridTrackSize(direction, trackIndex, sizingData.sizingOperation).maxTrackBreadth().flex())); 614 613 615 614 if (!m_gridItemArea.isEmpty()) { … … 623 622 continue; 624 623 625 flexFraction = std::max(flexFraction, findFlexFactorUnitSize(tracks, span, direction, maxContentForChild(*gridItem, direction, sizingData)));624 flexFraction = std::max(flexFraction, findFlexFactorUnitSize(tracks, span, direction, sizingData.sizingOperation, maxContentForChild(*gridItem, direction, sizingData))); 626 625 } 627 626 } … … 630 629 631 630 for (auto trackIndex : flexibleSizedTracksIndex) { 632 const GridTrackSize& trackSize = gridTrackSize(direction, trackIndex );631 const GridTrackSize& trackSize = gridTrackSize(direction, trackIndex, sizingData.sizingOperation); 633 632 GridTrack& track = tracks[trackIndex]; 634 633 LayoutUnit oldBaseSize = track.baseSize(); … … 671 670 } 672 671 673 double RenderGrid::computeFlexFactorUnitSize(const Vector<GridTrack>& tracks, GridTrackSizingDirection direction, double flexFactorSum, LayoutUnit leftOverSpace, const Vector<unsigned, 8>& flexibleTracksIndexes, std::unique_ptr<TrackIndexSet> tracksToTreatAsInflexible) const672 double RenderGrid::computeFlexFactorUnitSize(const Vector<GridTrack>& tracks, GridTrackSizingDirection direction, SizingOperation sizingOperation, double flexFactorSum, LayoutUnit leftOverSpace, const Vector<unsigned, 8>& flexibleTracksIndexes, std::unique_ptr<TrackIndexSet> tracksToTreatAsInflexible) const 674 673 { 675 674 // We want to avoid the effect of flex factors sum below 1 making the factor unit size to grow exponentially. … … 682 681 continue; 683 682 LayoutUnit baseSize = tracks[index].baseSize(); 684 double flexFactor = gridTrackSize(direction, index ).maxTrackBreadth().flex();683 double flexFactor = gridTrackSize(direction, index, sizingOperation).maxTrackBreadth().flex(); 685 684 // treating all such tracks as inflexible. 686 685 if (baseSize > hypotheticalFactorUnitSize * flexFactor) { … … 694 693 } 695 694 if (!validFlexFactorUnit) 696 return computeFlexFactorUnitSize(tracks, direction, flexFactorSum, leftOverSpace, flexibleTracksIndexes, WTFMove(tracksToTreatAsInflexible));695 return computeFlexFactorUnitSize(tracks, direction, sizingOperation, flexFactorSum, leftOverSpace, flexibleTracksIndexes, WTFMove(tracksToTreatAsInflexible)); 697 696 return hypotheticalFactorUnitSize; 698 697 } 699 698 700 double RenderGrid::findFlexFactorUnitSize(const Vector<GridTrack>& tracks, const GridSpan& tracksSpan, GridTrackSizingDirection direction, LayoutUnit leftOverSpace) const699 double RenderGrid::findFlexFactorUnitSize(const Vector<GridTrack>& tracks, const GridSpan& tracksSpan, GridTrackSizingDirection direction, SizingOperation sizingOperation, LayoutUnit leftOverSpace) const 701 700 { 702 701 if (leftOverSpace <= 0) … … 706 705 Vector<unsigned, 8> flexibleTracksIndexes; 707 706 for (auto trackIndex : tracksSpan) { 708 GridTrackSize trackSize = gridTrackSize(direction, trackIndex );707 GridTrackSize trackSize = gridTrackSize(direction, trackIndex, sizingOperation); 709 708 if (!trackSize.maxTrackBreadth().isFlex()) 710 709 leftOverSpace -= tracks[trackIndex].baseSize(); … … 719 718 ASSERT(!flexibleTracksIndexes.isEmpty()); 720 719 721 return computeFlexFactorUnitSize(tracks, direction, flexFactorSum, leftOverSpace, flexibleTracksIndexes); 722 } 723 724 bool RenderGrid::hasDefiniteLogicalSize(GridTrackSizingDirection direction) const 725 { 726 return (direction == ForRows) ? hasDefiniteLogicalHeight() : hasDefiniteLogicalWidth(); 720 return computeFlexFactorUnitSize(tracks, direction, sizingOperation, flexFactorSum, leftOverSpace, flexibleTracksIndexes); 727 721 } 728 722 … … 758 752 } 759 753 760 GridTrackSize RenderGrid::gridTrackSize(GridTrackSizingDirection direction, unsigned translatedIndex ) const754 GridTrackSize RenderGrid::gridTrackSize(GridTrackSizingDirection direction, unsigned translatedIndex, SizingOperation sizingOperation) const 761 755 { 762 756 auto& trackSize = rawGridTrackSize(direction, translatedIndex); … … 766 760 767 761 if (minTrackBreadth.isPercentage() || maxTrackBreadth.isPercentage()) { 768 if (!hasDefiniteLogicalSize(direction)) { 762 // If the logical width/height of the grid container is indefinite, percentage values are treated as <auto>. 763 // For the inline axis this only happens when we're computing the intrinsic sizes (IntrinsicSizeComputation). 764 if (sizingOperation == IntrinsicSizeComputation || (direction == ForRows && !hasDefiniteLogicalHeight())) { 769 765 if (minTrackBreadth.isPercentage()) 770 766 minTrackBreadth = Length(Auto); … … 817 813 bool overrideLogicalWidthHasChanged = updateOverrideContainingBlockContentLogicalWidthForChild(child, sizingData); 818 814 if (isRowAxis) { 819 LayoutUnit marginLogicalWidth = sizingData.sizingOperation == GridSizingData::TrackSizing ? computeMarginLogicalSizeForChild(ForColumns, child) : marginIntrinsicLogicalWidthForChild(child);815 LayoutUnit marginLogicalWidth = sizingData.sizingOperation == TrackSizing ? computeMarginLogicalSizeForChild(ForColumns, child) : marginIntrinsicLogicalWidthForChild(child); 820 816 return child.computeLogicalWidthInRegionUsing(MinSize, childMinSize, child.overrideContainingBlockContentLogicalWidth().valueOr(0), *this, nullptr) + marginLogicalWidth; 821 817 } … … 904 900 }; 905 901 906 bool RenderGrid::spanningItemCrossesFlexibleSizedTracks(const GridSpan& itemSpan, GridTrackSizingDirection direction ) const902 bool RenderGrid::spanningItemCrossesFlexibleSizedTracks(const GridSpan& itemSpan, GridTrackSizingDirection direction, SizingOperation sizingOperation) const 907 903 { 908 904 for (auto trackPosition : itemSpan) { 909 const GridTrackSize& trackSize = gridTrackSize(direction, trackPosition );905 const GridTrackSize& trackSize = gridTrackSize(direction, trackPosition, sizingOperation); 910 906 if (trackSize.minTrackBreadth().isFlex() || trackSize.maxTrackBreadth().isFlex()) 911 907 return true; … … 934 930 if (span.integerSpan() == 1) 935 931 resolveContentBasedTrackSizingFunctionsForNonSpanningItems(direction, span, *gridItem, track, sizingData); 936 else if (!spanningItemCrossesFlexibleSizedTracks(span, direction ))932 else if (!spanningItemCrossesFlexibleSizedTracks(span, direction, sizingData.sizingOperation)) 937 933 sizingData.itemsSortedByIncreasingSpan.append(GridItemWithSpan(*gridItem, span)); 938 934 } … … 964 960 { 965 961 unsigned trackPosition = span.startLine(); 966 GridTrackSize trackSize = gridTrackSize(direction, trackPosition );962 GridTrackSize trackSize = gridTrackSize(direction, trackPosition, sizingData.sizingOperation); 967 963 968 964 if (trackSize.hasMinContentMinTrackBreadth()) … … 1119 1115 LayoutUnit spanningTracksSize; 1120 1116 for (auto trackPosition : itemSpan) { 1121 const GridTrackSize& trackSize = gridTrackSize(direction, trackPosition );1117 const GridTrackSize& trackSize = gridTrackSize(direction, trackPosition, sizingData.sizingOperation); 1122 1118 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[trackPosition] : sizingData.rowTracks[trackPosition]; 1123 1119 spanningTracksSize += trackSizeForTrackSizeComputationPhase(phase, track, ForbidInfinity); … … 1210 1206 const LayoutUnit maxSize = sizingData.freeSpaceForDirection(direction).valueOr(0); 1211 1207 for (unsigned i = 0; i < tracks.size(); ++i) { 1212 const GridTrackSize& trackSize = gridTrackSize(direction, i );1208 const GridTrackSize& trackSize = gridTrackSize(direction, i, sizingData.sizingOperation); 1213 1209 const GridLength& minTrackBreadth = trackSize.minTrackBreadth(); 1214 1210 if (computeUsedBreadthOfMinLength(minTrackBreadth, maxSize) > tracks[i].baseSize()) … … 1561 1557 Vector<unsigned> autoSizedTracksIndex; 1562 1558 for (unsigned i = 0; i < tracks.size(); ++i) { 1563 const GridTrackSize& trackSize = gridTrackSize(direction, i );1559 const GridTrackSize& trackSize = gridTrackSize(direction, i, sizingData.sizingOperation); 1564 1560 if (trackSize.hasAutoMaxTrackBreadth()) 1565 1561 autoSizedTracksIndex.append(i); -
trunk/Source/WebCore/rendering/RenderGrid.h
r201510 r202974 75 75 class GridIterator; 76 76 class GridSizingData; 77 enum SizingOperation { TrackSizing, IntrinsicSizeComputation }; 77 78 void computeUsedBreadthOfGridTracks(GridTrackSizingDirection, GridSizingData&, LayoutUnit& baseSizesWithoutMaximization, LayoutUnit& growthLimitsWithoutMaximization); 78 79 LayoutUnit computeUsedBreadthOfMinLength(const GridLength&, LayoutUnit maxSize) const; … … 132 133 133 134 typedef HashSet<unsigned, DefaultHash<unsigned>::Hash, WTF::UnsignedWithZeroKeyHashTraits<unsigned>> TrackIndexSet; 134 double computeFlexFactorUnitSize(const Vector<GridTrack>&, GridTrackSizingDirection, double flexFactorSum, LayoutUnit leftOverSpace, const Vector<unsigned, 8>& flexibleTracksIndexes, std::unique_ptr<TrackIndexSet> tracksToTreatAsInflexible = nullptr) const;135 double findFlexFactorUnitSize(const Vector<GridTrack>&, const GridSpan&, GridTrackSizingDirection, LayoutUnit spaceToFill) const;135 double computeFlexFactorUnitSize(const Vector<GridTrack>&, GridTrackSizingDirection, SizingOperation, double flexFactorSum, LayoutUnit leftOverSpace, const Vector<unsigned, 8>& flexibleTracksIndexes, std::unique_ptr<TrackIndexSet> tracksToTreatAsInflexible = nullptr) const; 136 double findFlexFactorUnitSize(const Vector<GridTrack>&, const GridSpan&, GridTrackSizingDirection, SizingOperation, LayoutUnit spaceToFill) const; 136 137 137 138 const GridTrackSize& rawGridTrackSize(GridTrackSizingDirection, unsigned) const; 138 GridTrackSize gridTrackSize(GridTrackSizingDirection, unsigned ) const;139 GridTrackSize gridTrackSize(GridTrackSizingDirection, unsigned, SizingOperation) const; 139 140 140 141 bool updateOverrideContainingBlockContentLogicalWidthForChild(RenderBox&, GridSizingData&); … … 174 175 #endif 175 176 176 bool spanningItemCrossesFlexibleSizedTracks(const GridSpan&, GridTrackSizingDirection ) const;177 bool spanningItemCrossesFlexibleSizedTracks(const GridSpan&, GridTrackSizingDirection, SizingOperation) const; 177 178 178 179 unsigned gridColumnCount() const; 179 180 unsigned gridRowCount() const; 180 181 181 bool hasDefiniteLogicalSize(GridTrackSizingDirection) const;182 182 LayoutUnit translateRTLCoordinate(LayoutUnit) const; 183 183
Note: See TracChangeset
for help on using the changeset viewer.