Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1505)

Unified Diff: third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc

Issue 2921463004: [LayoutNG] PODify NGLayoutInputNode and sub-classes. (Closed)
Patch Set: new ng-bot expectations Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698