Changeset 270551 in webkit
- Timestamp:
- Dec 8, 2020 12:29:55 PM (20 months ago)
- Location:
- trunk
- Files:
-
- 8 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/TestExpectations (modified) (6 diffs)
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/quirks-mode-002-expected.txt (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/rendering/RenderBox.cpp (modified) (5 diffs)
-
Source/WebCore/rendering/RenderBox.h (modified) (1 diff)
-
Source/WebCore/rendering/style/RenderStyle.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r270550 r270551 1 2020-12-08 Rob Buis <rbuis@igalia.com> 2 3 Support aspect-ratio on non-replaced elements 4 https://bugs.webkit.org/show_bug.cgi?id=218794 5 6 Reviewed by Simon Fraser. 7 8 Unskip some tests that pass now. 9 10 * TestExpectations: 11 1 12 2020-12-08 Yusuke Suzuki <ysuzuki@apple.com> 2 13 -
trunk/LayoutTests/TestExpectations
r270324 r270551 3244 3244 webkit.org/b/203514 imported/w3c/web-platform-tests/css/css-sizing/range-percent-intrinsic-size-2a.html [ ImageOnlyFailure ] 3245 3245 webkit.org/b/203515 imported/w3c/web-platform-tests/css/css-sizing/slice-intrinsic-size.html [ ImageOnlyFailure ] 3246 webkit.org/b/203516 imported/w3c/web-platform-tests/css/css-sizing/whitespace-and-break.html [ ImageOnlyFailure ]3247 3246 webkit.org/b/203583 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio-affects-container-width-when-height-changes.html [ Pass Failure ] 3248 3247 … … 4431 4430 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/abspos-011.html [ ImageOnlyFailure ] 4432 4431 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/abspos-014.html [ ImageOnlyFailure ] 4433 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/auto-margins-001.html [ ImageOnlyFailure ] 4434 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-001.html [ ImageOnlyFailure ] 4435 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-002.html [ ImageOnlyFailure ] 4436 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-003.html [ ImageOnlyFailure ] 4437 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-004.html [ ImageOnlyFailure ] 4438 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-005.html [ ImageOnlyFailure ] 4439 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-006.html [ ImageOnlyFailure ] 4440 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-007.html [ ImageOnlyFailure ] 4441 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-008.html [ ImageOnlyFailure ] 4442 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-010.html [ ImageOnlyFailure ] 4443 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-011.html [ ImageOnlyFailure ] 4444 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-012.html [ ImageOnlyFailure ] 4445 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-013.html [ ImageOnlyFailure ] 4432 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-009.html [ ImageOnlyFailure ] 4433 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-014.html [ ImageOnlyFailure ] 4446 4434 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-015.html [ ImageOnlyFailure ] 4447 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-016.html [ ImageOnlyFailure ] 4448 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-018.html [ ImageOnlyFailure ] 4449 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-019.html [ ImageOnlyFailure ] 4435 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-017.html [ ImageOnlyFailure ] 4450 4436 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-020.html [ ImageOnlyFailure ] 4451 4437 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-021.html [ ImageOnlyFailure ] … … 4456 4442 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-027.html [ ImageOnlyFailure ] 4457 4443 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-028.html [ ImageOnlyFailure ] 4458 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-with-margin-collapsing-001.html [ ImageOnlyFailure ]4459 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/block-aspect-ratio-with-margin-collapsing-002.html [ ImageOnlyFailure ]4460 4444 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-001.html [ ImageOnlyFailure ] 4461 4445 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-002.html [ ImageOnlyFailure ] 4462 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-003.html [ ImageOnlyFailure ]4463 4446 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-004.html [ ImageOnlyFailure ] 4464 4447 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-005.html [ ImageOnlyFailure ] 4465 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-006.html [ ImageOnlyFailure ]4466 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-007.html [ ImageOnlyFailure ]4467 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-008.html [ ImageOnlyFailure ]4468 4448 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-009.html [ ImageOnlyFailure ] 4469 4449 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-011.html [ ImageOnlyFailure ] … … 4476 4456 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-018.html [ ImageOnlyFailure ] 4477 4457 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-019.html [ ImageOnlyFailure ] 4478 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-020.html [ ImageOnlyFailure ]4479 4458 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-021.html [ ImageOnlyFailure ] 4480 4459 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-022.html [ ImageOnlyFailure ] … … 4483 4462 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-001.html [ ImageOnlyFailure ] 4484 4463 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-002.html [ ImageOnlyFailure ] 4485 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-003.html [ ImageOnlyFailure ]4486 4464 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-004.html [ ImageOnlyFailure ] 4487 4465 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/intrinsic-size-005.html [ ImageOnlyFailure ] … … 4491 4469 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/percentage-resolution-001.html [ ImageOnlyFailure ] 4492 4470 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/percentage-resolution-002.html [ ImageOnlyFailure ] 4493 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/percentage-resolution-003.html [ ImageOnlyFailure ]4494 4471 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/percentage-resolution-004.html [ ImageOnlyFailure ] 4495 4472 webkit.org/b/214463 imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/replaced-element-001.html [ ImageOnlyFailure ] -
trunk/LayoutTests/imported/w3c/ChangeLog
r270486 r270551 1 2020-12-08 Rob Buis <rbuis@igalia.com> 2 3 Support aspect-ratio on non-replaced elements 4 https://bugs.webkit.org/show_bug.cgi?id=218794 5 6 Reviewed by Simon Fraser. 7 8 Adapt test expectation. 9 10 * web-platform-tests/css/css-sizing/aspect-ratio/quirks-mode-002-expected.txt: 11 1 12 2020-12-06 Youenn Fablet <youenn@apple.com> 2 13 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/aspect-ratio/quirks-mode-002-expected.txt
r269241 r270551 1 1 2 FAIL body height equals width assert_equals: expected 784 but got 584 2 PASS body height equals width 3 3 -
trunk/Source/WebCore/ChangeLog
r270544 r270551 1 2020-12-08 Rob Buis <rbuis@igalia.com> 2 3 Support aspect-ratio on non-replaced elements 4 https://bugs.webkit.org/show_bug.cgi?id=218794 5 6 Reviewed by Simon Fraser. 7 8 Compute logical width/height for non-replaced elements 9 taking aspect ratio into account. This is very basic 10 support and does not consider things like transferred min/max 11 block size. 12 13 * rendering/RenderBox.cpp: 14 (WebCore::inlineSizeFromAspectRatio): Helper to compute inline size given box-sizing mode, margins/borders, 15 block size and logical aspect ratio. 16 (WebCore::RenderBox::computeLogicalWidthInFragment const): 17 (WebCore::blockSizeFromAspectRatio): Helper to compute block size given box-sizing mode, margins/borders, 18 inline size and logical aspect ratio. 19 (WebCore::RenderBox::computeLogicalHeight const): 20 (WebCore::RenderBox::shouldComputeLogicalHeightFromAspectRatio const): 21 * rendering/RenderBox.h: 22 * rendering/style/RenderStyle.h: 23 (WebCore::RenderStyle::logicalAspectRatio const): Return aspect ratio taking direction into account. 24 (WebCore::RenderStyle::hasAspectRatio const): Return true if aspect-ratio property has <ratio> set. 25 1 26 2020-12-08 Antti Koivisto <antti@apple.com> 2 27 -
trunk/Source/WebCore/rendering/RenderBox.cpp
r270220 r270551 2420 2420 } 2421 2421 2422 static LayoutUnit inlineSizeFromAspectRatio(LayoutUnit borderPaddingInlineSum, LayoutUnit borderPaddingBlockSum, double aspectRatio, BoxSizing boxSizing, LayoutUnit blockSize) 2423 { 2424 if (boxSizing == BoxSizing::BorderBox) 2425 return blockSize * LayoutUnit(aspectRatio); 2426 2427 return ((blockSize - borderPaddingBlockSum) * LayoutUnit(aspectRatio)) + borderPaddingInlineSum; 2428 } 2429 2422 2430 void RenderBox::computeLogicalWidthInFragment(LogicalExtentComputedValues& computedValues, RenderFragmentContainer* fragment) const 2423 2431 { … … 2476 2484 containerWidthInInlineDirection = perpendicularContainingBlockLogicalHeight(); 2477 2485 2486 Optional<LayoutUnit> logicalHeight; 2487 if (style().hasAspectRatio() && style().logicalWidth().isAuto() && (style().logicalHeight().isFixed() || style().logicalHeight().isPercentOrCalculated())) 2488 logicalHeight = computeLogicalHeightUsing(MainOrPreferredSize, style().logicalHeight(), { }); 2489 2478 2490 // Width calculations 2479 if (treatAsReplaced) { 2491 if (logicalHeight) { 2492 LayoutUnit logicalWidth = inlineSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizing(), *logicalHeight); 2493 computedValues.m_extent = constrainLogicalWidthInFragmentByMinMax(logicalWidth, containerWidthInInlineDirection, cb, fragment); 2494 } else if (treatAsReplaced) { 2480 2495 computedValues.m_extent = logicalWidthLength.value() + borderAndPaddingLogicalWidth(); 2481 2496 } else { … … 2803 2818 } 2804 2819 2820 static LayoutUnit blockSizeFromAspectRatio(LayoutUnit borderPaddingInlineSum, LayoutUnit borderPaddingBlockSum, double aspectRatio, BoxSizing boxSizing, LayoutUnit inlineSize) 2821 { 2822 if (boxSizing == BoxSizing::BorderBox) 2823 return inlineSize / LayoutUnit(aspectRatio); 2824 2825 return ((inlineSize - borderPaddingInlineSum) / LayoutUnit(aspectRatio)) + borderPaddingBlockSum; 2826 } 2827 2805 2828 RenderBox::LogicalExtentComputedValues RenderBox::computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop) const 2806 2829 { … … 2870 2893 if (checkMinMaxHeight) { 2871 2894 LayoutUnit intrinsicHeight = computedValues.m_extent - borderAndPaddingLogicalHeight(); 2872 heightResult = computeLogicalHeightUsing(MainOrPreferredSize, style().logicalHeight(), intrinsicHeight).valueOr(computedValues.m_extent); 2895 if (shouldComputeLogicalHeightFromAspectRatio()) 2896 heightResult = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), style().logicalAspectRatio(), style().boxSizing(), logicalWidth()); 2897 else 2898 heightResult = computeLogicalHeightUsing(MainOrPreferredSize, style().logicalHeight(), intrinsicHeight).valueOr(computedValues.m_extent); 2873 2899 heightResult = constrainLogicalHeightByMinMax(heightResult, intrinsicHeight); 2874 2900 } else { … … 4950 4976 } 4951 4977 4978 bool RenderBox::shouldComputeLogicalHeightFromAspectRatio() const 4979 { 4980 if (!style().hasAspectRatio()) 4981 return false; 4982 4983 auto h = style().logicalHeight(); 4984 return h.isAuto() || (!isOutOfFlowPositioned() && h.isPercentOrCalculated() && percentageLogicalHeightIsResolvable()); 4985 } 4986 4952 4987 bool RenderBox::hasRelativeDimensions() const 4953 4988 { -
trunk/Source/WebCore/rendering/RenderBox.h
r270220 r270551 742 742 void applyTopLeftLocationOffsetWithFlipping(LayoutPoint&) const; 743 743 744 bool shouldComputeLogicalHeightFromAspectRatio() const; 745 744 746 private: 745 747 // The width/height of the contents + borders + padding. The x/y location is relative to our container (which is not always our parent). -
trunk/Source/WebCore/rendering/style/RenderStyle.h
r270023 r270551 504 504 double aspectRatioWidth() const { return m_rareNonInheritedData->aspectRatioWidth; } 505 505 double aspectRatioHeight() const { return m_rareNonInheritedData->aspectRatioHeight; } 506 double logicalAspectRatio() const 507 { 508 ASSERT(aspectRatioType() != AspectRatioType::Auto); 509 if (isHorizontalWritingMode()) 510 return aspectRatioWidth() / aspectRatioHeight(); 511 return aspectRatioHeight() / aspectRatioWidth(); 512 } 513 bool hasAspectRatio() const { return aspectRatioType() == AspectRatioType::Ratio || aspectRatioType() == AspectRatioType::AutoAndRatio; } 506 514 BoxAlignment boxAlign() const { return static_cast<BoxAlignment>(m_rareNonInheritedData->deprecatedFlexibleBox->align); } 507 515 BoxDirection boxDirection() const { return static_cast<BoxDirection>(m_inheritedFlags.boxDirection); }
Note: See TracChangeset
for help on using the changeset viewer.