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

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

Issue 2898413002: [LayoutNG] Add box fragments to line boxes when needed (Closed)
Patch Set: x64 build fix Created 3 years, 7 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/ng_fragment_builder.cc
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.cc b/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.cc
index b8739da255de2b2cd3743f47ebb26e120611dd16..baed4d6e70b4aed0a855943f61c291982db1628c 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.cc
@@ -22,8 +22,16 @@ NGFragmentBuilder::NGFragmentBuilder(NGPhysicalFragment::NGFragmentType type,
writing_mode_(kHorizontalTopBottom),
direction_(TextDirection::kLtr),
node_(node),
- did_break_(false) {
-}
+ layout_object_(node->GetLayoutObject()),
+ did_break_(false) {}
+
+NGFragmentBuilder::NGFragmentBuilder(NGPhysicalFragment::NGFragmentType type,
+ LayoutObject* layout_object)
+ : type_(type),
+ writing_mode_(kHorizontalTopBottom),
+ direction_(TextDirection::kLtr),
+ layout_object_(layout_object),
+ did_break_(false) {}
NGFragmentBuilder& NGFragmentBuilder::SetWritingMode(
NGWritingMode writing_mode) {
@@ -85,8 +93,10 @@ NGFragmentBuilder& NGFragmentBuilder::AddChild(
switch (child->Type()) {
case NGPhysicalBoxFragment::kFragmentBox:
// Update if we have fragmented in this flow.
- did_break_ |= !child->BreakToken()->IsFinished();
- child_break_tokens_.push_back(child->BreakToken());
+ if (child->BreakToken()) {
+ did_break_ |= !child->BreakToken()->IsFinished();
+ child_break_tokens_.push_back(child->BreakToken());
+ }
break;
case NGPhysicalBoxFragment::kFragmentLineBox:
// NGInlineNode produces multiple line boxes in an anonymous box. Only
@@ -193,16 +203,18 @@ RefPtr<NGLayoutResult> NGFragmentBuilder::ToBoxFragment() {
}
RefPtr<NGBreakToken> break_token;
- if (last_inline_break_token_) {
- DCHECK(!last_inline_break_token_->IsFinished());
- child_break_tokens_.push_back(std::move(last_inline_break_token_));
- did_break_ = true;
- }
- if (did_break_) {
- break_token = NGBlockBreakToken::Create(node_.Get(), used_block_size_,
- child_break_tokens_);
- } else {
- break_token = NGBlockBreakToken::Create(node_.Get());
+ if (node_) {
+ if (last_inline_break_token_) {
+ DCHECK(!last_inline_break_token_->IsFinished());
+ child_break_tokens_.push_back(std::move(last_inline_break_token_));
+ did_break_ = true;
+ }
+ if (did_break_) {
+ break_token = NGBlockBreakToken::Create(node_.Get(), used_block_size_,
+ child_break_tokens_);
+ } else {
+ break_token = NGBlockBreakToken::Create(node_.Get());
+ }
}
for (auto& positioned_float : positioned_floats_) {
@@ -214,9 +226,9 @@ RefPtr<NGLayoutResult> NGFragmentBuilder::ToBoxFragment() {
}
RefPtr<NGPhysicalBoxFragment> fragment = AdoptRef(new NGPhysicalBoxFragment(
- node_->GetLayoutObject(), physical_size,
- overflow_.ConvertToPhysical(writing_mode_), children_, positioned_floats_,
- bfc_offset_, end_margin_strut_, std::move(break_token)));
+ layout_object_, physical_size, overflow_.ConvertToPhysical(writing_mode_),
+ children_, positioned_floats_, bfc_offset_, end_margin_strut_,
+ std::move(break_token)));
return AdoptRef(
new NGLayoutResult(std::move(fragment), out_of_flow_descendants_,

Powered by Google App Engine
This is Rietveld 408576698