Commit bf6ad6b7 authored by Ian Kilpatrick's avatar Ian Kilpatrick Committed by Commit Bot

[FlexNG] Resolve lengths within ConstructAndAppendFlexItems using IntrinsicBlockSize.

Previously we resolved lengths within ConstructAndAppendFlexItems using
the block-size from the initial fragment layout. This resulted in
under/over sized flex-items.

This changes the calls to use NGLayoutResult::IntrinsicBlockSize
instead.

This also changes a few of the calls to use just border_padding, instead
of border_scrollbar_padding.

Bug: 845235
Change-Id: Ib332d1c68b2e99c13715a4ee9bda79868695df31
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1986857
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: default avatarChristian Biesinger <cbiesinger@chromium.org>
Reviewed-by: default avatarDavid Grogan <dgrogan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#728244}
parent d860018d
...@@ -350,8 +350,6 @@ void NGFlexLayoutAlgorithm::ConstructAndAppendFlexItems() { ...@@ -350,8 +350,6 @@ void NGFlexLayoutAlgorithm::ConstructAndAppendFlexItems() {
// Use ChildHasIntrinsicMainAxisSize as a guide. // Use ChildHasIntrinsicMainAxisSize as a guide.
scoped_refptr<const NGLayoutResult> layout_result = scoped_refptr<const NGLayoutResult> layout_result =
child.Layout(child_space, /* break_token */ nullptr); child.Layout(child_space, /* break_token */ nullptr);
NGFragment fragment_in_child_writing_mode(
child_style.GetWritingMode(), layout_result->PhysicalFragment());
// We want the child's min/max size in its writing mode, not ours. We'll // We want the child's min/max size in its writing mode, not ours. We'll
// only ever use it if the child's inline axis is our main axis. // only ever use it if the child's inline axis is our main axis.
...@@ -376,7 +374,7 @@ void NGFlexLayoutAlgorithm::ConstructAndAppendFlexItems() { ...@@ -376,7 +374,7 @@ void NGFlexLayoutAlgorithm::ConstructAndAppendFlexItems() {
if (MainAxisIsInlineAxis(child)) if (MainAxisIsInlineAxis(child))
flex_base_border_box = intrinsic_sizes_border_box.max_size; flex_base_border_box = intrinsic_sizes_border_box.max_size;
else else
flex_base_border_box = fragment_in_child_writing_mode.BlockSize(); flex_base_border_box = layout_result->IntrinsicBlockSize();
} else { } else {
// TODO(dgrogan): Check for definiteness. // TODO(dgrogan): Check for definiteness.
// This block covers case A in // This block covers case A in
...@@ -394,7 +392,7 @@ void NGFlexLayoutAlgorithm::ConstructAndAppendFlexItems() { ...@@ -394,7 +392,7 @@ void NGFlexLayoutAlgorithm::ConstructAndAppendFlexItems() {
// flex basis is in child's block direction. // flex basis is in child's block direction.
flex_base_border_box = ResolveMainBlockLength( flex_base_border_box = ResolveMainBlockLength(
child_space, child_style, border_padding_in_child_writing_mode, child_space, child_style, border_padding_in_child_writing_mode,
length_to_resolve, fragment_in_child_writing_mode.BlockSize(), length_to_resolve, layout_result->IntrinsicBlockSize(),
LengthResolvePhase::kLayout); LengthResolvePhase::kLayout);
} }
} }
...@@ -433,31 +431,25 @@ void NGFlexLayoutAlgorithm::ConstructAndAppendFlexItems() { ...@@ -433,31 +431,25 @@ void NGFlexLayoutAlgorithm::ConstructAndAppendFlexItems() {
child_space, child_style, border_padding_in_child_writing_mode, child_space, child_style, border_padding_in_child_writing_mode,
intrinsic_sizes_border_box, max_property_in_main_axis, intrinsic_sizes_border_box, max_property_in_main_axis,
LengthResolvePhase::kLayout); LengthResolvePhase::kLayout);
min_max_sizes_in_cross_axis_direction.max_size = min_max_sizes_in_cross_axis_direction.max_size = ResolveMaxBlockLength(
ResolveMaxBlockLength(child_space, child_style, child_space, child_style, border_padding_in_child_writing_mode,
border_scrollbar_padding_in_child_writing_mode, max_property_in_cross_axis, layout_result->IntrinsicBlockSize(),
max_property_in_cross_axis, LengthResolvePhase::kLayout);
fragment_in_child_writing_mode.BlockSize(), min_max_sizes_in_cross_axis_direction.min_size = ResolveMinBlockLength(
LengthResolvePhase::kLayout); child_space, child_style, border_padding_in_child_writing_mode,
min_max_sizes_in_cross_axis_direction.min_size = min_property_in_cross_axis, layout_result->IntrinsicBlockSize(),
ResolveMinBlockLength(child_space, child_style, LengthResolvePhase::kLayout);
border_scrollbar_padding_in_child_writing_mode,
min_property_in_cross_axis,
fragment_in_child_writing_mode.BlockSize(),
LengthResolvePhase::kLayout);
} else { } else {
min_max_sizes_in_main_axis_direction.max_size = ResolveMaxBlockLength( min_max_sizes_in_main_axis_direction.max_size = ResolveMaxBlockLength(
child_space, child_style, border_padding_in_child_writing_mode, child_space, child_style, border_padding_in_child_writing_mode,
max_property_in_main_axis, fragment_in_child_writing_mode.BlockSize(), max_property_in_main_axis, layout_result->IntrinsicBlockSize(),
LengthResolvePhase::kLayout); LengthResolvePhase::kLayout);
min_max_sizes_in_cross_axis_direction.max_size = ResolveMaxInlineLength( min_max_sizes_in_cross_axis_direction.max_size = ResolveMaxInlineLength(
child_space, child_style, child_space, child_style, border_padding_in_child_writing_mode,
border_scrollbar_padding_in_child_writing_mode,
intrinsic_sizes_border_box, max_property_in_cross_axis, intrinsic_sizes_border_box, max_property_in_cross_axis,
LengthResolvePhase::kLayout); LengthResolvePhase::kLayout);
min_max_sizes_in_cross_axis_direction.min_size = ResolveMinInlineLength( min_max_sizes_in_cross_axis_direction.min_size = ResolveMinInlineLength(
child_space, child_style, child_space, child_style, border_padding_in_child_writing_mode,
border_scrollbar_padding_in_child_writing_mode,
intrinsic_sizes_border_box, min_property_in_cross_axis, intrinsic_sizes_border_box, min_property_in_cross_axis,
LengthResolvePhase::kLayout); LengthResolvePhase::kLayout);
} }
...@@ -526,8 +518,7 @@ void NGFlexLayoutAlgorithm::ConstructAndAppendFlexItems() { ...@@ -526,8 +518,7 @@ void NGFlexLayoutAlgorithm::ConstructAndAppendFlexItems() {
} else { } else {
min_max_sizes_in_main_axis_direction.min_size = ResolveMinBlockLength( min_max_sizes_in_main_axis_direction.min_size = ResolveMinBlockLength(
child_space, child_style, border_padding_in_child_writing_mode, min, child_space, child_style, border_padding_in_child_writing_mode, min,
fragment_in_child_writing_mode.BlockSize(), layout_result->IntrinsicBlockSize(), LengthResolvePhase::kLayout);
LengthResolvePhase::kLayout);
} }
// TODO(dgrogan): Should this include scrollbar? // TODO(dgrogan): Should this include scrollbar?
min_max_sizes_in_main_axis_direction -= main_axis_border_scrollbar_padding; min_max_sizes_in_main_axis_direction -= main_axis_border_scrollbar_padding;
......
...@@ -1318,7 +1318,7 @@ crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/relpos-with-percentage- ...@@ -1318,7 +1318,7 @@ crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/relpos-with-percentage-
crbug.com/591099 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/align-items-004.htm [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/align-items-004.htm [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/align-items-baseline-overflow-non-visible.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/align-items-baseline-overflow-non-visible.html [ Failure ]
crbug.com/807497 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/anonymous-flex-item-005.html [ Failure ] crbug.com/807497 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/anonymous-flex-item-005.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/flex-basis-010.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/flex-aspect-ratio-img-column-004.html [ Failure ]
crbug.com/249112 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-005.xht [ Failure ] crbug.com/249112 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-005.xht [ Failure ]
crbug.com/249112 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-007.xht [ Failure ] crbug.com/249112 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-007.xht [ Failure ]
crbug.com/996474 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-009.html [ Pass Failure ] crbug.com/996474 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-009.html [ Pass 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