Commit 53f7b73b authored by David Grogan's avatar David Grogan Committed by Commit Bot

[FlexNG] Accommodate RTL flex containers

FlexibleBoxAlgorithm flips the positions of items in RTL row containers.
Legacy flips items in RTL column containers before setting their
positions and I thought I'd have to do something similar in LayoutNG.

But LayoutNG assumes children will be positioned without flipping for
RTL; the fragment flips children automatically upon creation [1]. So
this patch prevents FlexibleBoxAlgorithm from flipping for RTL in
FlexNG.

[1] https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.cc?rcl=70b1c5fbc63772bd98d26d26ddded71ca96f5f1f&l=76

Bug: 845235
Change-Id: I672b0b8b4f9781c54edaa60cb2ce7e0f46610cec
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1889011Reviewed-by: default avatarChristian Biesinger <cbiesinger@chromium.org>
Commit-Queue: David Grogan <dgrogan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#713165}
parent fd31128c
...@@ -487,9 +487,15 @@ void FlexLine::ComputeLineItemsPosition(LayoutUnit main_axis_offset, ...@@ -487,9 +487,15 @@ void FlexLine::ComputeLineItemsPosition(LayoutUnit main_axis_offset,
sum_justify_adjustments += initial_position; sum_justify_adjustments += initial_position;
LayoutUnit max_descent; // Used when align-items: baseline. LayoutUnit max_descent; // Used when align-items: baseline.
LayoutUnit max_child_cross_axis_extent; LayoutUnit max_child_cross_axis_extent;
bool should_flip_main_axis = bool should_flip_main_axis;
!algorithm->StyleRef().ResolvedIsColumnFlexDirection() && if (algorithm->IsNGFlexBox()) {
!algorithm->IsLeftToRightFlow(); should_flip_main_axis =
algorithm->StyleRef().ResolvedIsRowReverseFlexDirection();
} else {
should_flip_main_axis =
!algorithm->StyleRef().ResolvedIsColumnFlexDirection() &&
!algorithm->IsLeftToRightFlow();
}
LayoutUnit width_for_rtl = container_logical_width; LayoutUnit width_for_rtl = container_logical_width;
// -webkit-box always started layout at an origin of 0, regardless of // -webkit-box always started layout at an origin of 0, regardless of
// direction. // direction.
...@@ -960,6 +966,9 @@ void FlexLayoutAlgorithm::LayoutColumnReverse( ...@@ -960,6 +966,9 @@ void FlexLayoutAlgorithm::LayoutColumnReverse(
// We passed 0 as the initial main_axis offset to ComputeLineItemsPosition // We passed 0 as the initial main_axis offset to ComputeLineItemsPosition
// for ColumnReverse containers so here we have to add the // for ColumnReverse containers so here we have to add the
// border_scrollbar_padding of the container. // border_scrollbar_padding of the container.
// TODO(dgrogan): I think
// wpt/css/css-flexbox/flex-lines/multi-line-wrap-with-column-reverse.html
// fails because this totally ignores margins.
flex_item.desired_location.SetX( flex_item.desired_location.SetX(
main_axis_content_size + border_scrollbar_padding_before - main_axis_content_size + border_scrollbar_padding_before -
flex_item.desired_location.X() - item_main_size); flex_item.desired_location.X() - item_main_size);
...@@ -967,4 +976,12 @@ void FlexLayoutAlgorithm::LayoutColumnReverse( ...@@ -967,4 +976,12 @@ void FlexLayoutAlgorithm::LayoutColumnReverse(
} }
} }
bool FlexLayoutAlgorithm::IsNGFlexBox() const {
DCHECK(!all_items_.IsEmpty())
<< "You can't call IsNGFlexBox before adding items.";
// The FlexItems created by legacy will have an empty ng_input_node. An NG
// FlexItem's ng_input_node will have a LayoutBox.
return all_items_.at(0).ng_input_node.GetLayoutBox();
}
} // namespace blink } // namespace blink
...@@ -417,6 +417,7 @@ class FlexLayoutAlgorithm { ...@@ -417,6 +417,7 @@ class FlexLayoutAlgorithm {
void LayoutColumnReverse(LayoutUnit main_axis_content_size, void LayoutColumnReverse(LayoutUnit main_axis_content_size,
LayoutUnit border_scrollbar_padding_before); LayoutUnit border_scrollbar_padding_before);
bool IsNGFlexBox() const;
private: private:
EOverflow MainAxisOverflowForChild(const LayoutBox& child) const; EOverflow MainAxisOverflowForChild(const LayoutBox& child) const;
......
...@@ -665,9 +665,6 @@ void NGFlexLayoutAlgorithm::GiveLinesAndItemsFinalPositionAndSize() { ...@@ -665,9 +665,6 @@ void NGFlexLayoutAlgorithm::GiveLinesAndItemsFinalPositionAndSize() {
if (DoesItemStretch(flex_item.ng_input_node)) if (DoesItemStretch(flex_item.ng_input_node))
ApplyStretchAlignmentToChild(flex_item); ApplyStretchAlignmentToChild(flex_item);
// TODO(dgrogan): Implement behavior from legacy's
// FlipForRightToLeftColumn here.
// flex_item.desired_location stores the main axis offset in X and the // flex_item.desired_location stores the main axis offset in X and the
// cross axis offset in Y. But AddChild wants offset from parent // cross axis offset in Y. But AddChild wants offset from parent
// rectangle, so we have to transpose for columns. AddChild takes care of // rectangle, so we have to transpose for columns. AddChild takes care of
......
...@@ -1383,16 +1383,12 @@ crbug.com/591099 external/wpt/css/css-flexbox/flexbox_align-items-stretch-3.html ...@@ -1383,16 +1383,12 @@ crbug.com/591099 external/wpt/css/css-flexbox/flexbox_align-items-stretch-3.html
### virtual/layout_ng_flex_box/css3/flexbox/ ### virtual/layout_ng_flex_box/css3/flexbox/
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/auto-height-column-with-border-and-padding.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/auto-height-column-with-border-and-padding.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-align-end.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-align-vertical-writing-mode.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-align-vertical-writing-mode.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-align.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-align.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow-2.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow-2.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow-auto-margins.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow-auto-margins.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow-border.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow-border.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow-margins-auto-size.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow-margins-auto-size.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow-margins.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow-orientations.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow-overflow.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow-padding.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow-padding.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-flow.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-order.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flex-order.html [ Failure ]
...@@ -1400,10 +1396,7 @@ crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flexbox-baseline-margin ...@@ -1400,10 +1396,7 @@ crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flexbox-baseline-margin
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flexbox-baseline.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flexbox-baseline.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flexbox-overflow-auto.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/flexbox-overflow-auto.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/minimum-size-image.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/minimum-size-image.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/multiline-align-self.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/multiline-justify-content.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/multiline-reverse-wrap-baseline.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/multiline-reverse-wrap-baseline.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/multiline.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/negative-overflow.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/negative-overflow.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/order-painting.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/order-painting.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/overflow-auto-resizes-correctly.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/overflow-auto-resizes-correctly.html [ Failure ]
...@@ -1411,8 +1404,6 @@ crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/percentage-height-repla ...@@ -1411,8 +1404,6 @@ crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/percentage-height-repla
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/position-absolute-child.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/position-absolute-child.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/relpos-with-percentage-top.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/relpos-with-percentage-top.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/style-change.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/style-change.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/true-centering.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/writing-modes.html [ Failure ]
### virtual/layout_ng_flex_box/css3/flexbox/mozilla/ ### virtual/layout_ng_flex_box/css3/flexbox/mozilla/
crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/mozilla/flexbox-items-as-stacking-contexts-2.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/css3/flexbox/mozilla/flexbox-items-as-stacking-contexts-2.html [ Failure ]
...@@ -1425,7 +1416,6 @@ crbug.com/591099 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/anonymo ...@@ -1425,7 +1416,6 @@ crbug.com/591099 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/anonymo
crbug.com/591099 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/anonymous-flex-item-003.html [ Failure ] crbug.com/591099 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/anonymous-flex-item-003.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-basis-010.html [ Failure ]
crbug.com/591099 virtual/layout_ng_flex_box/external/wpt/css/css-flexbox/flex-direction-row-vertical.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