Changeset 271554 in webkit
- Timestamp:
- Jan 15, 2021 11:57:56 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r271553 r271554 1 2021-01-15 Rob Buis <rbuis@igalia.com> 2 3 https://bugs.webkit.org/show_bug.cgi?id=220224 4 Support transferred min/max block size for aspect-ratio 5 6 Reviewed by Darin Adler. 7 8 Enable some tests that pass now. 9 10 * TestExpectations: 11 1 12 2021-01-15 Lauro Moura <lmoura@igalia.com> 2 13 -
trunk/LayoutTests/TestExpectations
r271480 r271554 4408 4408 webkit.org/b/214462 imported/w3c/web-platform-tests/css/css-scoping/slotted-placeholder.html [ ImageOnlyFailure ] 4409 4409 4410 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/abspos-008.html [ ImageOnlyFailure ]4411 4410 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/abspos-012.html [ ImageOnlyFailure ] 4412 4411 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/abspos-013.html [ ImageOnlyFailure ] … … 4416 4415 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-015.html [ ImageOnlyFailure ] 4417 4416 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-017.html [ ImageOnlyFailure ] 4418 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-020.html [ ImageOnlyFailure ]4419 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-021.html [ ImageOnlyFailure ]4420 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-023.html [ ImageOnlyFailure ]4421 4417 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-024.html [ ImageOnlyFailure ] 4422 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-026.html [ ImageOnlyFailure ]4423 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-027.html [ ImageOnlyFailure ]4424 4418 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-028.html [ ImageOnlyFailure ] 4425 4419 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-001.html [ ImageOnlyFailure ] -
trunk/Source/WebCore/ChangeLog
r271551 r271554 1 2021-01-15 Rob Buis <rbuis@igalia.com> 2 3 https://bugs.webkit.org/show_bug.cgi?id=220224 4 Support transferred min/max block size for aspect-ratio 5 6 Reviewed by Darin Adler. 7 8 Add logic to transfer min-height/max-height for minmax logical width 9 calculation in case aspect-ratio should be applied [1]. Both absolute 10 and normally positioned elements are handled. 11 12 [1] https://drafts.csswg.org/css-sizing-4/#aspect-ratio-size-transfers 13 14 * rendering/RenderBox.cpp: 15 (WebCore::RenderBox::constrainLogicalWidthInFragmentByMinMax const): 16 (WebCore::RenderBox::computePositionedLogicalWidth const): 17 (WebCore::RenderBox::computeMinMaxLogicalWidthFromAspectRatio const): 18 * rendering/RenderBox.h: 19 1 20 2021-01-15 Simon Fraser <simon.fraser@apple.com> 2 21 -
trunk/Source/WebCore/rendering/RenderBox.cpp
r271516 r271554 644 644 { 645 645 const RenderStyle& styleToUse = style(); 646 647 if (shouldComputeLogicalHeightFromAspectRatio()) { 648 LayoutUnit logicalMinWidth, logicalMaxWidth; 649 std::tie(logicalMinWidth, logicalMaxWidth) = computeMinMaxLogicalWidthFromAspectRatio(); 650 logicalWidth = std::max(logicalMinWidth, std::min(logicalWidth, logicalMaxWidth)); 651 } 652 646 653 if (!styleToUse.logicalMaxWidth().isUndefined()) 647 654 logicalWidth = std::min(logicalWidth, computeLogicalWidthInFragmentUsing(MaxSize, styleToUse.logicalMaxWidth(), availableWidth, cb, fragment)); … … 3626 3633 computedValues); 3627 3634 3635 LayoutUnit transferredMinSize = LayoutUnit::min(); 3636 LayoutUnit transferredMaxSize = LayoutUnit::max(); 3637 if (shouldComputeLogicalHeightFromAspectRatio()) 3638 std::tie(transferredMinSize, transferredMaxSize) = computeMinMaxLogicalWidthFromAspectRatio(); 3639 3640 LogicalExtentComputedValues maxValues; 3641 maxValues.m_extent = LayoutUnit::max(); 3628 3642 // Calculate constraint equation values for 'max-width' case. 3629 3643 if (!style().logicalMaxWidth().isUndefined()) { 3630 LogicalExtentComputedValues maxValues;3631 3632 3644 computePositionedLogicalWidthUsing(MaxSize, style().logicalMaxWidth(), containerBlock, containerDirection, 3633 3645 containerLogicalWidth, bordersPlusPadding, 3634 3646 logicalLeftLength, logicalRightLength, marginLogicalLeft, marginLogicalRight, 3635 3647 maxValues); 3636 3637 if (computedValues.m_extent > maxValues.m_extent) { 3638 computedValues.m_extent = maxValues.m_extent; 3639 computedValues.m_position = maxValues.m_position; 3640 computedValues.m_margins.m_start = maxValues.m_margins.m_start; 3641 computedValues.m_margins.m_end = maxValues.m_margins.m_end; 3642 } 3643 } 3644 3648 } 3649 if (transferredMaxSize < maxValues.m_extent) { 3650 computePositionedLogicalWidthUsing(MaxSize, Length(transferredMaxSize, Fixed), containerBlock, containerDirection, 3651 containerLogicalWidth, bordersPlusPadding, 3652 logicalLeftLength, logicalRightLength, marginLogicalLeft, marginLogicalRight, 3653 maxValues); 3654 } 3655 if (computedValues.m_extent > maxValues.m_extent) { 3656 computedValues.m_extent = maxValues.m_extent; 3657 computedValues.m_position = maxValues.m_position; 3658 computedValues.m_margins.m_start = maxValues.m_margins.m_start; 3659 computedValues.m_margins.m_end = maxValues.m_margins.m_end; 3660 } 3661 3662 LogicalExtentComputedValues minValues; 3663 minValues.m_extent = LayoutUnit::min(); 3645 3664 // Calculate constraint equation values for 'min-width' case. 3646 3665 if (!style().logicalMinWidth().isZero() || style().logicalMinWidth().isIntrinsic()) { 3647 LogicalExtentComputedValues minValues;3648 3649 3666 computePositionedLogicalWidthUsing(MinSize, style().logicalMinWidth(), containerBlock, containerDirection, 3667 containerLogicalWidth, bordersPlusPadding, 3668 logicalLeftLength, logicalRightLength, marginLogicalLeft, marginLogicalRight, 3669 minValues); 3670 } 3671 if (transferredMinSize > minValues.m_extent) { 3672 computePositionedLogicalWidthUsing(MinSize, Length(transferredMinSize, Fixed), containerBlock, containerDirection, 3650 3673 containerLogicalWidth, bordersPlusPadding, 3651 3674 logicalLeftLength, logicalRightLength, marginLogicalLeft, marginLogicalRight, 3652 3675 minValues); 3653 3654 if (computedValues.m_extent < minValues.m_extent) { 3655 computedValues.m_extent = minValues.m_extent; 3656 computedValues.m_position = minValues.m_position; 3657 computedValues.m_margins.m_start = minValues.m_margins.m_start; 3658 computedValues.m_margins.m_end = minValues.m_margins.m_end; 3659 } 3676 } 3677 if (computedValues.m_extent < minValues.m_extent) { 3678 computedValues.m_extent = minValues.m_extent; 3679 computedValues.m_position = minValues.m_position; 3680 computedValues.m_margins.m_start = minValues.m_margins.m_start; 3681 computedValues.m_margins.m_end = minValues.m_margins.m_end; 3660 3682 } 3661 3683 … … 5034 5056 } 5035 5057 5058 std::pair<LayoutUnit, LayoutUnit> RenderBox::computeMinMaxLogicalWidthFromAspectRatio() const 5059 { 5060 auto ratio = LayoutUnit { style().logicalAspectRatio() }; 5061 LayoutUnit blockMinSize = constrainLogicalHeightByMinMax(LayoutUnit(), WTF::nullopt); 5062 LayoutUnit blockMaxSize = constrainLogicalHeightByMinMax(LayoutUnit::max(), WTF::nullopt); 5063 LayoutUnit transferredMinSize = LayoutUnit(); 5064 LayoutUnit transferredMaxSize = LayoutUnit::max(); 5065 if (blockMinSize > LayoutUnit()) 5066 transferredMinSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), ratio, style().boxSizing(), blockMinSize); 5067 if (blockMaxSize != LayoutUnit::max()) 5068 transferredMaxSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), ratio, style().boxSizing(), blockMaxSize); 5069 // Minimum size wins over maximum size. 5070 transferredMaxSize = std::max(transferredMaxSize, transferredMinSize); 5071 return { transferredMinSize, transferredMaxSize }; 5072 } 5073 5036 5074 bool RenderBox::hasRelativeDimensions() const 5037 5075 { -
trunk/Source/WebCore/rendering/RenderBox.h
r271439 r271554 702 702 bool shouldComputeLogicalWidthFromAspectRatioAndInsets() const; 703 703 LayoutUnit computeLogicalWidthFromAspectRatio(RenderFragmentContainer* = nullptr) const; 704 std::pair<LayoutUnit, LayoutUnit> computeMinMaxLogicalWidthFromAspectRatio() const; 704 705 705 706 static LayoutUnit blockSizeFromAspectRatio(LayoutUnit borderPaddingInlineSum, LayoutUnit borderPaddingBlockSum, LayoutUnit aspectRatio, BoxSizing boxSizing, LayoutUnit inlineSize)
Note: See TracChangeset
for help on using the changeset viewer.