Changeset 286206 in webkit
- Timestamp:
- Nov 29, 2021 2:00:51 AM (8 months ago)
- Location:
- trunk
- Files:
-
- 6 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/TestExpectations (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/rendering/RenderFlexibleBox.cpp (modified) (4 diffs)
-
Source/WebCore/rendering/RenderReplaced.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderReplaced.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r286200 r286206 1 2021-10-27 Sergio Villar Senin <svillar@igalia.com> 2 3 [css-flexbox] Add support for replaced elements with intrinsic ratio and no intrinsic size 4 https://bugs.webkit.org/show_bug.cgi?id=231952 5 <rdar://problem/84662305> 6 7 Reviewed by Manuel Rego Casasnovas. 8 9 * TestExpectations: Unskipped a test case that is now passing. 10 1 11 2021-11-28 Matt Woodrow <matt.woodrow@gmail.com> 2 12 -
trunk/LayoutTests/TestExpectations
r286148 r286206 4243 4243 # SVGs as flex items. 4244 4244 webkit.org/b/221474 imported/w3c/web-platform-tests/css/css-flexbox/svg-root-as-flex-item-002.html [ ImageOnlyFailure ] 4245 webkit.org/b/221474 imported/w3c/web-platform-tests/css/css-flexbox/svg-root-as-flex-item-003.html [ ImageOnlyFailure ]4246 4245 4247 4246 # The test works fine but the expected result fails due to a missing layout. -
trunk/Source/WebCore/ChangeLog
r286205 r286206 1 2021-10-27 Sergio Villar Senin <svillar@igalia.com> 2 3 [css-flexbox] Add support for replaced elements with intrinsic ratio and no intrinsic size 4 https://bugs.webkit.org/show_bug.cgi?id=231952 5 <rdar://problem/84662305> 6 7 Reviewed by Manuel Rego Casasnovas. 8 9 It might be the case that replaced elements have intrinsic aspect ratio but no 10 intrinsic dimensions. Actually that's quite common for SVGs for example. We're 11 incorrectly assuming that flex items with no intrinsic dimensions didn't have 12 intrinsic aspect ratios which is wrong. 13 14 Added new checks that are able to detect those cases were we have an intrinsic 15 aspect ratio even though there are no intrinsic dimensions. 16 17 * rendering/RenderFlexibleBox.cpp: 18 (WebCore::isRenderReplacedWithIntrinsicAspectRatio): 19 (WebCore::childHasAspectRatio): 20 Consider replaced elements with intrinsic ratios and no intrinsic dimensions. 21 (WebCore::RenderFlexibleBox::computeMainSizeFromAspectRatioUsing const): 22 Let replaced elements compute the aspect ratio by themselves. 23 (WebCore::RenderFlexibleBox::childHasComputableAspectRatio const): 24 * rendering/RenderReplaced.cpp: 25 (WebCore::RenderReplaced::computeIntrinsicAspectRatio const): New method that 26 computes the aspect ratio for replaced elements. 27 * rendering/RenderReplaced.h: 28 1 29 2021-11-29 Kimmo Kinnunen <kkinnunen@apple.com> 2 30 -
trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp
r285885 r286206 38 38 #include "RenderLayer.h" 39 39 #include "RenderLayoutState.h" 40 #include "RenderObjectEnums.h" 41 #include "RenderReplaced.h" 40 42 #include "RenderStyleConstants.h" 43 #include "RenderSVGRoot.h" 41 44 #include "RenderView.h" 42 45 #include "WritingMode.h" … … 615 618 } 616 619 620 // FIXME: consider adding this check to RenderBox::hasIntrinsicAspectRatio(). We could even make it 621 // virtual returning false by default. RenderReplaced will overwrite it with the current implementation 622 // plus this extra check. See wkb.ug/231955. 623 static bool isRenderReplacedWithIntrinsicAspectRatio(const RenderBox& child) 624 { 625 if (!is<RenderReplaced>(child)) 626 return false; 627 // It's common for some replaced elements, such as SVGs, to have intrinsic aspect ratios but no intrinsic sizes. 628 // That's why it isn't enough just to check for intrinsic sizes in those cases. 629 return downcast<RenderReplaced>(child).computeIntrinsicAspectRatio() > 0; 630 }; 631 617 632 static bool childHasAspectRatio(const RenderBox& child) 618 633 { 619 return child.hasIntrinsicAspectRatio() || child.style().hasAspectRatio() ;634 return child.hasIntrinsicAspectRatio() || child.style().hasAspectRatio() || isRenderReplacedWithIntrinsicAspectRatio(child); 620 635 } 621 636 … … 884 899 } 885 900 886 const LayoutSize& childIntrinsicSize = child.intrinsicSize();887 901 double ratio; 888 if ( child.style().aspectRatioType() == AspectRatioType::Ratio || (child.style().aspectRatioType() == AspectRatioType::AutoAndRatio && childIntrinsicSize.isEmpty()))889 ratio = child.style().aspectRatioWidth() / child.style().aspectRatioHeight();902 if (is<RenderReplaced>(child)) 903 ratio = downcast<RenderReplaced>(child).computeIntrinsicAspectRatio(); 890 904 else { 891 ASSERT(childIntrinsicSize.height()); 892 ratio = childIntrinsicSize.width().toFloat() / childIntrinsicSize.height().toFloat(); 905 auto childIntrinsicSize = child.intrinsicSize(); 906 if (child.style().aspectRatioType() == AspectRatioType::Ratio || (child.style().aspectRatioType() == AspectRatioType::AutoAndRatio && childIntrinsicSize.isEmpty())) 907 ratio = child.style().aspectRatioWidth() / child.style().aspectRatioHeight(); 908 else { 909 ASSERT(childIntrinsicSize.height()); 910 ratio = childIntrinsicSize.width().toFloat() / childIntrinsicSize.height().toFloat(); 911 } 893 912 } 894 913 if (isHorizontalFlow()) … … 935 954 if (!childHasAspectRatio(child)) 936 955 return false; 937 return child.intrinsicSize().height() || child.style().hasAspectRatio() ;956 return child.intrinsicSize().height() || child.style().hasAspectRatio() || isRenderReplacedWithIntrinsicAspectRatio(child); 938 957 } 939 958 -
trunk/Source/WebCore/rendering/RenderReplaced.cpp
r286100 r286206 476 476 } 477 477 478 double RenderReplaced::computeIntrinsicAspectRatio() const 479 { 480 double intrinsicRatio; 481 FloatSize intrinsicSize; 482 computeAspectRatioInformationForRenderBox(embeddedContentBox(), intrinsicSize, intrinsicRatio); 483 return intrinsicRatio; 484 } 485 478 486 RoundedRect RenderReplaced::roundedContentBoxRect() const 479 487 { -
trunk/Source/WebCore/rendering/RenderReplaced.h
r278253 r286206 52 52 bool isContentLikelyVisibleInViewport(); 53 53 bool needsPreferredWidthsRecalculation() const override; 54 55 double computeIntrinsicAspectRatio() const; 54 56 55 57 protected:
Note: See TracChangeset
for help on using the changeset viewer.