| Index: third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc
|
| diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc
|
| index cb4ab397cd2e4289945ed3617d16e58611afb18b..c8c5e158f9c0806e1b8c037764dd92b61ab5af3b 100644
|
| --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc
|
| +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc
|
| @@ -31,6 +31,34 @@
|
|
|
| namespace blink {
|
|
|
| +namespace {
|
| +
|
| +// Set the geometry to InlineFlowBox by computing the union of children.
|
| +void PlaceInlineFlowBoxes(InlineFlowBox* flow_box) {
|
| + LayoutUnit logical_left = LayoutUnit::Max();
|
| + LayoutUnit logical_right = LayoutUnit::Min();
|
| + LayoutUnit logical_top = LayoutUnit::Max();
|
| + for (InlineBox* curr = flow_box->FirstChild(); curr;
|
| + curr = curr->NextOnLine()) {
|
| + if (curr->GetLineLayoutItem().IsLayoutInline()) {
|
| + InlineFlowBox* flow = ToInlineFlowBox(curr);
|
| + PlaceInlineFlowBoxes(flow);
|
| + }
|
| + logical_left = std::min(curr->LogicalLeft(), logical_left);
|
| + logical_right = std::max(curr->LogicalRight(), logical_right);
|
| + logical_top = std::min(curr->LogicalTop(), logical_top);
|
| + }
|
| + if (logical_left == LayoutUnit::Max())
|
| + return;
|
| + logical_left -= flow_box->MarginBorderPaddingLogicalLeft();
|
| + logical_right += flow_box->MarginBorderPaddingLogicalRight();
|
| + flow_box->SetLogicalLeft(logical_left);
|
| + flow_box->SetLogicalWidth(logical_right - logical_left);
|
| + flow_box->SetLogicalTop(logical_top);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| NGInlineNode::NGInlineNode(LayoutObject* start_inline, LayoutNGBlockFlow* block)
|
| : NGLayoutInputNode(NGLayoutInputNodeType::kLegacyInline),
|
| start_inline_(start_inline),
|
| @@ -358,6 +386,10 @@ void NGInlineNode::CopyFragmentDataToLayoutBox(
|
| }
|
| DCHECK(!run);
|
|
|
| + // InlineTextBox and InlineBox are placed, but when ConstructLine() created
|
| + // InlineFlowBox, they needed to be placed as well.
|
| + PlaceInlineFlowBoxes(root_line_box);
|
| +
|
| // Copy to RootInlineBox.
|
| NGLineBoxFragment line_box(constraint_space.WritingMode(),
|
| physical_line_box);
|
|
|