Changeset 274068 in webkit
- Timestamp:
- Mar 8, 2021 4:37:46 AM (17 months ago)
- Location:
- trunk
- Files:
-
- 6 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/TestExpectations (modified) (2 diffs)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/rendering/RenderBlock.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderBox.cpp (modified) (6 diffs)
-
Source/WebCore/rendering/RenderBox.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r274066 r274068 1 2021-03-08 Rob Buis <rbuis@igalia.com> 2 3 Support aspect-ratio in intrinsic sizing 4 https://bugs.webkit.org/show_bug.cgi?id=220861 5 6 Reviewed by Antti Koivisto. 7 8 Enable tests that pass now. 9 10 * TestExpectations: 11 1 12 2021-03-08 Kimmo Kinnunen <kkinnunen@apple.com> 2 13 -
trunk/LayoutTests/TestExpectations
r274066 r274068 4555 4555 webkit.org/b/214462 imported/w3c/web-platform-tests/css/css-scoping/slotted-placeholder.html [ ImageOnlyFailure ] 4556 4556 4557 # contain-intrinsic-size 4557 4558 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/abspos-014.html [ ImageOnlyFailure ] 4558 4559 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-024.html [ ImageOnlyFailure ] … … 4563 4564 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-025.html [ ImageOnlyFailure ] 4564 4565 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-026.html [ ImageOnlyFailure ] 4565 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/grid-aspect-ratio-015.html [ ImageOnlyFailure ]4566 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/grid-aspect-ratio-016.html [ ImageOnlyFailure ]4567 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/grid-aspect-ratio-017.html [ ImageOnlyFailure ]4568 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-001.html [ ImageOnlyFailure ]4569 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-002.html [ ImageOnlyFailure ]4570 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-004.html [ ImageOnlyFailure ]4571 4566 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-005.html [ ImageOnlyFailure ] 4572 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-006.html [ ImageOnlyFailure ]4573 4567 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-008.html [ ImageOnlyFailure ] 4574 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-010.html [ ImageOnlyFailure ]4575 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-011.html [ ImageOnlyFailure ]4576 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-012.html [ ImageOnlyFailure ]4577 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-013.html [ ImageOnlyFailure ]4578 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-014.html [ ImageOnlyFailure ]4579 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-015.html [ ImageOnlyFailure ]4580 4568 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/table-element-001.html [ ImageOnlyFailure ] 4581 4569 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-001.html [ ImageOnlyFailure ] -
trunk/Source/WebCore/ChangeLog
r274067 r274068 1 2021-03-08 Rob Buis <rbuis@igalia.com> 2 3 Support aspect-ratio in intrinsic sizing 4 https://bugs.webkit.org/show_bug.cgi?id=220861 5 6 Reviewed by Antti Koivisto. 7 8 Support aspect-ratio in intrinsic sizing calculations. 9 The values min-content/max-content/fit-content 10 get set a value through aspect-ratio [1]. 11 However min-width:auto is special, it should take content 12 into account [2]. In order to support this, compute 13 logical (intrinsic) width using MinIntrinsic, since staying 14 with MinContent/MaxContent would cause an infinite loop. 15 16 Behavior matches Firefox and Chrome. 17 18 [1] https://www.w3.org/TR/css-sizing-4/#propdef-aspect-ratio 19 [2] https://www.w3.org/TR/css-sizing-4/#aspect-ratio-minimum 20 21 * rendering/RenderBlock.cpp: 22 (WebCore::RenderBlock::computePreferredLogicalWidths): 23 Compute child min/max pref widths from aspect-ratio if it applies. 24 * rendering/RenderBox.cpp: 25 (WebCore::RenderBox::constrainLogicalWidthInFragmentByMinMax const): 26 Add an allowIntrinsic parameter to prevent recursion. 27 (WebCore::RenderBox::computeIntrinsicLogicalWidthUsing const): 28 Compute intrinsic logical width from aspect ratio if possible. 29 (WebCore::RenderBox::computeLogicalWidthInFragmentUsing const): 30 (WebCore::RenderBox::shouldComputeLogicalHeightFromAspectRatio const): 31 min/max/fit-content in the block axis is treated as auto. 32 (WebCore::RenderBox::computeLogicalWidthFromAspectRatio const): 33 Prevent recursion by passing false for allowIntrinsic. 34 * rendering/RenderBox.h: 35 1 36 2021-03-08 Ian Gilbert <iang@apple.com> 2 37 -
trunk/Source/WebCore/rendering/RenderBlock.cpp
r273647 r274068 2283 2283 && !(isDeprecatedFlexItem() && !styleToUse.logicalWidth().intValue())) 2284 2284 m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = adjustContentBoxLogicalWidthForBoxSizing(styleToUse.logicalWidth()); 2285 else if (shouldComputeLogicalWidthFromAspectRatio()) 2286 m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = computeLogicalWidthFromAspectRatio(); 2285 2287 else 2286 2288 computeIntrinsicLogicalWidths(m_minPreferredLogicalWidth, m_maxPreferredLogicalWidth); -
trunk/Source/WebCore/rendering/RenderBox.cpp
r273764 r274068 652 652 } 653 653 654 LayoutUnit RenderBox::constrainLogicalWidthInFragmentByMinMax(LayoutUnit logicalWidth, LayoutUnit availableWidth, RenderBlock& cb, RenderFragmentContainer* fragment ) const654 LayoutUnit RenderBox::constrainLogicalWidthInFragmentByMinMax(LayoutUnit logicalWidth, LayoutUnit availableWidth, RenderBlock& cb, RenderFragmentContainer* fragment, AllowIntrinsic allowIntrinsic) const 655 655 { 656 656 const RenderStyle& styleToUse = style(); … … 661 661 } 662 662 663 if (!styleToUse.logicalMaxWidth().isUndefined() )663 if (!styleToUse.logicalMaxWidth().isUndefined() && (allowIntrinsic == AllowIntrinsic::Yes || !styleToUse.logicalMaxWidth().isIntrinsic())) 664 664 logicalWidth = std::min(logicalWidth, computeLogicalWidthInFragmentUsing(MaxSize, styleToUse.logicalMaxWidth(), availableWidth, cb, fragment)); 665 if (allowIntrinsic == AllowIntrinsic::No && styleToUse.logicalMinWidth().isIntrinsic()) 666 return logicalWidth; 665 667 auto minLength = styleToUse.logicalMinWidth(); 666 if (styleToUse.hasAspectRatio() && styleToUse.logicalWidth().isAuto() && minLength.isAuto() && styleToUse.overflowInlineDirection() == Overflow::Visible) {668 if (styleToUse.hasAspectRatio() && minLength.isAuto() && (styleToUse.logicalWidth().isAuto() || styleToUse.logicalWidth().isMinContent() || styleToUse.logicalWidth().isMaxContent()) && styleToUse.overflowInlineDirection() == Overflow::Visible) { 667 669 // Make sure we actually used the aspect ratio. 668 670 if (shouldComputeLogicalWidthFromAspectRatio()) 669 minLength = Length(LengthType::Min Content);671 minLength = Length(LengthType::MinIntrinsic); 670 672 } 671 673 return std::max(logicalWidth, computeLogicalWidthInFragmentUsing(MinSize, minLength, availableWidth, cb, fragment)); … … 2613 2615 LayoutUnit minLogicalWidth; 2614 2616 LayoutUnit maxLogicalWidth; 2615 computeIntrinsicLogicalWidths(minLogicalWidth, maxLogicalWidth); 2616 2617 if (logicalWidthLength.isMinContent()) 2617 if (!logicalWidthLength.isMinIntrinsic() && shouldComputeLogicalWidthFromAspectRatio()) 2618 minLogicalWidth = maxLogicalWidth = computeLogicalWidthFromAspectRatio(); 2619 else 2620 computeIntrinsicLogicalWidths(minLogicalWidth, maxLogicalWidth); 2621 2622 if (logicalWidthLength.isMinContent() || logicalWidthLength.isMinIntrinsic()) 2618 2623 return minLogicalWidth + borderAndPadding; 2619 2624 … … 2643 2648 } 2644 2649 2645 if (logicalWidth.isIntrinsic() )2650 if (logicalWidth.isIntrinsic() || logicalWidth.isMinIntrinsic()) 2646 2651 return computeIntrinsicLogicalWidthUsing(logicalWidth, availableLogicalWidth, borderAndPaddingLogicalWidth()); 2647 2652 … … 5099 5104 5100 5105 auto h = style().logicalHeight(); 5101 return h.isAuto() || (!isOutOfFlowPositioned() && h.isPercentOrCalculated() && !percentageLogicalHeightIsResolvable());5106 return h.isAuto() || h.isIntrinsic() || (!isOutOfFlowPositioned() && h.isPercentOrCalculated() && !percentageLogicalHeightIsResolvable()); 5102 5107 } 5103 5108 … … 5135 5140 5136 5141 LayoutUnit containerWidthInInlineDirection = std::max<LayoutUnit>(0, containingBlockLogicalWidthForContentInFragment(fragment)); 5137 return constrainLogicalWidthInFragmentByMinMax(logicalWidth, containerWidthInInlineDirection, *containingBlock(), fragment );5142 return constrainLogicalWidthInFragmentByMinMax(logicalWidth, containerWidthInInlineDirection, *containingBlock(), fragment, AllowIntrinsic::No); 5138 5143 } 5139 5144 -
trunk/Source/WebCore/rendering/RenderBox.h
r273073 r274068 86 86 LayoutUnit logicalHeight() const { return style().isHorizontalWritingMode() ? height() : width(); } 87 87 88 LayoutUnit constrainLogicalWidthInFragmentByMinMax(LayoutUnit, LayoutUnit, RenderBlock&, RenderFragmentContainer* = nullptr) const; 88 enum class AllowIntrinsic { Yes, No }; 89 LayoutUnit constrainLogicalWidthInFragmentByMinMax(LayoutUnit, LayoutUnit, RenderBlock&, RenderFragmentContainer*, AllowIntrinsic = AllowIntrinsic::Yes) const; 89 90 LayoutUnit constrainLogicalHeightByMinMax(LayoutUnit logicalHeight, Optional<LayoutUnit> intrinsicContentHeight) const; 90 91 LayoutUnit constrainContentBoxLogicalHeightByMinMax(LayoutUnit logicalHeight, Optional<LayoutUnit> intrinsicContentHeight) const;
Note: See TracChangeset
for help on using the changeset viewer.