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

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

Issue 2786923004: [LayoutNG] WIP on storing layout output in the legacy tree for multicol. (Closed)
Patch Set: Move stuff to UpdateLegacyMultiColumnFlowThread() Created 3 years, 8 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
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_block_node.h" 5 #include "core/layout/ng/ng_block_node.h"
6 6
7 #include "core/layout/LayoutBlockFlow.h" 7 #include "core/layout/LayoutBlockFlow.h"
8 #include "core/layout/LayoutMultiColumnFlowThread.h"
9 #include "core/layout/LayoutMultiColumnSet.h"
8 #include "core/layout/api/LineLayoutAPIShim.h" 10 #include "core/layout/api/LineLayoutAPIShim.h"
9 #include "core/layout/line/InlineIterator.h" 11 #include "core/layout/line/InlineIterator.h"
10 #include "core/layout/ng/layout_ng_block_flow.h" 12 #include "core/layout/ng/layout_ng_block_flow.h"
11 #include "core/layout/ng/ng_block_break_token.h" 13 #include "core/layout/ng/ng_block_break_token.h"
12 #include "core/layout/ng/ng_block_layout_algorithm.h" 14 #include "core/layout/ng/ng_block_layout_algorithm.h"
13 #include "core/layout/ng/ng_box_fragment.h" 15 #include "core/layout/ng/ng_box_fragment.h"
14 #include "core/layout/ng/ng_column_layout_algorithm.h" 16 #include "core/layout/ng/ng_column_layout_algorithm.h"
15 #include "core/layout/ng/ng_constraint_space.h" 17 #include "core/layout/ng/ng_constraint_space.h"
16 #include "core/layout/ng/ng_constraint_space_builder.h" 18 #include "core/layout/ng/ng_constraint_space_builder.h"
17 #include "core/layout/ng/ng_fragment_builder.h" 19 #include "core/layout/ng/ng_fragment_builder.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 FloatingObject* floating_object = 78 FloatingObject* floating_object =
77 toLayoutBlockFlow(parent)->insertFloatingObject(*layout_box); 79 toLayoutBlockFlow(parent)->insertFloatingObject(*layout_box);
78 floating_object->setIsInPlacedTree(false); 80 floating_object->setIsInPlacedTree(false);
79 floating_object->setX(ng_floating_object->left_offset); 81 floating_object->setX(ng_floating_object->left_offset);
80 floating_object->setY(box_fragment->TopOffset()); 82 floating_object->setY(box_fragment->TopOffset());
81 floating_object->setIsPlaced(true); 83 floating_object->setIsPlaced(true);
82 floating_object->setIsInPlacedTree(true); 84 floating_object->setIsInPlacedTree(true);
83 } 85 }
84 } 86 }
85 87
88 void UpdateLegacyMultiColumnFlowThread(LayoutBox* layout_box,
89 const NGPhysicalBoxFragment* fragment) {
90 LayoutBlockFlow* multicol = toLayoutBlockFlow(layout_box);
91 LayoutMultiColumnFlowThread* flow_thread = multicol->multiColumnFlowThread();
92 if (!flow_thread)
93 return;
94 if (LayoutMultiColumnSet* column_set = flow_thread->firstMultiColumnSet()) {
95 column_set->setWidth(fragment->Width());
96 column_set->setHeight(fragment->Height());
97
98 // TODO(mstensho): This value has next to nothing to do with the flow thread
99 // portion size, but at least it's usually better than zero.
100 column_set->endFlow(fragment->Height());
101
102 column_set->clearNeedsLayout();
103 }
104 // TODO(mstensho): Fix the relatively nonsensical values here (the content box
105 // size of the multicol container has very little to do with the price of
106 // eggs).
107 flow_thread->setWidth(fragment->Width());
108 flow_thread->setHeight(fragment->Height());
109
110 flow_thread->validateColumnSets();
111 flow_thread->clearNeedsLayout();
112 }
113
86 } // namespace 114 } // namespace
87 115
88 NGBlockNode::NGBlockNode(LayoutObject* layout_object) 116 NGBlockNode::NGBlockNode(LayoutObject* layout_object)
89 : NGLayoutInputNode(NGLayoutInputNodeType::kLegacyBlock), 117 : NGLayoutInputNode(NGLayoutInputNodeType::kLegacyBlock),
90 layout_box_(toLayoutBox(layout_object)) { 118 layout_box_(toLayoutBox(layout_object)) {
91 DCHECK(layout_box_); 119 DCHECK(layout_box_);
92 } 120 }
93 121
94 // Need an explicit destructor in the .cc file, or the MSWIN compiler will 122 // Need an explicit destructor in the .cc file, or the MSWIN compiler will
95 // produce an error when attempting to generate a default one, if the .h file is 123 // produce an error when attempting to generate a default one, if the .h file is
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 259
232 return false; 260 return false;
233 } 261 }
234 262
235 void NGBlockNode::CopyFragmentDataToLayoutBox( 263 void NGBlockNode::CopyFragmentDataToLayoutBox(
236 const NGConstraintSpace& constraint_space, 264 const NGConstraintSpace& constraint_space,
237 NGLayoutResult* layout_result) { 265 NGLayoutResult* layout_result) {
238 NGPhysicalBoxFragment* fragment = 266 NGPhysicalBoxFragment* fragment =
239 toNGPhysicalBoxFragment(layout_result->PhysicalFragment().get()); 267 toNGPhysicalBoxFragment(layout_result->PhysicalFragment().get());
240 268
269 if (layout_box_->style()->specifiesColumns())
270 UpdateLegacyMultiColumnFlowThread(layout_box_, fragment);
241 layout_box_->setWidth(fragment->Width()); 271 layout_box_->setWidth(fragment->Width());
242 layout_box_->setHeight(fragment->Height()); 272 layout_box_->setHeight(fragment->Height());
243 NGBoxStrut border_and_padding = ComputeBorders(constraint_space, Style()) + 273 NGBoxStrut border_and_padding = ComputeBorders(constraint_space, Style()) +
244 ComputePadding(constraint_space, Style()); 274 ComputePadding(constraint_space, Style());
245 LayoutUnit intrinsic_logical_height = 275 LayoutUnit intrinsic_logical_height =
246 layout_box_->style()->isHorizontalWritingMode() 276 layout_box_->style()->isHorizontalWritingMode()
247 ? fragment->HeightOverflow() 277 ? fragment->HeightOverflow()
248 : fragment->WidthOverflow(); 278 : fragment->WidthOverflow();
249 intrinsic_logical_height -= border_and_padding.BlockSum(); 279 intrinsic_logical_height -= border_and_padding.BlockSum();
250 layout_box_->setIntrinsicContentLogicalHeight(intrinsic_logical_height); 280 layout_box_->setIntrinsicContentLogicalHeight(intrinsic_logical_height);
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 369
340 // Save static position for legacy AbsPos layout. 370 // Save static position for legacy AbsPos layout.
341 void NGBlockNode::SaveStaticOffsetForLegacy(const NGLogicalOffset& offset) { 371 void NGBlockNode::SaveStaticOffsetForLegacy(const NGLogicalOffset& offset) {
342 DCHECK(layout_box_->isOutOfFlowPositioned()); 372 DCHECK(layout_box_->isOutOfFlowPositioned());
343 DCHECK(layout_box_->layer()); 373 DCHECK(layout_box_->layer());
344 layout_box_->layer()->setStaticBlockPosition(offset.block_offset); 374 layout_box_->layer()->setStaticBlockPosition(offset.block_offset);
345 layout_box_->layer()->setStaticInlinePosition(offset.inline_offset); 375 layout_box_->layer()->setStaticInlinePosition(offset.inline_offset);
346 } 376 }
347 377
348 } // namespace blink 378 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698