Changeset 292465 in webkit
- Timestamp:
- Apr 6, 2022 8:02:01 AM (2 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r292463 r292465 1 2022-04-06 Alan Bujtas <zalan@apple.com> 2 3 [CSS-Contain] Grid layout should take "contain: inline-size" into account when computing the grid item's logical width 4 https://bugs.webkit.org/show_bug.cgi?id=238850 5 6 Reviewed by Antti Koivisto. 7 8 * TestExpectations: 9 1 10 2022-04-06 Oriol Brufau <obrufau@igalia.com> 2 11 -
trunk/LayoutTests/TestExpectations
r292432 r292465 4641 4641 # CSS containment tests that fail 4642 4642 imported/w3c/web-platform-tests/css/css-contain/contain-inline-size-bfc-floats-001.html [ ImageOnlyFailure ] 4643 imported/w3c/web-platform-tests/css/css-contain/contain-inline-size-grid.html [ ImageOnlyFailure ]4644 4643 # webkit-ruby-text 4645 4644 imported/w3c/web-platform-tests/css/css-contain/contain-layout-017.html [ ImageOnlyFailure ] -
trunk/Source/WebCore/ChangeLog
r292463 r292465 1 2022-04-06 Alan Bujtas <zalan@apple.com> 2 3 [CSS-Contain] Grid layout should take "contain: inline-size" into account when computing the grid item's logical width 4 https://bugs.webkit.org/show_bug.cgi?id=238850 5 6 Reviewed by Antti Koivisto. 7 8 Ignore grid item's logical width when "contain: inline-size" is present (i.e. ignore descendant content in inline direction when sizing). 9 10 * rendering/GridTrackSizingAlgorithm.cpp: 11 (WebCore::GridTrackSizingAlgorithm::computeGridContainerIntrinsicSizes): 12 (WebCore::GridTrackSizingAlgorithmStrategy::minContentForChild const): 13 (WebCore::GridTrackSizingAlgorithmStrategy::maxContentForChild const): 14 (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const): 15 (WebCore::GridTrackSizingAlgorithmStrategy::minLogicalSizeForChild const): 16 (WebCore::GridTrackSizingAlgorithm::advanceNextState): 17 * rendering/GridTrackSizingAlgorithm.h: 18 * rendering/RenderGrid.cpp: 19 (WebCore::RenderGrid::layoutBlock): 20 (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat const): 21 1 22 2022-04-06 Oriol Brufau <obrufau@igalia.com> 2 23 -
trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp
r292079 r292465 784 784 Vector<GridTrack>& allTracks = tracks(m_direction); 785 785 for (auto& track : allTracks) { 786 ASSERT(m_strategy->isComputingSizeContainment() || !track.infiniteGrowthPotential());786 ASSERT(m_strategy->isComputingSizeContainment() || m_strategy->isComputingInlineSizeContainment() || !track.infiniteGrowthPotential()); 787 787 m_minContentSize += track.baseSize(); 788 788 m_maxContentSize += track.growthLimitIsInfinite() ? track.baseSize() : track.growthLimit(); … … 816 816 GridTrackSizingDirection childInlineDirection = GridLayoutFunctions::flowAwareDirectionForChild(*renderGrid(), child, ForColumns); 817 817 if (direction() == childInlineDirection) { 818 if (isComputingInlineSizeContainment()) 819 return { }; 818 820 // FIXME: It's unclear if we should return the intrinsic width or the preferred width. 819 821 // See http://lists.w3.org/Archives/Public/www-style/2013Jan/0245.html … … 839 841 GridTrackSizingDirection childInlineDirection = GridLayoutFunctions::flowAwareDirectionForChild(*renderGrid(), child, ForColumns); 840 842 if (direction() == childInlineDirection) { 843 if (isComputingInlineSizeContainment()) 844 return { }; 841 845 // FIXME: It's unclear if we should return the intrinsic width or the preferred width. 842 846 // See http://lists.w3.org/Archives/Public/www-style/2013Jan/0245.html … … 855 859 GridTrackSizingDirection childInlineDirection = GridLayoutFunctions::flowAwareDirectionForChild(*renderGrid(), child, ForColumns); 856 860 bool isRowAxis = direction() == childInlineDirection; 861 if (isRowAxis && isComputingInlineSizeContainment()) 862 return { }; 857 863 const Length& childSize = isRowAxis ? child.style().logicalWidth() : child.style().logicalHeight(); 858 864 if (!childSize.isAuto() && !childSize.isPercentOrCalculated()) … … 1007 1013 bool isRowAxis = direction() == childInlineDirection; 1008 1014 if (isRowAxis) 1009 return child.computeLogicalWidthInFragmentUsing(MinSize, childMinSize, availableSize.value_or(0), *renderGrid(), nullptr) + GridLayoutFunctions::marginLogicalSizeForChild(*renderGrid(), childInlineDirection, child);1015 return isComputingInlineSizeContainment() ? 0_lu : child.computeLogicalWidthInFragmentUsing(MinSize, childMinSize, availableSize.value_or(0), *renderGrid(), nullptr) + GridLayoutFunctions::marginLogicalSizeForChild(*renderGrid(), childInlineDirection, child); 1010 1016 bool overrideSizeHasChanged = updateOverridingContainingBlockContentSizeForChild(child, childInlineDirection, availableSize); 1011 1017 layoutGridItemForMinSizeComputation(child, overrideSizeHasChanged); … … 1026 1032 LayoutUnit freeSpaceForStretchAutoTracksStep() const override; 1027 1033 bool isComputingSizeContainment() const override { return shouldApplySizeContainment(*renderGrid()); } 1034 bool isComputingInlineSizeContainment() const override { return shouldApplyInlineSizeContainment(*renderGrid()); } 1028 1035 void accumulateFlexFraction(double& flexFraction, GridIterator&, GridTrackSizingDirection outermostDirection, HashSet<RenderBox*>& itemsSet) const; 1029 1036 }; … … 1138 1145 LayoutUnit minLogicalSizeForChild(RenderBox&, const Length& childMinSize, std::optional<LayoutUnit> availableSize) const override; 1139 1146 bool isComputingSizeContainment() const override { return false; } 1147 bool isComputingInlineSizeContainment() const override { return false; } 1140 1148 }; 1141 1149 … … 1411 1419 switch (m_sizingState) { 1412 1420 case ColumnSizingFirstIteration: 1413 m_sizingState = m_strategy->isComputingSizeContainment() ? ColumnSizingExtraIterationForSizeContainment : RowSizingFirstIteration;1421 m_sizingState = m_strategy->isComputingSizeContainment() || m_strategy->isComputingInlineSizeContainment() ? ColumnSizingExtraIterationForSizeContainment : RowSizingFirstIteration; 1414 1422 return; 1415 1423 case ColumnSizingExtraIterationForSizeContainment: -
trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.h
r292079 r292465 283 283 virtual LayoutUnit freeSpaceForStretchAutoTracksStep() const = 0; 284 284 virtual bool isComputingSizeContainment() const = 0; 285 virtual bool isComputingInlineSizeContainment() const = 0; 285 286 286 287 protected: -
trunk/Source/WebCore/rendering/RenderGrid.cpp
r292221 r292465 281 281 // sizes. We cannot do the same for heights though because many code paths inside updateLogicalHeight() require 282 282 // a previous call to setLogicalHeight() to resolve heights properly (like for positioned items for example). 283 if (shouldApplySizeContainment(*this)) 283 auto shouldIgnoreGridItemContentForLogicalWidth = shouldApplySizeContainment(*this) || shouldApplyInlineSizeContainment(*this); 284 if (shouldIgnoreGridItemContentForLogicalWidth) 284 285 computeTrackSizesForIndefiniteSize(m_trackSizingAlgorithm, ForColumns); 285 286 else … … 288 289 m_minContentSize = m_trackSizingAlgorithm.minContentSize(); 289 290 m_maxContentSize = m_trackSizingAlgorithm.maxContentSize(); 290 if (should ApplySizeContainment(*this))291 if (shouldIgnoreGridItemContentForLogicalWidth) 291 292 computeTrackSizesForDefiniteSize(ForColumns, availableSpaceForColumns); 292 293 … … 628 629 unsigned lastAutoRepeatTrack = firstAutoRepeatTrack + grid.autoRepeatTracks(direction); 629 630 630 if (!grid.hasGridItems() || shouldApplySizeContainment(*this) ) {631 if (!grid.hasGridItems() || shouldApplySizeContainment(*this) || shouldApplyInlineSizeContainment(*this)) { 631 632 emptyTrackIndexes = makeUnique<OrderedTrackIndexSet>(); 632 633 for (unsigned trackIndex = firstAutoRepeatTrack; trackIndex < lastAutoRepeatTrack; ++trackIndex)
Note: See TracChangeset
for help on using the changeset viewer.