Commit 972d7094 authored by Christian Biesinger's avatar Christian Biesinger Committed by Commit Bot

[AspectRatio] Support for flexbox main axis

R=ikilpatrick@chromium.org

Bug: 1083010
Change-Id: Iad69b0ed34d181c483e4337f2f12200c27c52101
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2372737
Auto-Submit: Christian Biesinger <cbiesinger@chromium.org>
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: default avatarIan Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#801416}
parent 4d732dcb
...@@ -55,7 +55,8 @@ ...@@ -55,7 +55,8 @@
namespace blink { namespace blink {
static bool HasAspectRatio(const LayoutBox& child) { static bool HasAspectRatio(const LayoutBox& child) {
return child.IsImage() || child.IsCanvas() || IsA<LayoutVideo>(child); return child.IsImage() || child.IsCanvas() || IsA<LayoutVideo>(child) ||
child.StyleRef().AspectRatio();
} }
LayoutFlexibleBox::LayoutFlexibleBox(Element* element) LayoutFlexibleBox::LayoutFlexibleBox(Element* element)
...@@ -736,7 +737,7 @@ LayoutPoint LayoutFlexibleBox::FlowAwareLocationForChild( ...@@ -736,7 +737,7 @@ LayoutPoint LayoutFlexibleBox::FlowAwareLocationForChild(
bool LayoutFlexibleBox::UseChildAspectRatio(const LayoutBox& child) const { bool LayoutFlexibleBox::UseChildAspectRatio(const LayoutBox& child) const {
if (!HasAspectRatio(child)) if (!HasAspectRatio(child))
return false; return false;
if (child.IntrinsicSize().Height() == 0) { if (!child.StyleRef().AspectRatio() && child.IntrinsicSize().Height() == 0) {
// We can't compute a ratio in this case. // We can't compute a ratio in this case.
return false; return false;
} }
...@@ -749,7 +750,6 @@ LayoutUnit LayoutFlexibleBox::ComputeMainSizeFromAspectRatioUsing( ...@@ -749,7 +750,6 @@ LayoutUnit LayoutFlexibleBox::ComputeMainSizeFromAspectRatioUsing(
const LayoutBox& child, const LayoutBox& child,
const Length& cross_size_length) const { const Length& cross_size_length) const {
DCHECK(HasAspectRatio(child)); DCHECK(HasAspectRatio(child));
DCHECK_NE(child.IntrinsicSize().Height(), 0);
LayoutUnit cross_size; LayoutUnit cross_size;
if (cross_size_length.IsFixed()) { if (cross_size_length.IsFixed()) {
...@@ -762,9 +762,15 @@ LayoutUnit LayoutFlexibleBox::ComputeMainSizeFromAspectRatioUsing( ...@@ -762,9 +762,15 @@ LayoutUnit LayoutFlexibleBox::ComputeMainSizeFromAspectRatioUsing(
ValueForLength(cross_size_length, ContentWidth())); ValueForLength(cross_size_length, ContentWidth()));
} }
const LayoutSize& child_intrinsic_size = child.IntrinsicSize(); LayoutSize aspect_ratio;
double ratio = child_intrinsic_size.Width().ToFloat() / if (child.StyleRef().AspectRatio()) {
child_intrinsic_size.Height().ToFloat(); IntSize int_ratio = *child.StyleRef().AspectRatio();
aspect_ratio = LayoutSize{int_ratio.Width(), int_ratio.Height()};
} else {
aspect_ratio = child.IntrinsicSize();
}
double ratio =
aspect_ratio.Width().ToFloat() / aspect_ratio.Height().ToFloat();
if (IsHorizontalFlow()) if (IsHorizontalFlow())
return LayoutUnit(cross_size * ratio); return LayoutUnit(cross_size * ratio);
return LayoutUnit(cross_size / ratio); return LayoutUnit(cross_size / ratio);
......
...@@ -122,10 +122,6 @@ crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/block-aspect-ratio-02 ...@@ -122,10 +122,6 @@ crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/block-aspect-ratio-02
crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/block-aspect-ratio-026.tentative.html [ Failure ] crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/block-aspect-ratio-026.tentative.html [ Failure ]
crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/block-aspect-ratio-027.tentative.html [ Failure ] crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/block-aspect-ratio-027.tentative.html [ Failure ]
crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/block-aspect-ratio-028.tentative.html [ Failure ] crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/block-aspect-ratio-028.tentative.html [ Failure ]
crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-001.tentative.html [ Failure ]
crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-002.tentative.html [ Failure ]
crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-004.tentative.html [ Failure ]
crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-005.tentative.html [ Failure ]
crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-008.tentative.html [ Failure ] crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-008.tentative.html [ Failure ]
crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-009.tentative.html [ Failure ] crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-009.tentative.html [ Failure ]
crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/intrinsic-size-001.tentative.html [ Failure ] crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/intrinsic-size-001.tentative.html [ Failure ]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment