Changeset 272569 in webkit


Ignore:
Timestamp:
Feb 8, 2021 10:54:33 PM (3 years ago)
Author:
commit-queue@webkit.org
Message:

Make auto && <ratio> use content box-sizing
https://bugs.webkit.org/show_bug.cgi?id=221527

Patch by Rob Buis <rbuis@igalia.com> on 2021-02-08
Reviewed by Simon Fraser.

Source/WebCore:

Make auto && <ratio> aspect-ratio use content box-sizing as specified:
https://drafts.csswg.org/css-sizing-4/#valdef-aspect-ratio-auto--ratio

  • rendering/RenderBlock.cpp:

(WebCore::RenderBlock::availableLogicalHeightForPercentageComputation const):

  • rendering/RenderBox.cpp:

(WebCore::RenderBox::computeLogicalHeight const):
(WebCore::RenderBox::availableLogicalHeightUsing const):
(WebCore::RenderBox::computePositionedLogicalHeightUsing const):
(WebCore::RenderBox::computeLogicalWidthFromAspectRatio const):
(WebCore::RenderBox::computeMinMaxLogicalWidthFromAspectRatio const):

  • rendering/style/RenderStyle.h:

(WebCore::RenderStyle::boxSizingForAspectRatio const):

LayoutTests:

Enable some tests that pass now.

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r272567 r272569  
     12021-02-08  Rob Buis  <rbuis@igalia.com>
     2
     3        Make auto && <ratio> use content box-sizing
     4        https://bugs.webkit.org/show_bug.cgi?id=221527
     5
     6        Reviewed by Simon Fraser.
     7
     8        Enable some tests that pass now.
     9
     10        * TestExpectations:
     11
    1122021-02-08  Simon Fraser  <simon.fraser@apple.com>
    213
  • trunk/LayoutTests/TestExpectations

    r272489 r272569  
    44144414webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/abspos-013.html [ ImageOnlyFailure ]
    44154415webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/abspos-014.html [ ImageOnlyFailure ]
    4416 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-004.html [ ImageOnlyFailure ]
    4417 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-006.html [ ImageOnlyFailure ]
    44184416webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-009.html [ ImageOnlyFailure ]
    44194417webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-014.html [ ImageOnlyFailure ]
  • trunk/Source/WebCore/ChangeLog

    r272567 r272569  
     12021-02-08  Rob Buis  <rbuis@igalia.com>
     2
     3        Make auto && <ratio> use content box-sizing
     4        https://bugs.webkit.org/show_bug.cgi?id=221527
     5
     6        Reviewed by Simon Fraser.
     7
     8        Make auto && <ratio> aspect-ratio use content box-sizing as specified:
     9        https://drafts.csswg.org/css-sizing-4/#valdef-aspect-ratio-auto--ratio
     10
     11        * rendering/RenderBlock.cpp:
     12        (WebCore::RenderBlock::availableLogicalHeightForPercentageComputation const):
     13        * rendering/RenderBox.cpp:
     14        (WebCore::RenderBox::computeLogicalHeight const):
     15        (WebCore::RenderBox::availableLogicalHeightUsing const):
     16        (WebCore::RenderBox::computePositionedLogicalHeightUsing const):
     17        (WebCore::RenderBox::computeLogicalWidthFromAspectRatio const):
     18        (WebCore::RenderBox::computeMinMaxLogicalWidthFromAspectRatio const):
     19        * rendering/style/RenderStyle.h:
     20        (WebCore::RenderStyle::boxSizingForAspectRatio const):
     21
    1222021-02-08  Simon Fraser  <simon.fraser@apple.com>
    223
  • trunk/Source/WebCore/rendering/RenderBlock.cpp

    r271934 r272569  
    32123212        availableHeight = std::max(0_lu, constrainContentBoxLogicalHeightByMinMax(contentBoxHeight - scrollbarLogicalHeight(), WTF::nullopt));
    32133213    } else if (shouldComputeLogicalHeightFromAspectRatio()) {
    3214         availableHeight = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizing(), logicalWidth());
     3214        availableHeight = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalWidth());
    32153215    } else if (styleToUse.logicalHeight().isPercentOrCalculated() && !isOutOfFlowPositionedWithSpecifiedHeight) {
    32163216        Optional<LayoutUnit> heightWithScrollbar = computePercentageLogicalHeight(styleToUse.logicalHeight());
  • trunk/Source/WebCore/rendering/RenderBox.cpp

    r272363 r272569  
    29452945            LayoutUnit intrinsicHeight = computedValues.m_extent - borderAndPaddingLogicalHeight();
    29462946            if (shouldComputeLogicalHeightFromAspectRatio())
    2947                 heightResult = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizing(), logicalWidth());
     2947                heightResult = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalWidth());
    29482948            else
    29492949                heightResult = computeLogicalHeightUsing(MainOrPreferredSize, style().logicalHeight(), intrinsicHeight).valueOr(computedValues.m_extent);
     
    33773377
    33783378    if (shouldComputeLogicalHeightFromAspectRatio())
    3379         return blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizing(), logicalWidth());
     3379        return blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalWidth());
    33803380
    33813381    if (h.isPercentOrCalculated() && isOutOfFlowPositioned() && !isRenderFragmentedFlow()) {
     
    41544154            resolvedLogicalHeight = computeIntrinsicLogicalContentHeightUsing(logicalHeightLength, contentLogicalHeight, bordersPlusPadding).value();
    41554155        else if (fromAspectRatio) {
    4156             resolvedLogicalHeight = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizing(), logicalWidth());
     4156            resolvedLogicalHeight = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalWidth());
    41574157            resolvedLogicalHeight = std::max(LayoutUnit(), resolvedLogicalHeight - bordersPlusPadding);
    41584158        } else
     
    51125112    LayoutUnit logicalHeightforAspectRatio = computedValues.m_extent;
    51135113
    5114     auto logicalWidth = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizing(), logicalHeightforAspectRatio);
     5114    auto logicalWidth = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalHeightforAspectRatio);
    51155115
    51165116    LayoutUnit containerWidthInInlineDirection = std::max<LayoutUnit>(0, containingBlockLogicalWidthForContentInFragment(fragment));
     
    51265126    LayoutUnit transferredMaxSize = LayoutUnit::max();
    51275127    if (blockMinSize > LayoutUnit())
    5128         transferredMinSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), ratio, style().boxSizing(), blockMinSize);
     5128        transferredMinSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), ratio, style().boxSizingForAspectRatio(), blockMinSize);
    51295129    if (blockMaxSize != LayoutUnit::max())
    5130         transferredMaxSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), ratio, style().boxSizing(), blockMaxSize);
     5130        transferredMaxSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), ratio, style().boxSizingForAspectRatio(), blockMaxSize);
    51315131    // Minimum size wins over maximum size.
    51325132    transferredMaxSize = std::max(transferredMaxSize, transferredMinSize);
  • trunk/Source/WebCore/rendering/style/RenderStyle.h

    r272035 r272569  
    513513            return aspectRatioWidth() / aspectRatioHeight();
    514514        return aspectRatioHeight() / aspectRatioWidth();
     515    }
     516    BoxSizing boxSizingForAspectRatio() const
     517    {
     518        if (aspectRatioType() == AspectRatioType::AutoAndRatio)
     519            return BoxSizing::ContentBox;
     520        return boxSizing();
    515521    }
    516522    bool hasAspectRatio() const { return aspectRatioType() == AspectRatioType::Ratio || aspectRatioType() == AspectRatioType::AutoAndRatio; }
Note: See TracChangeset for help on using the changeset viewer.