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

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

Issue 2723023003: Revert of [LayoutNG] Move remaining ng_units structs to their own files (Closed)
Patch Set: 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_block_layout_algorithm.h" 5 #include "core/layout/ng/ng_block_layout_algorithm.h"
6 6
7 #include "core/layout/ng/ng_absolute_utils.h" 7 #include "core/layout/ng/ng_absolute_utils.h"
8 #include "core/layout/ng/ng_block_break_token.h" 8 #include "core/layout/ng/ng_block_break_token.h"
9 #include "core/layout/ng/ng_block_child_iterator.h" 9 #include "core/layout/ng/ng_block_child_iterator.h"
10 #include "core/layout/ng/ng_box_fragment.h" 10 #include "core/layout/ng/ng_box_fragment.h"
11 #include "core/layout/ng/ng_constraint_space.h" 11 #include "core/layout/ng/ng_constraint_space.h"
12 #include "core/layout/ng/ng_constraint_space_builder.h" 12 #include "core/layout/ng/ng_constraint_space_builder.h"
13 #include "core/layout/ng/ng_fragment.h" 13 #include "core/layout/ng/ng_fragment.h"
14 #include "core/layout/ng/ng_fragment_builder.h" 14 #include "core/layout/ng/ng_fragment_builder.h"
15 #include "core/layout/ng/ng_inline_node.h" 15 #include "core/layout/ng/ng_inline_node.h"
16 #include "core/layout/ng/ng_layout_opportunity_iterator.h" 16 #include "core/layout/ng/ng_layout_opportunity_iterator.h"
17 #include "core/layout/ng/ng_length_utils.h" 17 #include "core/layout/ng/ng_length_utils.h"
18 #include "core/layout/ng/ng_line_builder.h" 18 #include "core/layout/ng/ng_line_builder.h"
19 #include "core/layout/ng/ng_out_of_flow_layout_part.h" 19 #include "core/layout/ng/ng_out_of_flow_layout_part.h"
20 #include "core/layout/ng/ng_units.h"
20 #include "core/style/ComputedStyle.h" 21 #include "core/style/ComputedStyle.h"
21 #include "platform/LengthFunctions.h" 22 #include "platform/LengthFunctions.h"
22 #include "wtf/Optional.h" 23 #include "wtf/Optional.h"
23 24
24 namespace blink { 25 namespace blink {
25 namespace { 26 namespace {
26 27
27 // Whether child's constraint space should shrink to its intrinsic width. 28 // Whether child's constraint space should shrink to its intrinsic width.
28 // This is needed for buttons, select, input, floats and orthogonal children. 29 // This is needed for buttons, select, input, floats and orthogonal children.
29 // See LayoutBox::sizesLogicalWidthToFitContent for the rationale behind this. 30 // See LayoutBox::sizesLogicalWidthToFitContent for the rationale behind this.
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 NGBlockLayoutAlgorithm::NGBlockLayoutAlgorithm( 306 NGBlockLayoutAlgorithm::NGBlockLayoutAlgorithm(
306 NGBlockNode* node, 307 NGBlockNode* node,
307 NGConstraintSpace* constraint_space, 308 NGConstraintSpace* constraint_space,
308 NGBlockBreakToken* break_token) 309 NGBlockBreakToken* break_token)
309 : node_(node), 310 : node_(node),
310 constraint_space_(constraint_space), 311 constraint_space_(constraint_space),
311 break_token_(break_token), 312 break_token_(break_token),
312 builder_(WTF::wrapUnique( 313 builder_(WTF::wrapUnique(
313 new NGFragmentBuilder(NGPhysicalFragment::kFragmentBox, node))) {} 314 new NGFragmentBuilder(NGPhysicalFragment::kFragmentBox, node))) {}
314 315
315 Optional<MinMaxContentSize> NGBlockLayoutAlgorithm::ComputeMinMaxContentSize() 316 Optional<MinAndMaxContentSizes>
316 const { 317 NGBlockLayoutAlgorithm::ComputeMinAndMaxContentSizes() const {
317 MinMaxContentSize sizes; 318 MinAndMaxContentSizes sizes;
318 319
319 // Size-contained elements don't consider their contents for intrinsic sizing. 320 // Size-contained elements don't consider their contents for intrinsic sizing.
320 if (Style().containsSize()) 321 if (Style().containsSize())
321 return sizes; 322 return sizes;
322 323
323 // TODO: handle floats & orthogonal children. 324 // TODO: handle floats & orthogonal children.
324 for (NGLayoutInputNode* node = node_->FirstChild(); node; 325 for (NGLayoutInputNode* node = node_->FirstChild(); node;
325 node = node->NextSibling()) { 326 node = node->NextSibling()) {
326 MinMaxContentSize child_sizes; 327 MinAndMaxContentSizes child_sizes;
327 if (node->Type() == NGLayoutInputNode::kLegacyInline) { 328 if (node->Type() == NGLayoutInputNode::kLegacyInline) {
328 // From |NGBlockLayoutAlgorithm| perspective, we can handle |NGInlineNode| 329 // From |NGBlockLayoutAlgorithm| perspective, we can handle |NGInlineNode|
329 // almost the same as |NGBlockNode|, because an |NGInlineNode| includes 330 // almost the same as |NGBlockNode|, because an |NGInlineNode| includes
330 // all inline nodes following |node| and their descendants, and produces 331 // all inline nodes following |node| and their descendants, and produces
331 // an anonymous box that contains all line boxes. 332 // an anonymous box that contains all line boxes.
332 // |NextSibling| returns the next block sibling, or nullptr, skipping all 333 // |NextSibling| returns the next block sibling, or nullptr, skipping all
333 // following inline siblings and descendants. 334 // following inline siblings and descendants.
334 child_sizes = toNGInlineNode(node)->ComputeMinMaxContentSize(); 335 child_sizes = toNGInlineNode(node)->ComputeMinAndMaxContentSizes();
335 } else { 336 } else {
336 Optional<MinMaxContentSize> child_minmax; 337 Optional<MinAndMaxContentSizes> child_minmax;
337 NGBlockNode* block_child = toNGBlockNode(node); 338 NGBlockNode* block_child = toNGBlockNode(node);
338 if (NeedMinMaxContentSizeForContentContribution(block_child->Style())) { 339 if (NeedMinAndMaxContentSizesForContentContribution(
339 child_minmax = block_child->ComputeMinMaxContentSize(); 340 block_child->Style())) {
341 child_minmax = block_child->ComputeMinAndMaxContentSizes();
340 } 342 }
341 343
342 child_sizes = ComputeMinAndMaxContentContribution(block_child->Style(), 344 child_sizes = ComputeMinAndMaxContentContribution(block_child->Style(),
343 child_minmax); 345 child_minmax);
344 } 346 }
345 347
346 sizes.min_content = std::max(sizes.min_content, child_sizes.min_content); 348 sizes.min_content = std::max(sizes.min_content, child_sizes.min_content);
347 sizes.max_content = std::max(sizes.max_content, child_sizes.max_content); 349 sizes.max_content = std::max(sizes.max_content, child_sizes.max_content);
348 } 350 }
349 351
(...skipping 19 matching lines...) Expand all
369 NGLogicalOffset bfc_offset = offset; 371 NGLogicalOffset bfc_offset = offset;
370 if (ConstraintSpace().ClearanceOffset()) { 372 if (ConstraintSpace().ClearanceOffset()) {
371 bfc_offset.block_offset = std::max( 373 bfc_offset.block_offset = std::max(
372 ConstraintSpace().ClearanceOffset().value(), offset.block_offset); 374 ConstraintSpace().ClearanceOffset().value(), offset.block_offset);
373 } 375 }
374 builder_->SetBfcOffset(bfc_offset); 376 builder_->SetBfcOffset(bfc_offset);
375 } 377 }
376 } 378 }
377 379
378 RefPtr<NGLayoutResult> NGBlockLayoutAlgorithm::Layout() { 380 RefPtr<NGLayoutResult> NGBlockLayoutAlgorithm::Layout() {
379 WTF::Optional<MinMaxContentSize> sizes; 381 WTF::Optional<MinAndMaxContentSizes> sizes;
380 if (NeedMinMaxContentSize(ConstraintSpace(), Style())) 382 if (NeedMinAndMaxContentSizes(ConstraintSpace(), Style()))
381 sizes = ComputeMinMaxContentSize(); 383 sizes = ComputeMinAndMaxContentSizes();
382 384
383 border_and_padding_ = ComputeBorders(ConstraintSpace(), Style()) + 385 border_and_padding_ = ComputeBorders(ConstraintSpace(), Style()) +
384 ComputePadding(ConstraintSpace(), Style()); 386 ComputePadding(ConstraintSpace(), Style());
385 387
386 LayoutUnit inline_size = 388 LayoutUnit inline_size =
387 ComputeInlineSizeForFragment(ConstraintSpace(), Style(), sizes); 389 ComputeInlineSizeForFragment(ConstraintSpace(), Style(), sizes);
388 LayoutUnit adjusted_inline_size = 390 LayoutUnit adjusted_inline_size =
389 inline_size - border_and_padding_.InlineSum(); 391 inline_size - border_and_padding_.InlineSum();
390 // TODO(layout-ng): For quirks mode, should we pass blockSize instead of 392 // TODO(layout-ng): For quirks mode, should we pass blockSize instead of
391 // -1? 393 // -1?
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 } 660 }
659 661
660 // The end of the block fits in the current fragmentainer. 662 // The end of the block fits in the current fragmentainer.
661 builder_->SetBlockSize(block_size); 663 builder_->SetBlockSize(block_size);
662 builder_->SetBlockOverflow(content_size_); 664 builder_->SetBlockOverflow(content_size_);
663 } 665 }
664 666
665 NGBoxStrut NGBlockLayoutAlgorithm::CalculateMargins( 667 NGBoxStrut NGBlockLayoutAlgorithm::CalculateMargins(
666 const NGConstraintSpace& space, 668 const NGConstraintSpace& space,
667 const ComputedStyle& style) { 669 const ComputedStyle& style) {
668 WTF::Optional<MinMaxContentSize> sizes; 670 WTF::Optional<MinAndMaxContentSizes> sizes;
669 if (NeedMinMaxContentSize(space, style)) { 671 if (NeedMinAndMaxContentSizes(space, style)) {
670 // TODO(ikilpatrick): Change ComputeMinMaxContentSize to return 672 // TODO(ikilpatrick): Change ComputeMinAndMaxContentSizes to return
671 // MinMaxContentSize. 673 // MinAndMaxContentSizes.
672 sizes = toNGBlockNode(current_child_)->ComputeMinMaxContentSize(); 674 sizes = toNGBlockNode(current_child_)->ComputeMinAndMaxContentSizes();
673 } 675 }
674 LayoutUnit child_inline_size = 676 LayoutUnit child_inline_size =
675 ComputeInlineSizeForFragment(space, style, sizes); 677 ComputeInlineSizeForFragment(space, style, sizes);
676 NGBoxStrut margins = 678 NGBoxStrut margins =
677 ComputeMargins(space, style, space.WritingMode(), space.Direction()); 679 ComputeMargins(space, style, space.WritingMode(), space.Direction());
678 if (!style.isFloating()) { 680 if (!style.isFloating()) {
679 ApplyAutoMargins(space, style, child_inline_size, &margins); 681 ApplyAutoMargins(space, style, child_inline_size, &margins);
680 } 682 }
681 return margins; 683 return margins;
682 } 684 }
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 DCHECK(builder_->BfcOffset()); 763 DCHECK(builder_->BfcOffset());
762 space_available -= curr_bfc_offset_.block_offset; 764 space_available -= curr_bfc_offset_.block_offset;
763 } 765 }
764 } 766 }
765 space_builder_->SetFragmentainerSpaceAvailable(space_available); 767 space_builder_->SetFragmentainerSpaceAvailable(space_available);
766 768
767 return space_builder_->ToConstraintSpace( 769 return space_builder_->ToConstraintSpace(
768 FromPlatformWritingMode(current_child_style.getWritingMode())); 770 FromPlatformWritingMode(current_child_style.getWritingMode()));
769 } 771 }
770 } // namespace blink 772 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698