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

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

Issue 2797053002: Remove redundant casts, use NGLayoutInputNode base functions everywhere (Closed)
Patch Set: 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
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_child_iterator.h" 8 #include "core/layout/ng/ng_block_child_iterator.h"
9 #include "core/layout/ng/ng_box_fragment.h" 9 #include "core/layout/ng/ng_box_fragment.h"
10 #include "core/layout/ng/ng_constraint_space.h" 10 #include "core/layout/ng/ng_constraint_space.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 MinMaxContentSize sizes; 70 MinMaxContentSize sizes;
71 71
72 // Size-contained elements don't consider their contents for intrinsic sizing. 72 // Size-contained elements don't consider their contents for intrinsic sizing.
73 if (Style().containsSize()) 73 if (Style().containsSize())
74 return sizes; 74 return sizes;
75 75
76 // TODO: handle floats & orthogonal children. 76 // TODO: handle floats & orthogonal children.
77 for (NGLayoutInputNode* node = Node()->FirstChild(); node; 77 for (NGLayoutInputNode* node = Node()->FirstChild(); node;
78 node = node->NextSibling()) { 78 node = node->NextSibling()) {
79 MinMaxContentSize child_sizes; 79 MinMaxContentSize child_sizes;
80 if (node->Type() == NGLayoutInputNode::kLegacyInline) { 80 if (node->IsInline()) {
81 // From |NGBlockLayoutAlgorithm| perspective, we can handle |NGInlineNode| 81 // From |NGBlockLayoutAlgorithm| perspective, we can handle |NGInlineNode|
82 // almost the same as |NGBlockNode|, because an |NGInlineNode| includes 82 // almost the same as |NGBlockNode|, because an |NGInlineNode| includes
83 // all inline nodes following |node| and their descendants, and produces 83 // all inline nodes following |node| and their descendants, and produces
84 // an anonymous box that contains all line boxes. 84 // an anonymous box that contains all line boxes.
85 // |NextSibling| returns the next block sibling, or nullptr, skipping all 85 // |NextSibling| returns the next block sibling, or nullptr, skipping all
86 // following inline siblings and descendants. 86 // following inline siblings and descendants.
87 child_sizes = toNGInlineNode(node)->ComputeMinMaxContentSize(); 87 child_sizes = node->ComputeMinMaxContentSize();
88 } else { 88 } else {
89 Optional<MinMaxContentSize> child_minmax; 89 Optional<MinMaxContentSize> child_minmax;
90 NGBlockNode* block_child = toNGBlockNode(node); 90 if (NeedMinMaxContentSizeForContentContribution(node->Style())) {
91 if (NeedMinMaxContentSizeForContentContribution(block_child->Style())) { 91 child_minmax = node->ComputeMinMaxContentSize();
92 child_minmax = block_child->ComputeMinMaxContentSize();
93 } 92 }
94 93
95 child_sizes = ComputeMinAndMaxContentContribution(block_child->Style(), 94 child_sizes =
96 child_minmax); 95 ComputeMinAndMaxContentContribution(node->Style(), child_minmax);
97 } 96 }
98 97
99 sizes.min_content = std::max(sizes.min_content, child_sizes.min_content); 98 sizes.min_content = std::max(sizes.min_content, child_sizes.min_content);
100 sizes.max_content = std::max(sizes.max_content, child_sizes.max_content); 99 sizes.max_content = std::max(sizes.max_content, child_sizes.max_content);
101 } 100 }
102 101
103 sizes.max_content = std::max(sizes.min_content, sizes.max_content); 102 sizes.max_content = std::max(sizes.min_content, sizes.max_content);
104 return sizes; 103 return sizes;
105 } 104 }
106 105
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 DCHECK_EQ(curr_margin_strut_, NGMarginStrut()); 188 DCHECK_EQ(curr_margin_strut_, NGMarginStrut());
190 // TODO(glebl): Uncomment the line below once we add the fragmentation 189 // TODO(glebl): Uncomment the line below once we add the fragmentation
191 // support for floats. 190 // support for floats.
192 // DCHECK_EQ(builder_.BfcOffset().value(), NGLogicalOffset()); 191 // DCHECK_EQ(builder_.BfcOffset().value(), NGLogicalOffset());
193 curr_bfc_offset_ = {}; 192 curr_bfc_offset_ = {};
194 } 193 }
195 194
196 curr_bfc_offset_.block_offset += content_size_; 195 curr_bfc_offset_.block_offset += content_size_;
197 196
198 while (child) { 197 while (child) {
199 if (child->Type() == NGLayoutInputNode::kLegacyBlock) { 198 if (child->IsBlock()) {
200 NGBlockNode* current_block_child = toNGBlockNode(child); 199 EPosition position = child->Style().position();
201 EPosition position = current_block_child->Style().position();
202 if (position == EPosition::kAbsolute || position == EPosition::kFixed) { 200 if (position == EPosition::kAbsolute || position == EPosition::kFixed) {
203 NGLogicalOffset offset = {border_and_padding_.inline_start, 201 NGLogicalOffset offset = {border_and_padding_.inline_start,
204 content_size_ + curr_margin_strut_.Sum()}; 202 content_size_ + curr_margin_strut_.Sum()};
205 builder_.AddOutOfFlowChildCandidate(current_block_child, offset); 203 builder_.AddOutOfFlowChildCandidate(toNGBlockNode(child), offset);
206 NGBlockChildIterator::Entry entry = child_iterator.NextChild(); 204 NGBlockChildIterator::Entry entry = child_iterator.NextChild();
207 child = entry.node; 205 child = entry.node;
208 child_break_token = entry.token; 206 child_break_token = entry.token;
209 continue; 207 continue;
210 } 208 }
211 } 209 }
212 210
213 PrepareChildLayout(child); 211 PrepareChildLayout(child);
214 RefPtr<NGConstraintSpace> child_space = 212 RefPtr<NGConstraintSpace> child_space =
215 CreateConstraintSpaceForChild(child); 213 CreateConstraintSpaceForChild(child);
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 // started handling the fragmentation for floats. 509 // started handling the fragmentation for floats.
512 space_builder_.SetBfcOffset(NGLogicalOffset()); 510 space_builder_.SetBfcOffset(NGLogicalOffset());
513 } 511 }
514 } 512 }
515 space_builder_.SetFragmentainerSpaceAvailable(space_available); 513 space_builder_.SetFragmentainerSpaceAvailable(space_available);
516 514
517 return space_builder_.ToConstraintSpace( 515 return space_builder_.ToConstraintSpace(
518 FromPlatformWritingMode(child_style.getWritingMode())); 516 FromPlatformWritingMode(child_style.getWritingMode()));
519 } 517 }
520 } // namespace blink 518 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698