OLD | NEW |
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_node.h" | 7 #include "core/layout/ng/ng_block_node.h" |
| 8 #include "core/layout/ng/ng_break_token.h" |
8 #include "core/layout/ng/ng_fragment.h" | 9 #include "core/layout/ng/ng_fragment.h" |
9 #include "core/layout/ng/ng_physical_box_fragment.h" | 10 #include "core/layout/ng/ng_physical_box_fragment.h" |
10 #include "core/layout/ng/ng_physical_text_fragment.h" | 11 #include "core/layout/ng/ng_physical_text_fragment.h" |
11 | 12 |
12 namespace blink { | 13 namespace blink { |
13 | 14 |
14 NGFragmentBuilder::NGFragmentBuilder(NGPhysicalFragment::NGFragmentType type) | 15 NGFragmentBuilder::NGFragmentBuilder(NGPhysicalFragment::NGFragmentType type) |
15 : type_(type), | 16 : type_(type), |
16 writing_mode_(kHorizontalTopBottom), | 17 writing_mode_(kHorizontalTopBottom), |
17 direction_(TextDirection::kLtr) {} | 18 direction_(TextDirection::kLtr) {} |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 margin_strut_.margin_block_end = from.margin_block_end; | 130 margin_strut_.margin_block_end = from.margin_block_end; |
130 margin_strut_.negative_margin_block_end = from.negative_margin_block_end; | 131 margin_strut_.negative_margin_block_end = from.negative_margin_block_end; |
131 return *this; | 132 return *this; |
132 } | 133 } |
133 | 134 |
134 NGPhysicalBoxFragment* NGFragmentBuilder::ToBoxFragment() { | 135 NGPhysicalBoxFragment* NGFragmentBuilder::ToBoxFragment() { |
135 // TODO(layout-ng): Support text fragments | 136 // TODO(layout-ng): Support text fragments |
136 DCHECK_EQ(type_, NGPhysicalFragment::kFragmentBox); | 137 DCHECK_EQ(type_, NGPhysicalFragment::kFragmentBox); |
137 DCHECK_EQ(offsets_.size(), children_.size()); | 138 DCHECK_EQ(offsets_.size(), children_.size()); |
138 | 139 |
| 140 auto* break_token = break_token_.get(); |
| 141 break_token_ = nullptr; |
| 142 |
139 NGPhysicalSize physical_size = size_.ConvertToPhysical(writing_mode_); | 143 NGPhysicalSize physical_size = size_.ConvertToPhysical(writing_mode_); |
140 HeapVector<Member<const NGPhysicalFragment>> children; | 144 HeapVector<Member<const NGPhysicalFragment>> children; |
141 children.reserveCapacity(children_.size()); | 145 children.reserveCapacity(children_.size()); |
142 | 146 |
143 for (size_t i = 0; i < children_.size(); ++i) { | 147 for (size_t i = 0; i < children_.size(); ++i) { |
144 NGPhysicalFragment* child = children_[i].get(); | 148 NGPhysicalFragment* child = children_[i].get(); |
145 child->SetOffset(offsets_[i].ConvertToPhysical( | 149 child->SetOffset(offsets_[i].ConvertToPhysical( |
146 writing_mode_, direction_, physical_size, child->Size())); | 150 writing_mode_, direction_, physical_size, child->Size())); |
147 children.push_back(child); | 151 children.push_back(child); |
148 } | 152 } |
149 return new NGPhysicalBoxFragment( | 153 return new NGPhysicalBoxFragment( |
150 physical_size, overflow_.ConvertToPhysical(writing_mode_), children, | 154 physical_size, overflow_.ConvertToPhysical(writing_mode_), children, |
151 out_of_flow_descendants_, out_of_flow_positions_, margin_strut_); | 155 out_of_flow_descendants_, out_of_flow_positions_, margin_strut_, |
| 156 break_token); |
152 } | 157 } |
153 | 158 |
154 NGPhysicalTextFragment* NGFragmentBuilder::ToTextFragment(NGInlineNode* node, | 159 NGPhysicalTextFragment* NGFragmentBuilder::ToTextFragment(NGInlineNode* node, |
155 unsigned start_index, | 160 unsigned start_index, |
156 unsigned end_index) { | 161 unsigned end_index) { |
157 DCHECK_EQ(type_, NGPhysicalFragment::kFragmentText); | 162 DCHECK_EQ(type_, NGPhysicalFragment::kFragmentText); |
158 DCHECK(children_.isEmpty()); | 163 DCHECK(children_.isEmpty()); |
159 DCHECK(offsets_.isEmpty()); | 164 DCHECK(offsets_.isEmpty()); |
160 return new NGPhysicalTextFragment( | 165 return new NGPhysicalTextFragment( |
161 node, start_index, end_index, size_.ConvertToPhysical(writing_mode_), | 166 node, start_index, end_index, size_.ConvertToPhysical(writing_mode_), |
162 overflow_.ConvertToPhysical(writing_mode_), out_of_flow_descendants_, | 167 overflow_.ConvertToPhysical(writing_mode_), out_of_flow_descendants_, |
163 out_of_flow_positions_); | 168 out_of_flow_positions_); |
164 } | 169 } |
165 | 170 |
166 DEFINE_TRACE(NGFragmentBuilder) { | 171 DEFINE_TRACE(NGFragmentBuilder) { |
167 visitor->trace(children_); | 172 visitor->trace(children_); |
168 visitor->trace(out_of_flow_descendant_candidates_); | 173 visitor->trace(out_of_flow_descendant_candidates_); |
169 visitor->trace(out_of_flow_descendants_); | 174 visitor->trace(out_of_flow_descendants_); |
| 175 visitor->trace(break_token_); |
170 } | 176 } |
171 | 177 |
172 } // namespace blink | 178 } // namespace blink |
OLD | NEW |