Commit 99a25516 authored by Christian Biesinger's avatar Christian Biesinger Committed by Commit Bot

[css-flexbox] Remove unnecessary arguments to ComputeStretchedSize and AvailableAlignmentSpace

We can just get them from the line. This also moves overriding the line's
cross axis extent to a more logical place (and adds it to the NG implementation).

Change-Id: I04da17674645fa55ff1903a15bdd4781ad26ef6e
Reviewed-on: https://chromium-review.googlesource.com/c/1338478Reviewed-by: default avatarDavid Grogan <dgrogan@chromium.org>
Commit-Queue: Christian Biesinger <cbiesinger@chromium.org>
Cr-Commit-Position: refs/heads/master@{#609022}
parent 22079e36
...@@ -1527,6 +1527,7 @@ crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/ali ...@@ -1527,6 +1527,7 @@ crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/ali
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/align-content-003.htm [ Failure ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/align-content-003.htm [ Failure ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/align-content-004.htm [ Failure ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/align-content-004.htm [ Failure ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/align-content-005.htm [ Failure ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/align-content-005.htm [ Failure ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/align-content-006.htm [ Failure ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/align-content-wrap-001.html [ Skip ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/align-content-wrap-001.html [ Skip ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/align-content-wrap-002.html [ Skip ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/align-content-wrap-002.html [ Skip ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/align-content-wrap-003.html [ Skip ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/align-content-wrap-003.html [ Skip ]
...@@ -1626,7 +1627,6 @@ crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/fle ...@@ -1626,7 +1627,6 @@ crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/fle
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flexbox_align-self-stretch.html [ Failure ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flexbox_align-self-stretch.html [ Failure ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flexbox_direction-column-reverse.html [ Skip ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flexbox_direction-column-reverse.html [ Skip ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flexbox_direction-column.html [ Skip ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flexbox_direction-column.html [ Skip ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flexbox_first-line.html [ Failure ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flexbox_flex-0-0-0-unitless.html [ Failure ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flexbox_flex-0-0-0-unitless.html [ Failure ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flexbox_flex-0-0-0.html [ Failure ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flexbox_flex-0-0-0.html [ Failure ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flexbox_flex-0-0.html [ Failure ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flexbox_flex-0-0.html [ Failure ]
...@@ -1702,13 +1702,11 @@ crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/ttw ...@@ -1702,13 +1702,11 @@ crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/ttw
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/ttwf-reftest-flex-inline.html [ Skip ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/ttwf-reftest-flex-inline.html [ Skip ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/ttwf-reftest-flex-order.html [ Failure ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/ttwf-reftest-flex-order.html [ Failure ]
crbug.com/467127 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/ttwf-reftest-flex-wrap-reverse.html [ Failure ] crbug.com/467127 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/ttwf-reftest-flex-wrap-reverse.html [ Failure ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/ttwf-reftest-flex-wrap.html [ Failure ]
### virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flex-lines/ ### virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flex-lines/
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flex-lines/multi-line-wrap-reverse-column-reverse.html [ Skip ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flex-lines/multi-line-wrap-reverse-column-reverse.html [ Skip ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flex-lines/multi-line-wrap-reverse-row-reverse.html [ Failure ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flex-lines/multi-line-wrap-reverse-row-reverse.html [ Failure ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flex-lines/multi-line-wrap-with-column-reverse.html [ Skip ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flex-lines/multi-line-wrap-with-column-reverse.html [ Skip ]
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/flex-lines/multi-line-wrap-with-row-reverse.html [ Failure ]
### virtual/layout_ng_experimental/external/wpt/css/css-flexbox/getcomputedstyle/ ### virtual/layout_ng_experimental/external/wpt/css/css-flexbox/getcomputedstyle/
crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/getcomputedstyle/flexbox_computedstyle_display-inline.html [ Skip ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/getcomputedstyle/flexbox_computedstyle_display-inline.html [ Skip ]
...@@ -5275,4 +5273,4 @@ crbug.com/497522 external/wpt/css/filter-effects/backdrop-filter-paint-order.htm ...@@ -5275,4 +5273,4 @@ crbug.com/497522 external/wpt/css/filter-effects/backdrop-filter-paint-order.htm
#Sheriff 2018-11-14 #Sheriff 2018-11-14
crbug.com/905694 [ Linux ] virtual/threaded/fast/scroll-behavior/smooth-scroll/scroll-during-selection.html [ Failure Pass ] crbug.com/905694 [ Linux ] virtual/threaded/fast/scroll-behavior/smooth-scroll/scroll-during-selection.html [ Failure Pass ]
crbug.com/905772 [ Linux ] virtual/sampling-heap-profiler/inspector-protocol/memory/sampling-native-profile-partition-alloc.js [ Failure Pass ] crbug.com/905772 [ Linux ] virtual/sampling-heap-profiler/inspector-protocol/memory/sampling-native-profile-partition-alloc.js [ Failure Pass ]
crbug.com/905827 [ Mac10.13 ] fast/dom/StyleSheet/stylesheet-move-between-documents-crash.html [ Failure Pass ] crbug.com/905827 [ Mac10.13 ] fast/dom/StyleSheet/stylesheet-move-between-documents-crash.html [ Failure Pass ]
\ No newline at end of file
...@@ -41,7 +41,9 @@ FlexItem::FlexItem(LayoutBox* box, ...@@ -41,7 +41,9 @@ FlexItem::FlexItem(LayoutBox* box,
MinMaxSize min_max_sizes, MinMaxSize min_max_sizes,
LayoutUnit main_axis_border_and_padding, LayoutUnit main_axis_border_and_padding,
LayoutUnit main_axis_margin) LayoutUnit main_axis_margin)
: box(box), : algorithm(nullptr),
line_number(0),
box(box),
flex_base_content_size(flex_base_content_size), flex_base_content_size(flex_base_content_size),
min_max_sizes(min_max_sizes), min_max_sizes(min_max_sizes),
hypothetical_main_content_size( hypothetical_main_content_size(
...@@ -104,10 +106,9 @@ LayoutUnit FlexItem::MarginBoxAscent() const { ...@@ -104,10 +106,9 @@ LayoutUnit FlexItem::MarginBoxAscent() const {
return ascent + FlowAwareMarginBefore(); return ascent + FlowAwareMarginBefore();
} }
LayoutUnit FlexItem::AvailableAlignmentSpace( LayoutUnit FlexItem::AvailableAlignmentSpace() const {
LayoutUnit line_cross_axis_extent) const {
LayoutUnit cross_extent = CrossAxisMarginExtent() + cross_axis_size; LayoutUnit cross_extent = CrossAxisMarginExtent() + cross_axis_size;
return line_cross_axis_extent - cross_extent; return Line()->cross_axis_extent - cross_extent;
} }
bool FlexItem::HasAutoMarginsInCrossAxis() const { bool FlexItem::HasAutoMarginsInCrossAxis() const {
...@@ -140,7 +141,7 @@ void FlexItem::UpdateAutoMarginsInMainAxis(LayoutUnit auto_margin_offset) { ...@@ -140,7 +141,7 @@ void FlexItem::UpdateAutoMarginsInMainAxis(LayoutUnit auto_margin_offset) {
} }
} }
void FlexItem::ComputeStretchedSize(LayoutUnit line_cross_axis_extent) { void FlexItem::ComputeStretchedSize() {
// TODO(dgrogan): Pass resolved cross-axis MinMaxSize to FlexItem // TODO(dgrogan): Pass resolved cross-axis MinMaxSize to FlexItem
// constructor. Then use cross_axis_min_max.ClampSizeToMinAndMax instead of // constructor. Then use cross_axis_min_max.ClampSizeToMinAndMax instead of
// relying on legacy in this method. // relying on legacy in this method.
...@@ -149,13 +150,14 @@ void FlexItem::ComputeStretchedSize(LayoutUnit line_cross_axis_extent) { ...@@ -149,13 +150,14 @@ void FlexItem::ComputeStretchedSize(LayoutUnit line_cross_axis_extent) {
if (MainAxisIsInlineAxis() && box->StyleRef().LogicalHeight().IsAuto()) { if (MainAxisIsInlineAxis() && box->StyleRef().LogicalHeight().IsAuto()) {
LayoutUnit stretched_logical_height = LayoutUnit stretched_logical_height =
std::max(box->BorderAndPaddingLogicalHeight(), std::max(box->BorderAndPaddingLogicalHeight(),
line_cross_axis_extent - CrossAxisMarginExtent()); Line()->cross_axis_extent - CrossAxisMarginExtent());
cross_axis_size = box->ConstrainLogicalHeightByMinMax( cross_axis_size = box->ConstrainLogicalHeightByMinMax(
stretched_logical_height, box->IntrinsicContentLogicalHeight()); stretched_logical_height, box->IntrinsicContentLogicalHeight());
} else if (!MainAxisIsInlineAxis() && } else if (!MainAxisIsInlineAxis() &&
box->StyleRef().LogicalWidth().IsAuto()) { box->StyleRef().LogicalWidth().IsAuto()) {
LayoutUnit child_width = (line_cross_axis_extent - CrossAxisMarginExtent()) LayoutUnit child_width =
.ClampNegativeToZero(); (Line()->cross_axis_extent - CrossAxisMarginExtent())
.ClampNegativeToZero();
// This probably doesn't work in NG because flexbox might not yet know its // This probably doesn't work in NG because flexbox might not yet know its
// CrossAxisContentExtent() // CrossAxisContentExtent()
cross_axis_size = box->ConstrainLogicalWidthByMinMax( cross_axis_size = box->ConstrainLogicalWidthByMinMax(
...@@ -401,7 +403,7 @@ FlexLine* FlexLayoutAlgorithm::ComputeNextFlexLine( ...@@ -401,7 +403,7 @@ FlexLine* FlexLayoutAlgorithm::ComputeNextFlexLine(
wtf_size_t start_index = next_item_index_; wtf_size_t start_index = next_item_index_;
for (; next_item_index_ < all_items_.size(); ++next_item_index_) { for (; next_item_index_ < all_items_.size(); ++next_item_index_) {
const FlexItem& flex_item = all_items_[next_item_index_]; FlexItem& flex_item = all_items_[next_item_index_];
DCHECK(!flex_item.box->IsOutOfFlowPositioned()); DCHECK(!flex_item.box->IsOutOfFlowPositioned());
if (IsMultiline() && if (IsMultiline() &&
sum_hypothetical_main_size + sum_hypothetical_main_size +
...@@ -417,6 +419,7 @@ FlexLine* FlexLayoutAlgorithm::ComputeNextFlexLine( ...@@ -417,6 +419,7 @@ FlexLine* FlexLayoutAlgorithm::ComputeNextFlexLine(
total_weighted_flex_shrink += flex_item.box->StyleRef().FlexShrink() * total_weighted_flex_shrink += flex_item.box->StyleRef().FlexShrink() *
flex_item.flex_base_content_size; flex_item.flex_base_content_size;
sum_hypothetical_main_size += flex_item.HypotheticalMainAxisMarginBoxSize(); sum_hypothetical_main_size += flex_item.HypotheticalMainAxisMarginBoxSize();
flex_item.line_number = flex_lines_.size();
} }
DCHECK(next_item_index_ > start_index || DCHECK(next_item_index_ > start_index ||
......
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
namespace blink { namespace blink {
class FlexItem; class FlexItem;
class FlexLine;
class FlexLayoutAlgorithm; class FlexLayoutAlgorithm;
class LayoutBox; class LayoutBox;
struct MinMaxSize; struct MinMaxSize;
...@@ -106,7 +107,7 @@ class FlexItem { ...@@ -106,7 +107,7 @@ class FlexItem {
LayoutUnit MarginBoxAscent() const; LayoutUnit MarginBoxAscent() const;
LayoutUnit AvailableAlignmentSpace(LayoutUnit) const; LayoutUnit AvailableAlignmentSpace() const;
bool HasAutoMarginsInCrossAxis() const; bool HasAutoMarginsInCrossAxis() const;
...@@ -114,9 +115,12 @@ class FlexItem { ...@@ -114,9 +115,12 @@ class FlexItem {
// Computes the cross-axis size that a stretched item should have and stores // Computes the cross-axis size that a stretched item should have and stores
// it in cross_axis_size. DCHECKs if the item is not stretch aligned. // it in cross_axis_size. DCHECKs if the item is not stretch aligned.
void ComputeStretchedSize(LayoutUnit line_cross_axis_extent); void ComputeStretchedSize();
inline const FlexLine* Line() const;
FlexLayoutAlgorithm* algorithm; FlexLayoutAlgorithm* algorithm;
wtf_size_t line_number;
LayoutBox* box; LayoutBox* box;
const LayoutUnit flex_base_content_size; const LayoutUnit flex_base_content_size;
const MinMaxSize min_max_sizes; const MinMaxSize min_max_sizes;
...@@ -293,6 +297,7 @@ class FlexLayoutAlgorithm { ...@@ -293,6 +297,7 @@ class FlexLayoutAlgorithm {
bool IsHorizontalFlow() const; bool IsHorizontalFlow() const;
bool IsColumnFlow() const; bool IsColumnFlow() const;
bool IsMultiline() const { return style_->FlexWrap() != EFlexWrap::kNowrap; }
static bool IsHorizontalFlow(const ComputedStyle&); static bool IsHorizontalFlow(const ComputedStyle&);
bool IsLeftToRightFlow() const; bool IsLeftToRightFlow() const;
TransformedWritingMode GetTransformedWritingMode() const; TransformedWritingMode GetTransformedWritingMode() const;
...@@ -318,7 +323,6 @@ class FlexLayoutAlgorithm { ...@@ -318,7 +323,6 @@ class FlexLayoutAlgorithm {
private: private:
EOverflow MainAxisOverflowForChild(const LayoutBox& child) const; EOverflow MainAxisOverflowForChild(const LayoutBox& child) const;
bool IsMultiline() const { return style_->FlexWrap() != EFlexWrap::kNowrap; }
const ComputedStyle* style_; const ComputedStyle* style_;
const LayoutUnit line_break_length_; const LayoutUnit line_break_length_;
...@@ -328,6 +332,10 @@ class FlexLayoutAlgorithm { ...@@ -328,6 +332,10 @@ class FlexLayoutAlgorithm {
DISALLOW_COPY_AND_ASSIGN(FlexLayoutAlgorithm); DISALLOW_COPY_AND_ASSIGN(FlexLayoutAlgorithm);
}; };
inline const FlexLine* FlexItem::Line() const {
return &algorithm->FlexLines()[line_number];
}
} // namespace blink } // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_FLEXIBLE_BOX_ALGORITHM_H_ #endif // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_FLEXIBLE_BOX_ALGORITHM_H_
...@@ -379,6 +379,13 @@ void LayoutFlexibleBox::RepositionLogicalHeightDependentFlexItems( ...@@ -379,6 +379,13 @@ void LayoutFlexibleBox::RepositionLogicalHeightDependentFlexItems(
LayoutUnit cross_axis_start_edge = line_contexts.IsEmpty() LayoutUnit cross_axis_start_edge = line_contexts.IsEmpty()
? LayoutUnit() ? LayoutUnit()
: line_contexts[0].cross_axis_offset; : line_contexts[0].cross_axis_offset;
// If we have a single line flexbox, the line height is all the available
// space. For flex-direction: row, this means we need to use the height, so
// we do this after calling updateLogicalHeight.
if (!IsMultiline() && !line_contexts.IsEmpty()) {
line_contexts[0].cross_axis_extent = CrossAxisContentExtent();
}
AlignFlexLines(line_contexts); AlignFlexLines(line_contexts);
AlignChildren(line_contexts); AlignChildren(line_contexts);
...@@ -1504,21 +1511,11 @@ void LayoutFlexibleBox::LayoutColumnReverse(FlexItemVectorView& children, ...@@ -1504,21 +1511,11 @@ void LayoutFlexibleBox::LayoutColumnReverse(FlexItemVectorView& children,
} }
void LayoutFlexibleBox::AlignFlexLines(Vector<FlexLine>& line_contexts) { void LayoutFlexibleBox::AlignFlexLines(Vector<FlexLine>& line_contexts) {
if (line_contexts.IsEmpty()) if (line_contexts.IsEmpty() || !IsMultiline())
return; return;
const StyleContentAlignmentData align_content = const StyleContentAlignmentData align_content =
FlexLayoutAlgorithm::ResolvedAlignContent(StyleRef()); FlexLayoutAlgorithm::ResolvedAlignContent(StyleRef());
// If we have a single line flexbox or a multiline line flexbox with only one
// flex line, the line height is all the available space. For
// flex-direction: row, this means we need to use the height, so we do this
// after calling updateLogicalHeight.
if (!IsMultiline()) {
line_contexts[0].cross_axis_extent = CrossAxisContentExtent();
return;
}
if (align_content.GetPosition() == ContentPosition::kFlexStart) if (align_content.GetPosition() == ContentPosition::kFlexStart)
return; return;
...@@ -1562,7 +1559,6 @@ void LayoutFlexibleBox::AlignChildren(Vector<FlexLine>& line_contexts) { ...@@ -1562,7 +1559,6 @@ void LayoutFlexibleBox::AlignChildren(Vector<FlexLine>& line_contexts) {
for (FlexLine& line_context : line_contexts) { for (FlexLine& line_context : line_contexts) {
LayoutUnit min_margin_after_baseline = LayoutUnit::Max(); LayoutUnit min_margin_after_baseline = LayoutUnit::Max();
LayoutUnit line_cross_axis_extent = line_context.cross_axis_extent;
LayoutUnit max_ascent = line_context.max_ascent; LayoutUnit max_ascent = line_context.max_ascent;
for (FlexItem& flex_item : line_context.line_items) { for (FlexItem& flex_item : line_context.line_items) {
...@@ -1570,26 +1566,24 @@ void LayoutFlexibleBox::AlignChildren(Vector<FlexLine>& line_contexts) { ...@@ -1570,26 +1566,24 @@ void LayoutFlexibleBox::AlignChildren(Vector<FlexLine>& line_contexts) {
if (UpdateAutoMarginsInCrossAxis( if (UpdateAutoMarginsInCrossAxis(
*flex_item.box, *flex_item.box,
std::max(LayoutUnit(), flex_item.AvailableAlignmentSpace( std::max(LayoutUnit(), flex_item.AvailableAlignmentSpace())))
line_cross_axis_extent))))
continue; continue;
ItemPosition position = flex_item.Alignment(); ItemPosition position = flex_item.Alignment();
if (position == ItemPosition::kStretch) { if (position == ItemPosition::kStretch) {
flex_item.ComputeStretchedSize(line_cross_axis_extent); flex_item.ComputeStretchedSize();
ApplyStretchAlignmentToChild(flex_item); ApplyStretchAlignmentToChild(flex_item);
} }
LayoutUnit available_space = LayoutUnit available_space = flex_item.AvailableAlignmentSpace();
flex_item.AvailableAlignmentSpace(line_cross_axis_extent);
LayoutUnit offset = AlignmentOffset( LayoutUnit offset = AlignmentOffset(
available_space, position, flex_item.MarginBoxAscent(), max_ascent, available_space, position, flex_item.MarginBoxAscent(), max_ascent,
StyleRef().FlexWrap() == EFlexWrap::kWrapReverse); StyleRef().FlexWrap() == EFlexWrap::kWrapReverse);
AdjustAlignmentForChild(*flex_item.box, offset); AdjustAlignmentForChild(*flex_item.box, offset);
if (position == ItemPosition::kBaseline && if (position == ItemPosition::kBaseline &&
StyleRef().FlexWrap() == EFlexWrap::kWrapReverse) { StyleRef().FlexWrap() == EFlexWrap::kWrapReverse) {
min_margin_after_baseline = std::min( min_margin_after_baseline =
min_margin_after_baseline, std::min(min_margin_after_baseline,
flex_item.AvailableAlignmentSpace(line_cross_axis_extent) - offset); flex_item.AvailableAlignmentSpace() - offset);
} }
} }
min_margin_after_baselines.push_back(min_margin_after_baseline); min_margin_after_baselines.push_back(min_margin_after_baseline);
......
...@@ -164,15 +164,15 @@ scoped_refptr<NGLayoutResult> NGFlexLayoutAlgorithm::Layout() { ...@@ -164,15 +164,15 @@ scoped_refptr<NGLayoutResult> NGFlexLayoutAlgorithm::Layout() {
// flexboxes are supported. // flexboxes are supported.
LayoutUnit final_content_block_size = LayoutUnit final_content_block_size =
block_size - flex_container_border_scrollbar_padding.BlockSum(); block_size - flex_container_border_scrollbar_padding.BlockSum();
if (!algorithm.IsMultiline() && !algorithm.FlexLines().IsEmpty())
algorithm.FlexLines()[0].cross_axis_extent = final_content_block_size;
for (FlexLine& line_context : algorithm.FlexLines()) { for (FlexLine& line_context : algorithm.FlexLines()) {
for (wtf_size_t child_number = 0; for (wtf_size_t child_number = 0;
child_number < line_context.line_items.size(); ++child_number) { child_number < line_context.line_items.size(); ++child_number) {
FlexItem& flex_item = line_context.line_items[child_number]; FlexItem& flex_item = line_context.line_items[child_number];
if (flex_item.Alignment() == ItemPosition::kStretch) { if (flex_item.Alignment() == ItemPosition::kStretch) {
flex_item.ComputeStretchedSize( flex_item.ComputeStretchedSize();
// TODO(dgrogan): Change this to line_context.cross_axis_extent once
// lines are also sized and spaced.
final_content_block_size);
NGConstraintSpaceBuilder space_builder( NGConstraintSpaceBuilder space_builder(
ConstraintSpace(), flex_item.box->StyleRef().GetWritingMode(), ConstraintSpace(), flex_item.box->StyleRef().GetWritingMode(),
/* is_new_fc */ true); /* is_new_fc */ true);
......
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