Changeset 287023 in webkit


Ignore:
Timestamp:
Dec 14, 2021 8:20:09 AM (7 months ago)
Author:
commit-queue@webkit.org
Message:

Incorrect aspect ratio size
https://bugs.webkit.org/show_bug.cgi?id=234148

Patch by Rob Buis <rbuis@igalia.com> on 2021-12-14
Reviewed by Manuel Rego Casasnovas.

LayoutTests/imported/w3c:

  • web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-036-expected.xht: Added.
  • web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-036.html: Added.

Source/WebCore:

We previously did a LayoutUnit conversion for the aspect ratio parameter, possibly because
blockSizeFromAspectRatio/inlineSizeFromAspectRatio changed the parameter type over time.
Since this conversion loses precision, just pass as double.

Test: imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-036.html

  • rendering/RenderBox.cpp:

(WebCore::RenderBox::constrainLogicalHeightByMinMax const):
(WebCore::RenderBox::computeLogicalHeight const):
(WebCore::RenderBox::availableLogicalHeightUsing const):
(WebCore::RenderBox::computePositionedLogicalHeightUsing const):
(WebCore::RenderBox::computeLogicalWidthFromAspectRatioInternal const):
(WebCore::RenderBox::computeMinMaxLogicalWidthFromAspectRatio const):

Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r286988 r287023  
     12021-12-14  Rob Buis  <rbuis@igalia.com>
     2
     3        Incorrect aspect ratio size
     4        https://bugs.webkit.org/show_bug.cgi?id=234148
     5
     6        Reviewed by Manuel Rego Casasnovas.
     7
     8        * web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-036-expected.xht: Added.
     9        * web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-036.html: Added.
     10
    1112021-12-13  Andreu Botella  <andreu@andreubotella.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r287021 r287023  
     12021-12-14  Rob Buis  <rbuis@igalia.com>
     2
     3        Incorrect aspect ratio size
     4        https://bugs.webkit.org/show_bug.cgi?id=234148
     5
     6        Reviewed by Manuel Rego Casasnovas.
     7
     8        We previously did a LayoutUnit conversion for the aspect ratio parameter, possibly because
     9        blockSizeFromAspectRatio/inlineSizeFromAspectRatio changed the parameter type over time.
     10        Since this conversion loses precision, just pass as double.
     11
     12        Test: imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-036.html
     13
     14        * rendering/RenderBox.cpp:
     15        (WebCore::RenderBox::constrainLogicalHeightByMinMax const):
     16        (WebCore::RenderBox::computeLogicalHeight const):
     17        (WebCore::RenderBox::availableLogicalHeightUsing const):
     18        (WebCore::RenderBox::computePositionedLogicalHeightUsing const):
     19        (WebCore::RenderBox::computeLogicalWidthFromAspectRatioInternal const):
     20        (WebCore::RenderBox::computeMinMaxLogicalWidthFromAspectRatio const):
     21
    1222021-12-14  Jean-Yves Avenard  <jya@apple.com>
    223
  • trunk/Source/WebCore/rendering/RenderBox.cpp

    r286827 r287023  
    686686    auto logicalMinHeight = styleToUse.logicalMinHeight();
    687687    if (logicalMinHeight.isAuto() && shouldComputeLogicalHeightFromAspectRatio() && intrinsicContentHeight && effectiveOverflowBlockDirection() == Overflow::Visible) {
    688         auto heightFromAspectRatio = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalWidth()) - borderAndPaddingLogicalHeight();
     688        auto heightFromAspectRatio = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), logicalWidth()) - borderAndPaddingLogicalHeight();
    689689        if (firstChild())
    690690            heightFromAspectRatio = std::max(heightFromAspectRatio, *intrinsicContentHeight);
     
    31003100        if (isTable()) {
    31013101            if (shouldComputeLogicalHeightFromAspectRatio())
    3102                 computedValues.m_extent = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalWidth());
     3102                computedValues.m_extent = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), logicalWidth());
    31033103            if (hasPerpendicularContainingBlock) {
    31043104                bool shouldFlipBeforeAfter = shouldFlipBeforeAfterMargins(cb.style(), &style());
     
    31503150                if (intrinsicHeight && style().boxSizingForAspectRatio() == BoxSizing::ContentBox)
    31513151                    *intrinsicHeight -= borderAndPaddingLogicalHeight();
    3152                 heightResult = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalWidth());
     3152                heightResult = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), logicalWidth());
    31533153            } else {
    31543154                if (intrinsicHeight)
     
    35963596
    35973597    if (shouldComputeLogicalHeightFromAspectRatio())
    3598         return blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalWidth());
     3598        return blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), logicalWidth());
    35993599
    36003600    if (h.isPercentOrCalculated() && isOutOfFlowPositioned() && !isRenderFragmentedFlow()) {
     
    44104410            resolvedLogicalHeight = adjustContentBoxLogicalHeightForBoxSizing(computeIntrinsicLogicalContentHeightUsing(logicalHeightLength, contentLogicalHeight, bordersPlusPadding).value());
    44114411        else if (fromAspectRatio) {
    4412             resolvedLogicalHeight = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalWidth());
     4412            resolvedLogicalHeight = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), logicalWidth());
    44134413            resolvedLogicalHeight = std::max(LayoutUnit(), resolvedLogicalHeight - bordersPlusPadding);
    44144414        } else
     
    54115411    LayoutUnit logicalHeightforAspectRatio = computedValues.m_extent;
    54125412
    5413     return inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalHeightforAspectRatio);
     5413    return inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), logicalHeightforAspectRatio);
    54145414}
    54155415
     
    54235423std::pair<LayoutUnit, LayoutUnit> RenderBox::computeMinMaxLogicalWidthFromAspectRatio() const
    54245424{
    5425     auto ratio = LayoutUnit { style().logicalAspectRatio() };
    54265425    LayoutUnit blockMinSize = constrainLogicalHeightByMinMax(LayoutUnit(), std::nullopt);
    54275426    LayoutUnit blockMaxSize = constrainLogicalHeightByMinMax(LayoutUnit::max(), std::nullopt);
     
    54295428    LayoutUnit transferredMaxSize = LayoutUnit::max();
    54305429    if (blockMinSize > LayoutUnit())
    5431         transferredMinSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), ratio, style().boxSizingForAspectRatio(), blockMinSize);
     5430        transferredMinSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), blockMinSize);
    54325431    if (blockMaxSize != LayoutUnit::max())
    5433         transferredMaxSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), ratio, style().boxSizingForAspectRatio(), blockMaxSize);
     5432        transferredMaxSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), blockMaxSize);
    54345433    // Minimum size wins over maximum size.
    54355434    transferredMaxSize = std::max(transferredMaxSize, transferredMinSize);
Note: See TracChangeset for help on using the changeset viewer.