Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc |
| diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc |
| index cf98fe68011761ebe2c205bbe9797f43844210b5..017e0a754ddf3953e2b59a80b3990aeb712b8ee9 100644 |
| --- a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc |
| +++ b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc |
| @@ -63,6 +63,10 @@ bool ClearanceMayAffectLayout( |
| return false; |
| } |
| +bool IsLegacyBlock(const NGLayoutInputNode& node) { |
| + return node.IsBlock() && !ToNGBlockNode(node).CanUseNewLayout(); |
| +} |
| + |
| // Whether we've run out of space in this flow. If so, there will be no work |
| // left to do for this block in this fragmentainer. |
| bool IsOutOfSpace(const NGConstraintSpace& space, LayoutUnit content_size) { |
| @@ -239,7 +243,7 @@ RefPtr<NGLayoutResult> NGBlockLayoutAlgorithm::Layout() { |
| if (child->IsFloating()) |
| FinishFloatChildLayout(child->Style(), *child_space, layout_result.Get()); |
| else |
| - FinishChildLayout(child_space.Get(), layout_result.Get()); |
| + FinishChildLayout(*child_space, child, layout_result.Get()); |
| entry = child_iterator.NextChild(); |
| child = entry.node; |
| @@ -344,15 +348,14 @@ NGLogicalOffset NGBlockLayoutAlgorithm::PrepareChildLayout( |
| curr_margin_strut_.Append(curr_child_margins_.block_start); |
| } |
| - bool is_legacy_block = |
| - child->IsBlock() && !ToNGBlockNode(child)->CanUseNewLayout(); |
| - |
| // TODO(crbug.com/716930): We should also collapse margins below once we |
| // remove LayoutInline splitting. |
| // Should collapse margins if our child is a legacy block. |
| - if (is_legacy_block) { |
| - curr_bfc_offset_.block_offset += curr_margin_strut_.Sum(); |
| + if (IsLegacyBlock(*child)) { |
| + curr_bfc_offset_ += |
| + {border_and_padding_.inline_start + curr_child_margins_.inline_start, |
|
ikilpatrick
2017/05/03 20:38:36
sorry just saw this - is this inline_offset correc
Gleb Lanbin
2017/05/03 21:51:00
discussed offline.
|
| + curr_margin_strut_.Sum()}; |
| MaybeUpdateFragmentBfcOffset(ConstraintSpace(), curr_bfc_offset_, |
| &container_builder_); |
| PositionPendingFloats(curr_bfc_offset_.block_offset, &container_builder_, |
| @@ -364,7 +367,8 @@ NGLogicalOffset NGBlockLayoutAlgorithm::PrepareChildLayout( |
| } |
| void NGBlockLayoutAlgorithm::FinishChildLayout( |
| - const NGConstraintSpace* child_space, |
| + const NGConstraintSpace& child_space, |
| + const NGLayoutInputNode* child, |
| NGLayoutResult* layout_result) { |
| // Pull out unpositioned floats to the current fragment. This may needed if |
| // for example the child fragment could not position its floats because it's |
| @@ -378,10 +382,12 @@ void NGBlockLayoutAlgorithm::FinishChildLayout( |
| // Determine the fragment's position in the parent space. |
| WTF::Optional<NGLogicalOffset> child_bfc_offset; |
| - if (child_space->IsNewFormattingContext()) |
| - child_bfc_offset = PositionNewFc(fragment, *child_space); |
| + if (child_space.IsNewFormattingContext()) |
| + child_bfc_offset = PositionNewFc(fragment, child_space); |
| else if (fragment.BfcOffset()) |
| child_bfc_offset = PositionWithBfcOffset(fragment); |
| + else if (IsLegacyBlock(*child)) |
| + child_bfc_offset = PositionLegacy(child_space); |
| else if (container_builder_.BfcOffset()) |
| child_bfc_offset = PositionWithParentBfc(); |
| @@ -472,6 +478,12 @@ NGLogicalOffset NGBlockLayoutAlgorithm::PositionWithParentBfc() { |
| return curr_bfc_offset_; |
| } |
| +NGLogicalOffset NGBlockLayoutAlgorithm::PositionLegacy( |
| + const NGConstraintSpace& child_space) { |
| + AdjustToClearance(child_space.ClearanceOffset(), &curr_bfc_offset_); |
| + return curr_bfc_offset_; |
| +} |
| + |
| void NGBlockLayoutAlgorithm::FinishFloatChildLayout( |
| const ComputedStyle& child_style, |
| const NGConstraintSpace& child_space, |