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

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

Issue 2722763002: [LayoutNG] Switch NGBreakToken to being RefCounted. (Closed)
Patch Set: remove comments. Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/layout/ng/ng_fragment_builder.h" 5 #include "core/layout/ng/ng_fragment_builder.h"
6 6
7 #include "core/layout/ng/ng_block_break_token.h" 7 #include "core/layout/ng/ng_block_break_token.h"
8 #include "core/layout/ng/ng_block_node.h" 8 #include "core/layout/ng/ng_block_node.h"
9 #include "core/layout/ng/ng_break_token.h" 9 #include "core/layout/ng/ng_break_token.h"
10 #include "core/layout/ng/ng_fragment.h" 10 #include "core/layout/ng/ng_fragment.h"
11 #include "core/layout/ng/ng_physical_box_fragment.h" 11 #include "core/layout/ng/ng_physical_box_fragment.h"
12 #include "core/layout/ng/ng_physical_text_fragment.h" 12 #include "core/layout/ng/ng_physical_text_fragment.h"
13 #include "platform/heap/Handle.h" 13 #include "platform/heap/Handle.h"
14 14
15 namespace blink { 15 namespace blink {
16 16
17 // TODO(ikilpatrick): Make writing mode and direction be in the constructor. 17 // TODO(ikilpatrick): Make writing mode and direction be in the constructor.
18 NGFragmentBuilder::NGFragmentBuilder(NGPhysicalFragment::NGFragmentType type, 18 NGFragmentBuilder::NGFragmentBuilder(NGPhysicalFragment::NGFragmentType type,
19 NGLayoutInputNode* node) 19 NGLayoutInputNode* node)
20 : type_(type), 20 : type_(type),
21 writing_mode_(kHorizontalTopBottom), 21 writing_mode_(kHorizontalTopBottom),
22 direction_(TextDirection::kLtr), 22 direction_(TextDirection::kLtr),
23 node_(node), 23 node_(node),
24 did_break_(false) { 24 did_break_(false) {
25 child_break_tokens_ = new HeapVector<Member<NGBreakToken>>();
26 } 25 }
27 26
28 NGFragmentBuilder& NGFragmentBuilder::SetWritingMode( 27 NGFragmentBuilder& NGFragmentBuilder::SetWritingMode(
29 NGWritingMode writing_mode) { 28 NGWritingMode writing_mode) {
30 writing_mode_ = writing_mode; 29 writing_mode_ = writing_mode;
31 return *this; 30 return *this;
32 } 31 }
33 32
34 NGFragmentBuilder& NGFragmentBuilder::SetDirection(TextDirection direction) { 33 NGFragmentBuilder& NGFragmentBuilder::SetDirection(TextDirection direction) {
35 direction_ = direction; 34 direction_ = direction;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 76
78 NGFragmentBuilder& NGFragmentBuilder::AddChild( 77 NGFragmentBuilder& NGFragmentBuilder::AddChild(
79 RefPtr<NGPhysicalFragment> child, 78 RefPtr<NGPhysicalFragment> child,
80 const NGLogicalOffset& child_offset) { 79 const NGLogicalOffset& child_offset) {
81 DCHECK_EQ(type_, NGPhysicalFragment::kFragmentBox) 80 DCHECK_EQ(type_, NGPhysicalFragment::kFragmentBox)
82 << "Only box fragments can have children"; 81 << "Only box fragments can have children";
83 82
84 // Update if we have fragmented in this flow. 83 // Update if we have fragmented in this flow.
85 did_break_ |= child->IsBox() && !child->BreakToken()->IsFinished(); 84 did_break_ |= child->IsBox() && !child->BreakToken()->IsFinished();
86 85
87 child_break_tokens_->push_back(child->BreakToken()); 86 child_break_tokens_.push_back(child->BreakToken());
88 children_.push_back(std::move(child)); 87 children_.push_back(std::move(child));
89 offsets_.push_back(child_offset); 88 offsets_.push_back(child_offset);
90 89
91 return *this; 90 return *this;
92 } 91 }
93 92
94 NGFragmentBuilder& NGFragmentBuilder::AddFloatingObject( 93 NGFragmentBuilder& NGFragmentBuilder::AddFloatingObject(
95 NGFloatingObject* floating_object, 94 NGFloatingObject* floating_object,
96 const NGLogicalOffset& floating_object_offset) { 95 const NGLogicalOffset& floating_object_offset) {
97 positioned_floats_.push_back(floating_object); 96 positioned_floats_.push_back(floating_object);
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 169
171 for (size_t i = 0; i < children_.size(); ++i) { 170 for (size_t i = 0; i < children_.size(); ++i) {
172 NGPhysicalFragment* child = children_[i].get(); 171 NGPhysicalFragment* child = children_[i].get();
173 child->SetOffset(offsets_[i].ConvertToPhysical( 172 child->SetOffset(offsets_[i].ConvertToPhysical(
174 writing_mode_, direction_, physical_size, child->Size())); 173 writing_mode_, direction_, physical_size, child->Size()));
175 } 174 }
176 175
177 Vector<Persistent<NGFloatingObject>> positioned_floats; 176 Vector<Persistent<NGFloatingObject>> positioned_floats;
178 positioned_floats.reserveCapacity(positioned_floats_.size()); 177 positioned_floats.reserveCapacity(positioned_floats_.size());
179 178
180 Persistent<NGBreakToken> break_token; 179 RefPtr<NGBreakToken> break_token;
181 if (did_break_) { 180 if (did_break_) {
182 break_token = 181 break_token = NGBlockBreakToken::create(
183 new NGBlockBreakToken(toNGBlockNode(node_.get()), used_block_size_, 182 toNGBlockNode(node_.get()), used_block_size_, child_break_tokens_);
184 *child_break_tokens_.get());
185 } else { 183 } else {
186 break_token = new NGBlockBreakToken(node_.get()); 184 break_token = NGBlockBreakToken::create(node_.get());
187 } 185 }
188 186
189 for (size_t i = 0; i < positioned_floats_.size(); ++i) { 187 for (size_t i = 0; i < positioned_floats_.size(); ++i) {
190 Persistent<NGFloatingObject>& floating_object = positioned_floats_[i]; 188 Persistent<NGFloatingObject>& floating_object = positioned_floats_[i];
191 NGPhysicalFragment* floating_fragment = floating_object->fragment.get(); 189 NGPhysicalFragment* floating_fragment = floating_object->fragment.get();
192 floating_fragment->SetOffset(floating_object_offsets_[i].ConvertToPhysical( 190 floating_fragment->SetOffset(floating_object_offsets_[i].ConvertToPhysical(
193 writing_mode_, direction_, physical_size, floating_fragment->Size())); 191 writing_mode_, direction_, physical_size, floating_fragment->Size()));
194 positioned_floats.push_back(floating_object); 192 positioned_floats.push_back(floating_object);
195 } 193 }
196 194
197 RefPtr<NGPhysicalBoxFragment> fragment = adoptRef(new NGPhysicalBoxFragment( 195 RefPtr<NGPhysicalBoxFragment> fragment = adoptRef(new NGPhysicalBoxFragment(
198 node_->GetLayoutObject(), physical_size, 196 node_->GetLayoutObject(), physical_size,
199 overflow_.ConvertToPhysical(writing_mode_), children_, positioned_floats_, 197 overflow_.ConvertToPhysical(writing_mode_), children_, positioned_floats_,
200 bfc_offset_, end_margin_strut_, break_token)); 198 bfc_offset_, end_margin_strut_, std::move(break_token)));
201 199
202 return adoptRef( 200 return adoptRef(
203 new NGLayoutResult(std::move(fragment), out_of_flow_descendants_, 201 new NGLayoutResult(std::move(fragment), out_of_flow_descendants_,
204 out_of_flow_positions_, unpositioned_floats_)); 202 out_of_flow_positions_, unpositioned_floats_));
205 } 203 }
206 204
207 RefPtr<NGPhysicalTextFragment> NGFragmentBuilder::ToTextFragment( 205 RefPtr<NGPhysicalTextFragment> NGFragmentBuilder::ToTextFragment(
208 unsigned index, 206 unsigned index,
209 unsigned start_offset, 207 unsigned start_offset,
210 unsigned end_offset) { 208 unsigned end_offset) {
211 DCHECK_EQ(type_, NGPhysicalFragment::kFragmentText); 209 DCHECK_EQ(type_, NGPhysicalFragment::kFragmentText);
212 DCHECK(children_.isEmpty()); 210 DCHECK(children_.isEmpty());
213 DCHECK(offsets_.isEmpty()); 211 DCHECK(offsets_.isEmpty());
214 212
215 Vector<Persistent<NGFloatingObject>> empty_unpositioned_floats; 213 Vector<Persistent<NGFloatingObject>> empty_unpositioned_floats;
216 Vector<Persistent<NGFloatingObject>> empty_positioned_floats; 214 Vector<Persistent<NGFloatingObject>> empty_positioned_floats;
217 215
218 return adoptRef(new NGPhysicalTextFragment( 216 return adoptRef(new NGPhysicalTextFragment(
219 node_->GetLayoutObject(), toNGInlineNode(node_), index, start_offset, 217 node_->GetLayoutObject(), toNGInlineNode(node_), index, start_offset,
220 end_offset, size_.ConvertToPhysical(writing_mode_), 218 end_offset, size_.ConvertToPhysical(writing_mode_),
221 overflow_.ConvertToPhysical(writing_mode_))); 219 overflow_.ConvertToPhysical(writing_mode_)));
222 } 220 }
223 221
224 } // namespace blink 222 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698