Changeset 271375 in webkit


Ignore:
Timestamp:
Jan 11, 2021 1:11:38 PM (18 months ago)
Author:
commit-queue@webkit.org
Message:

Take aspect-ratio into account for percentage resolution
https://bugs.webkit.org/show_bug.cgi?id=220143

Patch by Rob Buis <rbuis@igalia.com> on 2021-01-11
Reviewed by Darin Adler.

Address review feedback that I misinterpreted and did not
include in r271293.

  • rendering/RenderBlock.cpp:

(WebCore::RenderBlock::availableLogicalHeightForPercentageComputation const):

  • rendering/RenderBox.cpp:

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

  • rendering/RenderBox.h:

(WebCore::RenderBox::blockSizeFromAspectRatio):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r271373 r271375  
     12021-01-11  Rob Buis  <rbuis@igalia.com>
     2
     3        Take aspect-ratio into account for percentage resolution
     4        https://bugs.webkit.org/show_bug.cgi?id=220143
     5
     6        Reviewed by Darin Adler.
     7
     8        Address review feedback that I misinterpreted and did not
     9        include in r271293.
     10
     11        * rendering/RenderBlock.cpp:
     12        (WebCore::RenderBlock::availableLogicalHeightForPercentageComputation const):
     13        * rendering/RenderBox.cpp:
     14        (WebCore::inlineSizeFromAspectRatio):
     15        (WebCore::RenderBox::computeLogicalHeight const):
     16        (WebCore::RenderBox::availableLogicalHeightUsing const):
     17        (WebCore::RenderBox::computePositionedLogicalHeightUsing const):
     18        (WebCore::RenderBox::computeLogicalWidthFromAspectRatio const):
     19        * rendering/RenderBox.h:
     20        (WebCore::RenderBox::blockSizeFromAspectRatio):
     21
    1222021-01-11  Devin Rousso  <drousso@apple.com>
    223
  • trunk/Source/WebCore/rendering/RenderBlock.cpp

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

    r271293 r271375  
    24362436}
    24372437
    2438 static LayoutUnit inlineSizeFromAspectRatio(LayoutUnit borderPaddingInlineSum, LayoutUnit borderPaddingBlockSum, double aspectRatio, BoxSizing boxSizing, LayoutUnit blockSize)
     2438static LayoutUnit inlineSizeFromAspectRatio(LayoutUnit borderPaddingInlineSum, LayoutUnit borderPaddingBlockSum, LayoutUnit aspectRatio, BoxSizing boxSizing, LayoutUnit blockSize)
    24392439{
    24402440    if (boxSizing == BoxSizing::BorderBox)
     
    28972897            LayoutUnit intrinsicHeight = computedValues.m_extent - borderAndPaddingLogicalHeight();
    28982898            if (shouldComputeLogicalHeightFromAspectRatio())
    2899                 heightResult = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizing(), logicalWidth());
     2899                heightResult = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizing(), logicalWidth());
    29002900            else
    29012901                heightResult = computeLogicalHeightUsing(MainOrPreferredSize, style().logicalHeight(), intrinsicHeight).valueOr(computedValues.m_extent);
     
    33083308
    33093309    if (shouldComputeLogicalHeightFromAspectRatio())
    3310         return blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizing(), logicalWidth());
     3310        return blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizing(), logicalWidth());
    33113311
    33123312    if (h.isPercentOrCalculated() && isOutOfFlowPositioned() && !isRenderFragmentedFlow()) {
     
    40704070            resolvedLogicalHeight = computeIntrinsicLogicalContentHeightUsing(logicalHeightLength, contentLogicalHeight, bordersPlusPadding).value();
    40714071        else if (fromAspectRatio) {
    4072             resolvedLogicalHeight = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio() , style().boxSizing(), logicalWidth());
     4072            resolvedLogicalHeight = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizing(), logicalWidth());
    40734073            resolvedLogicalHeight = std::max(LayoutUnit(), resolvedLogicalHeight - bordersPlusPadding);
    40744074        } else
     
    50285028    LayoutUnit logicalHeightforAspectRatio = computedValues.m_extent;
    50295029
    5030     auto logicalWidth = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizing(), logicalHeightforAspectRatio);
     5030    auto logicalWidth = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizing(), logicalHeightforAspectRatio);
    50315031
    50325032    LayoutUnit containerWidthInInlineDirection = std::max<LayoutUnit>(0, containingBlockLogicalWidthForContentInFragment(fragment));
  • trunk/Source/WebCore/rendering/RenderBox.h

    r271293 r271375  
    702702    LayoutUnit computeLogicalWidthFromAspectRatio(RenderFragmentContainer* = nullptr) const;
    703703
    704     static LayoutUnit blockSizeFromAspectRatio(LayoutUnit borderPaddingInlineSum, LayoutUnit borderPaddingBlockSum, double aspectRatio, BoxSizing boxSizing, LayoutUnit inlineSize)
     704    static LayoutUnit blockSizeFromAspectRatio(LayoutUnit borderPaddingInlineSum, LayoutUnit borderPaddingBlockSum, LayoutUnit aspectRatio, BoxSizing boxSizing, LayoutUnit inlineSize)
    705705    {
    706706        if (boxSizing == BoxSizing::BorderBox)
    707             return inlineSize / LayoutUnit(aspectRatio);
    708         return ((inlineSize - borderPaddingInlineSum) / LayoutUnit(aspectRatio)) + borderPaddingBlockSum;
     707            return inlineSize / aspectRatio;
     708        return ((inlineSize - borderPaddingInlineSum) / aspectRatio) + borderPaddingBlockSum;
    709709    }
    710710
Note: See TracChangeset for help on using the changeset viewer.