Changeset 287023 in webkit
- Timestamp:
- Dec 14, 2021 8:20:09 AM (7 months ago)
- Location:
- trunk
- Files:
-
- 2 added
- 3 edited
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-036-expected.xht (added)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-036.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/rendering/RenderBox.cpp (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/imported/w3c/ChangeLog
r286988 r287023 1 2021-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 1 11 2021-12-13 Andreu Botella <andreu@andreubotella.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r287021 r287023 1 2021-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 1 22 2021-12-14 Jean-Yves Avenard <jya@apple.com> 2 23 -
trunk/Source/WebCore/rendering/RenderBox.cpp
r286827 r287023 686 686 auto logicalMinHeight = styleToUse.logicalMinHeight(); 687 687 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(); 689 689 if (firstChild()) 690 690 heightFromAspectRatio = std::max(heightFromAspectRatio, *intrinsicContentHeight); … … 3100 3100 if (isTable()) { 3101 3101 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()); 3103 3103 if (hasPerpendicularContainingBlock) { 3104 3104 bool shouldFlipBeforeAfter = shouldFlipBeforeAfterMargins(cb.style(), &style()); … … 3150 3150 if (intrinsicHeight && style().boxSizingForAspectRatio() == BoxSizing::ContentBox) 3151 3151 *intrinsicHeight -= borderAndPaddingLogicalHeight(); 3152 heightResult = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalWidth());3152 heightResult = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), logicalWidth()); 3153 3153 } else { 3154 3154 if (intrinsicHeight) … … 3596 3596 3597 3597 if (shouldComputeLogicalHeightFromAspectRatio()) 3598 return blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalWidth());3598 return blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), logicalWidth()); 3599 3599 3600 3600 if (h.isPercentOrCalculated() && isOutOfFlowPositioned() && !isRenderFragmentedFlow()) { … … 4410 4410 resolvedLogicalHeight = adjustContentBoxLogicalHeightForBoxSizing(computeIntrinsicLogicalContentHeightUsing(logicalHeightLength, contentLogicalHeight, bordersPlusPadding).value()); 4411 4411 else if (fromAspectRatio) { 4412 resolvedLogicalHeight = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalWidth());4412 resolvedLogicalHeight = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), logicalWidth()); 4413 4413 resolvedLogicalHeight = std::max(LayoutUnit(), resolvedLogicalHeight - bordersPlusPadding); 4414 4414 } else … … 5411 5411 LayoutUnit logicalHeightforAspectRatio = computedValues.m_extent; 5412 5412 5413 return inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalHeightforAspectRatio);5413 return inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), logicalHeightforAspectRatio); 5414 5414 } 5415 5415 … … 5423 5423 std::pair<LayoutUnit, LayoutUnit> RenderBox::computeMinMaxLogicalWidthFromAspectRatio() const 5424 5424 { 5425 auto ratio = LayoutUnit { style().logicalAspectRatio() };5426 5425 LayoutUnit blockMinSize = constrainLogicalHeightByMinMax(LayoutUnit(), std::nullopt); 5427 5426 LayoutUnit blockMaxSize = constrainLogicalHeightByMinMax(LayoutUnit::max(), std::nullopt); … … 5429 5428 LayoutUnit transferredMaxSize = LayoutUnit::max(); 5430 5429 if (blockMinSize > LayoutUnit()) 5431 transferredMinSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), ratio, style().boxSizingForAspectRatio(), blockMinSize);5430 transferredMinSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), blockMinSize); 5432 5431 if (blockMaxSize != LayoutUnit::max()) 5433 transferredMaxSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), ratio, style().boxSizingForAspectRatio(), blockMaxSize);5432 transferredMaxSize = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizingForAspectRatio(), blockMaxSize); 5434 5433 // Minimum size wins over maximum size. 5435 5434 transferredMaxSize = std::max(transferredMaxSize, transferredMinSize);
Note: See TracChangeset
for help on using the changeset viewer.