| 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 50d4bd038b7538492ef4b729f15622459925e4c4..9ce10e864bc3b2d596ca3fa9097e9bddfdc634b3 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
|
| @@ -20,6 +20,7 @@
|
| #include "core/layout/ng/inline/ng_physical_line_box_fragment.h"
|
| #include "core/layout/ng/inline/ng_physical_text_fragment.h"
|
| #include "core/layout/ng/inline/ng_text_fragment.h"
|
| +#include "core/layout/ng/layout_ng_block_flow.h"
|
| #include "core/layout/ng/ng_box_fragment.h"
|
| #include "core/layout/ng/ng_constraint_space_builder.h"
|
| #include "core/layout/ng/ng_fragment_builder.h"
|
| @@ -151,27 +152,25 @@ unsigned PlaceInlineBoxChildren(
|
|
|
| } // namespace
|
|
|
| -NGInlineNode::NGInlineNode(LayoutObject* start_inline, LayoutNGBlockFlow* block)
|
| - : NGLayoutInputNode(NGLayoutInputNodeType::kLegacyInline),
|
| - start_inline_(start_inline),
|
| - block_(block) {
|
| +NGInlineNode::NGInlineNode(LayoutNGBlockFlow* block, LayoutObject* start_inline)
|
| + : NGLayoutInputNode(block) {
|
| DCHECK(start_inline);
|
| DCHECK(block);
|
| - block->ResetNGInlineNodeData();
|
| + block->SetLayoutNGInline(true);
|
| + if (!block->HasNGInlineNodeData()) {
|
| + block->ResetNGInlineNodeData();
|
| + }
|
| + MutableData().start_inline_ = start_inline;
|
| }
|
|
|
| -NGInlineNode::NGInlineNode()
|
| - : NGLayoutInputNode(NGLayoutInputNodeType::kLegacyInline),
|
| - start_inline_(nullptr),
|
| - block_(nullptr) {}
|
| -
|
| -NGInlineNode::~NGInlineNode() {}
|
| -
|
| NGInlineItemRange NGInlineNode::Items(unsigned start, unsigned end) {
|
| return NGInlineItemRange(&MutableData().items_, start, end);
|
| }
|
|
|
| void NGInlineNode::InvalidatePrepareLayout() {
|
| + LayoutObject* start_inline = Data().start_inline_;
|
| + ToLayoutNGBlockFlow(GetLayoutBlockFlow())->ResetNGInlineNodeData();
|
| + MutableData().start_inline_ = start_inline;
|
| MutableData().text_content_ = String();
|
| MutableData().items_.clear();
|
| }
|
| @@ -179,7 +178,7 @@ void NGInlineNode::InvalidatePrepareLayout() {
|
| void NGInlineNode::PrepareLayout() {
|
| // Scan list of siblings collecting all in-flow non-atomic inlines. A single
|
| // NGInlineNode represent a collection of adjacent non-atomic inlines.
|
| - CollectInlines(start_inline_, block_);
|
| + CollectInlines(Data().start_inline_, GetLayoutBlockFlow());
|
| if (Data().is_bidi_enabled_)
|
| SegmentText();
|
| ShapeText();
|
| @@ -199,7 +198,7 @@ void NGInlineNode::CollectInlines(LayoutObject* start, LayoutBlockFlow* block) {
|
|
|
| MutableData().text_content_ = builder.ToString();
|
| DCHECK(!next_sibling || !next_sibling->IsInline());
|
| - next_sibling_ = next_sibling ? new NGBlockNode(next_sibling) : nullptr;
|
| + MutableData().next_sibling_ = ToLayoutBox(next_sibling);
|
| MutableData().is_bidi_enabled_ =
|
| !Data().text_content_.IsEmpty() &&
|
| !(Data().text_content_.Is8Bit() && !builder.HasBidiControls());
|
| @@ -319,7 +318,7 @@ RefPtr<NGLayoutResult> NGInlineNode::Layout(NGConstraintSpace* constraint_space,
|
| InvalidatePrepareLayout();
|
| PrepareLayout();
|
|
|
| - NGInlineLayoutAlgorithm algorithm(this, constraint_space,
|
| + NGInlineLayoutAlgorithm algorithm(*this, constraint_space,
|
| ToNGInlineBreakToken(break_token));
|
| RefPtr<NGLayoutResult> result = algorithm.Layout();
|
| CopyFragmentDataToLayoutBox(*constraint_space, result.Get());
|
| @@ -328,14 +327,17 @@ RefPtr<NGLayoutResult> NGInlineNode::Layout(NGConstraintSpace* constraint_space,
|
|
|
| enum class ContentSizeMode { Max, Sum };
|
|
|
| -static LayoutUnit ComputeContentSize(NGInlineNode* node,
|
| +static LayoutUnit ComputeContentSize(NGInlineNode node,
|
| ContentSizeMode mode,
|
| - LayoutUnit available_inline_size,
|
| - NGConstraintSpaceBuilder* space_builder,
|
| - NGWritingMode writing_mode) {
|
| - space_builder->SetAvailableSize({available_inline_size, NGSizeIndefinite});
|
| + LayoutUnit available_inline_size) {
|
| + const ComputedStyle& style = node.Style();
|
| + NGWritingMode writing_mode = FromPlatformWritingMode(style.GetWritingMode());
|
| +
|
| RefPtr<NGConstraintSpace> space =
|
| - space_builder->ToConstraintSpace(writing_mode);
|
| + NGConstraintSpaceBuilder(writing_mode)
|
| + .SetTextDirection(style.Direction())
|
| + .SetAvailableSize({available_inline_size, NGSizeIndefinite})
|
| + .ToConstraintSpace(writing_mode);
|
| NGLineBreaker line_breaker(node, space.Get());
|
| NGInlineLayoutAlgorithm algorithm(node, space.Get());
|
| NGInlineItemResults item_results;
|
| @@ -369,36 +371,24 @@ MinMaxContentSize NGInlineNode::ComputeMinMaxContentSize() {
|
| // Compute the max of inline sizes of all line boxes with 0 available inline
|
| // size. This gives the min-content, the width where lines wrap at every
|
| // break opportunity.
|
| - const ComputedStyle& style = Style();
|
| - NGWritingMode writing_mode = FromPlatformWritingMode(style.GetWritingMode());
|
| - NGConstraintSpaceBuilder space_builder(writing_mode);
|
| - space_builder.SetTextDirection(style.Direction());
|
| - space_builder.SetAvailableSize({LayoutUnit(), NGSizeIndefinite});
|
| - RefPtr<NGConstraintSpace> space =
|
| - space_builder.ToConstraintSpace(writing_mode);
|
| MinMaxContentSize sizes;
|
| - sizes.min_content = ComputeContentSize(
|
| - this, ContentSizeMode::Max, LayoutUnit(), &space_builder, writing_mode);
|
| + sizes.min_content =
|
| + ComputeContentSize(*this, ContentSizeMode::Max, LayoutUnit());
|
|
|
| // Compute the sum of inline sizes of all inline boxes with no line breaks.
|
| // TODO(kojii): NGConstraintSpaceBuilder does not allow NGSizeIndefinite
|
| // inline available size. We can allow it, or make this more efficient
|
| // without using NGLineBreaker.
|
| sizes.max_content =
|
| - ComputeContentSize(this, ContentSizeMode::Sum, LayoutUnit::Max(),
|
| - &space_builder, writing_mode);
|
| + ComputeContentSize(*this, ContentSizeMode::Sum, LayoutUnit::Max());
|
|
|
| return sizes;
|
| }
|
|
|
| -NGLayoutInputNode* NGInlineNode::NextSibling() {
|
| +NGLayoutInputNode NGInlineNode::NextSibling() {
|
| if (!IsPrepareLayoutFinished())
|
| PrepareLayout();
|
| - return next_sibling_;
|
| -}
|
| -
|
| -LayoutObject* NGInlineNode::GetLayoutObject() const {
|
| - return GetLayoutBlockFlow();
|
| + return NGBlockNode(Data().next_sibling_);
|
| }
|
|
|
| void NGInlineNode::CopyFragmentDataToLayoutBox(
|
| @@ -504,9 +494,4 @@ String NGInlineNode::ToString() const {
|
| return String::Format("NGInlineNode");
|
| }
|
|
|
| -DEFINE_TRACE(NGInlineNode) {
|
| - visitor->Trace(next_sibling_);
|
| - NGLayoutInputNode::Trace(visitor);
|
| -}
|
| -
|
| } // namespace blink
|
|
|