Index: third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc |
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc |
index 8d9bb44a994d8811aed6c90aeccbcb9bf5fa48ca..9538efa3fbf83a842ec6cf2ff385cafbe33c8ee5 100644 |
--- a/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc |
+++ b/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc |
@@ -68,15 +68,14 @@ void PositionPendingFloats(const NGLogicalOffset& origin_point, |
} // namespace |
NGInlineLayoutAlgorithm::NGInlineLayoutAlgorithm( |
- NGInlineNode* inline_box, |
- NGConstraintSpace* constraint_space, |
+ NGInlineNode* inline_node, |
+ NGConstraintSpace* space, |
NGInlineBreakToken* break_token) |
- : inline_box_(inline_box), |
- constraint_space_(constraint_space), |
- container_builder_(NGPhysicalFragment::kFragmentBox, inline_box_), |
+ : NGLayoutAlgorithm(inline_node, space, break_token), |
+ container_builder_(NGPhysicalFragment::kFragmentBox, inline_node), |
is_horizontal_writing_mode_( |
- blink::IsHorizontalWritingMode(constraint_space->WritingMode())), |
- space_builder_(constraint_space) |
+ blink::IsHorizontalWritingMode(space->WritingMode())), |
+ space_builder_(space) |
#if DCHECK_IS_ON() |
, |
is_bidi_reordered_(false) |
@@ -111,7 +110,7 @@ bool NGInlineLayoutAlgorithm::HasItemsAfterLastBreakOpportunity() const { |
void NGInlineLayoutAlgorithm::Initialize(unsigned index, unsigned offset) { |
if (index || offset) |
- inline_box_->AssertOffset(index, offset); |
+ Node()->AssertOffset(index, offset); |
start_index_ = last_index_ = last_break_opportunity_index_ = index; |
start_offset_ = end_offset_ = last_break_opportunity_offset_ = offset; |
@@ -122,7 +121,7 @@ void NGInlineLayoutAlgorithm::Initialize(unsigned index, unsigned offset) { |
void NGInlineLayoutAlgorithm::SetEnd(unsigned new_end_offset) { |
DCHECK_GT(new_end_offset, end_offset_); |
- const Vector<NGLayoutInlineItem>& items = inline_box_->Items(); |
+ const Vector<NGLayoutInlineItem>& items = Node()->Items(); |
DCHECK_LE(new_end_offset, items.back().EndOffset()); |
// SetEnd() while |new_end_offset| is beyond the current last item. |
@@ -155,7 +154,7 @@ void NGInlineLayoutAlgorithm::SetEnd(unsigned new_end_offset) { |
void NGInlineLayoutAlgorithm::SetEnd(unsigned index, |
unsigned new_end_offset, |
LayoutUnit inline_size_since_current_end) { |
- const Vector<NGLayoutInlineItem>& items = inline_box_->Items(); |
+ const Vector<NGLayoutInlineItem>& items = Node()->Items(); |
DCHECK_LE(new_end_offset, items.back().EndOffset()); |
// |new_end_offset| should be in the current item or next. |
@@ -212,7 +211,7 @@ LayoutUnit NGInlineLayoutAlgorithm::InlineSizeFromLayout( |
const NGLayoutResult* NGInlineLayoutAlgorithm::LayoutItem( |
const NGLayoutInlineItem& item) { |
// Returns the cached NGLayoutResult if available. |
- const Vector<NGLayoutInlineItem>& items = inline_box_->Items(); |
+ const Vector<NGLayoutInlineItem>& items = Node()->Items(); |
if (layout_results_.isEmpty()) |
layout_results_.resize(items.size()); |
unsigned index = std::distance(items.begin(), &item); |
@@ -241,7 +240,7 @@ bool NGInlineLayoutAlgorithm::CreateLine() { |
} |
bool NGInlineLayoutAlgorithm::CreateLineUpToLastBreakOpportunity() { |
- const Vector<NGLayoutInlineItem>& items = inline_box_->Items(); |
+ const Vector<NGLayoutInlineItem>& items = Node()->Items(); |
// Create a list of LineItemChunk from |start| and |last_break_opportunity|. |
// TODO(kojii): Consider refactoring LineItemChunk once NGLineBuilder's public |
@@ -258,7 +257,7 @@ bool NGInlineLayoutAlgorithm::CreateLineUpToLastBreakOpportunity() { |
start_offset = end_offset; |
} |
- if (inline_box_->IsBidiEnabled()) |
+ if (Node()->IsBidiEnabled()) |
BidiReorder(&line_item_chunks); |
if (!PlaceItems(line_item_chunks)) |
@@ -278,7 +277,8 @@ bool NGInlineLayoutAlgorithm::CreateLineUpToLastBreakOpportunity() { |
NGLogicalOffset origin_point = |
GetOriginPointForFloats(ConstraintSpace(), content_size_); |
- PositionPendingFloats(origin_point, constraint_space_, &container_builder_); |
+ PositionPendingFloats(origin_point, MutableConstraintSpace(), |
+ &container_builder_); |
FindNextLayoutOpportunity(); |
return true; |
} |
@@ -302,7 +302,7 @@ void NGInlineLayoutAlgorithm::BidiReorder( |
Vector<UBiDiLevel, 32> levels; |
levels.reserveInitialCapacity(line_item_chunks->size()); |
for (const auto& chunk : *line_item_chunks) |
- levels.push_back(inline_box_->Items()[chunk.index].BidiLevel()); |
+ levels.push_back(Node()->Items()[chunk.index].BidiLevel()); |
Vector<int32_t, 32> indices_in_visual_order(line_item_chunks->size()); |
NGBidiParagraph::IndicesInVisualOrder(levels, &indices_in_visual_order); |
@@ -339,7 +339,7 @@ void NGInlineLayoutAlgorithm::LayoutAndPositionFloat( |
toNGPhysicalBoxFragment(layout_result->PhysicalFragment().get())); |
RefPtr<NGFloatingObject> floating_object = NGFloatingObject::Create( |
- float_space.get(), constraint_space_, node->Style(), NGBoxStrut(), |
+ float_space.get(), MutableConstraintSpace(), node->Style(), NGBoxStrut(), |
current_opportunity_.size, layout_result->PhysicalFragment().get()); |
bool float_does_not_fit = end_position + float_fragment.InlineSize() > |
@@ -353,8 +353,8 @@ void NGInlineLayoutAlgorithm::LayoutAndPositionFloat( |
NGLogicalOffset origin_point = |
GetOriginPointForFloats(ConstraintSpace(), content_size_); |
NGLogicalOffset offset = |
- PositionFloat(origin_point, constraint_space_->BfcOffset(), |
- floating_object.get(), constraint_space_); |
+ PositionFloat(origin_point, ConstraintSpace().BfcOffset(), |
+ floating_object.get(), MutableConstraintSpace()); |
container_builder_.AddFloatingObject(floating_object, offset); |
FindNextLayoutOpportunity(); |
} |
@@ -362,14 +362,14 @@ void NGInlineLayoutAlgorithm::LayoutAndPositionFloat( |
bool NGInlineLayoutAlgorithm::PlaceItems( |
const Vector<LineItemChunk, 32>& line_item_chunks) { |
- const Vector<NGLayoutInlineItem>& items = inline_box_->Items(); |
+ const Vector<NGLayoutInlineItem>& items = Node()->Items(); |
- NGLineBoxFragmentBuilder line_box(inline_box_); |
- NGTextFragmentBuilder text_builder(inline_box_); |
+ NGLineBoxFragmentBuilder line_box(Node()); |
+ NGTextFragmentBuilder text_builder(Node()); |
// Accumulate a "strut"; a zero-width inline box with the element's font and |
// line height properties. https://drafts.csswg.org/css2/visudet.html#strut |
- NGLineHeightMetrics block_metrics(inline_box_->Style(), baseline_type_); |
+ NGLineHeightMetrics block_metrics(Style(), baseline_type_); |
line_box.UniteMetrics(block_metrics); |
// Use the block style to compute the estimated baseline position because the |
@@ -457,10 +457,9 @@ bool NGInlineLayoutAlgorithm::PlaceItems( |
// If there are more content to consume, create an unfinished break token. |
if (last_break_opportunity_index_ != items.size() - 1 || |
- last_break_opportunity_offset_ != inline_box_->Text().length()) { |
- line_box.SetBreakToken( |
- NGInlineBreakToken::create(inline_box_, last_break_opportunity_index_, |
- last_break_opportunity_offset_)); |
+ last_break_opportunity_offset_ != Node()->Text().length()) { |
+ line_box.SetBreakToken(NGInlineBreakToken::create( |
+ Node(), last_break_opportunity_index_, last_break_opportunity_offset_)); |
} |
line_box.SetInlineSize(inline_size); |
@@ -524,9 +523,9 @@ LayoutUnit NGInlineLayoutAlgorithm::PlaceAtomicInline( |
} |
void NGInlineLayoutAlgorithm::FindNextLayoutOpportunity() { |
- NGLogicalOffset iter_offset = constraint_space_->BfcOffset(); |
+ NGLogicalOffset iter_offset = ConstraintSpace().BfcOffset(); |
iter_offset.block_offset += content_size_; |
- auto* iter = constraint_space_->LayoutOpportunityIterator(iter_offset); |
+ auto* iter = MutableConstraintSpace()->LayoutOpportunityIterator(iter_offset); |
NGLayoutOpportunity opportunity = iter->Next(); |
if (!opportunity.IsEmpty()) |
current_opportunity_ = opportunity; |
@@ -535,8 +534,8 @@ void NGInlineLayoutAlgorithm::FindNextLayoutOpportunity() { |
RefPtr<NGLayoutResult> NGInlineLayoutAlgorithm::Layout() { |
// TODO(koji): The relationship of NGInlineLayoutAlgorithm and NGLineBreaker |
// should be inverted. |
- if (!inline_box_->Text().isEmpty()) |
- NGLineBreaker().BreakLines(this, inline_box_->Text(), start_offset_); |
+ if (!Node()->Text().isEmpty()) |
+ NGLineBreaker().BreakLines(this, Node()->Text(), start_offset_); |
// TODO(kojii): Check if the line box width should be content or available. |
container_builder_.SetInlineSize(max_inline_size_) |
@@ -550,14 +549,14 @@ RefPtr<NGLayoutResult> NGInlineLayoutAlgorithm::Layout() { |
MinMaxContentSize NGInlineLayoutAlgorithm::ComputeMinMaxContentSizeByLayout() { |
DCHECK(ConstraintSpace().AvailableSize().inline_size == LayoutUnit() && |
ConstraintSpace().AvailableSize().block_size == NGSizeIndefinite); |
- if (!inline_box_->Text().isEmpty()) |
- NGLineBreaker().BreakLines(this, inline_box_->Text(), start_offset_); |
+ if (!Node()->Text().isEmpty()) |
+ NGLineBreaker().BreakLines(this, Node()->Text(), start_offset_); |
MinMaxContentSize sizes; |
sizes.min_content = MaxInlineSize(); |
// max-content is the width without any line wrapping. |
// TODO(kojii): Implement hard breaks (<br> etc.) to break. |
- for (const auto& item : inline_box_->Items()) |
+ for (const auto& item : Node()->Items()) |
sizes.max_content += InlineSize(item); |
return sizes; |
@@ -565,12 +564,12 @@ MinMaxContentSize NGInlineLayoutAlgorithm::ComputeMinMaxContentSizeByLayout() { |
void NGInlineLayoutAlgorithm::CopyFragmentDataToLayoutBlockFlow( |
NGLayoutResult* layout_result) { |
- LayoutBlockFlow* block = inline_box_->GetLayoutBlockFlow(); |
+ LayoutBlockFlow* block = Node()->GetLayoutBlockFlow(); |
block->deleteLineBoxTree(); |
- Vector<NGLayoutInlineItem>& items = inline_box_->Items(); |
+ Vector<NGLayoutInlineItem>& items = Node()->Items(); |
Vector<unsigned, 32> text_offsets(items.size()); |
- inline_box_->GetLayoutTextOffsets(&text_offsets); |
+ Node()->GetLayoutTextOffsets(&text_offsets); |
Vector<const NGPhysicalFragment*, 32> fragments_for_bidi_runs; |
fragments_for_bidi_runs.reserveInitialCapacity(items.size()); |