Chromium Code Reviews| 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_box.h" | 5 #include "core/layout/ng/ng_box.h" |
| 6 | 6 |
| 7 #include "core/layout/LayoutBlockFlow.h" | 7 #include "core/layout/LayoutBlockFlow.h" |
| 8 #include "core/layout/ng/layout_ng_block_flow.h" | 8 #include "core/layout/ng/layout_ng_block_flow.h" |
| 9 #include "core/layout/ng/ng_block_layout_algorithm.h" | 9 #include "core/layout/ng/ng_block_layout_algorithm.h" |
| 10 #include "core/layout/ng/ng_constraint_space_builder.h" | |
| 10 #include "core/layout/ng/ng_constraint_space.h" | 11 #include "core/layout/ng/ng_constraint_space.h" |
| 11 #include "core/layout/ng/ng_direction.h" | 12 #include "core/layout/ng/ng_direction.h" |
| 12 #include "core/layout/ng/ng_fragment.h" | 13 #include "core/layout/ng/ng_fragment.h" |
| 13 #include "core/layout/ng/ng_fragment_builder.h" | 14 #include "core/layout/ng/ng_fragment_builder.h" |
| 14 #include "core/layout/ng/ng_length_utils.h" | 15 #include "core/layout/ng/ng_length_utils.h" |
| 15 #include "core/layout/ng/ng_writing_mode.h" | 16 #include "core/layout/ng/ng_writing_mode.h" |
| 16 | 17 |
| 17 namespace blink { | 18 namespace blink { |
| 18 | 19 |
| 19 NGBox::NGBox(LayoutObject* layout_object) | 20 NGBox::NGBox(LayoutObject* layout_object) |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 56 fragment_ = RunOldLayout(*constraint_space); | 57 fragment_ = RunOldLayout(*constraint_space); |
| 57 } | 58 } |
| 58 *out = new NGFragment(constraint_space->WritingMode(), | 59 *out = new NGFragment(constraint_space->WritingMode(), |
| 59 FromPlatformDirection(Style()->direction()), | 60 FromPlatformDirection(Style()->direction()), |
| 60 fragment_.get()); | 61 fragment_.get()); |
| 61 // Reset algorithm for future use | 62 // Reset algorithm for future use |
| 62 algorithm_ = nullptr; | 63 algorithm_ = nullptr; |
| 63 return true; | 64 return true; |
| 64 } | 65 } |
| 65 | 66 |
| 67 void NGBox::ComputeMinAndMaxContentSizes(NGFragment** min_content, | |
| 68 NGFragment** max_content) { | |
| 69 NGConstraintSpaceBuilder builder( | |
| 70 FromPlatformWritingMode(Style()->getWritingMode())); | |
| 71 builder.SetContainerSize(NGLogicalSize(LayoutUnit(), LayoutUnit())); | |
|
Gleb Lanbin
2016/10/31 19:52:47
nit. you can chain SetContainerSize call to line a
cbiesinger
2016/11/01 19:10:03
I'd rather not chain something to the constructor
| |
| 72 NGConstraintSpace* constraint_space = new NGConstraintSpace( | |
| 73 FromPlatformWritingMode(Style()->getWritingMode()), | |
| 74 FromPlatformDirection(Style()->direction()), builder.ToConstraintSpace()); | |
|
eae
2016/10/31 19:30:25
Presumably once Ian's work is done this will be bu
cbiesinger
2016/11/01 19:10:03
Ah, is that the plan? Added a TODO.
| |
| 75 | |
| 76 NGLayoutAlgorithm* algorithm = | |
| 77 new NGBlockLayoutAlgorithm(Style(), FirstChild(), constraint_space); | |
| 78 if (algorithm->ComputeMinAndMaxContentSizes(min_content, max_content) == | |
|
Gleb Lanbin
2016/10/31 19:52:47
IMO it's a bit confusing that we have 2 almost ide
cbiesinger
2016/11/01 19:10:03
Renamed this one to ComputeOrSynthesizeMinAndMaxCo
| |
| 79 NGLayoutAlgorithm::Success) | |
| 80 return; | |
| 81 | |
| 82 // Have to synthesize this value. | |
| 83 NGPhysicalFragment* fragment; | |
| 84 while (!algorithm->Layout(&fragment)) | |
| 85 continue; | |
| 86 | |
| 87 HeapVector<Member<const NGPhysicalFragmentBase>> empty; | |
|
Gleb Lanbin
2016/10/31 19:52:47
may be add an additional constructor to NGPhysical
cbiesinger
2016/11/01 19:10:03
Removed this entirely due to other changes.
| |
| 88 fragment = | |
| 89 new NGPhysicalFragment(fragment->OverflowSize(), fragment->OverflowSize(), | |
| 90 empty, NGMarginStrut()); | |
| 91 | |
| 92 *min_content = | |
| 93 new NGFragment(FromPlatformWritingMode(Style()->getWritingMode()), | |
| 94 FromPlatformDirection(Style()->direction()), fragment); | |
| 95 | |
| 96 // Now, redo with infinite space for max_content | |
| 97 builder.SetContainerSize(NGLogicalSize(LayoutUnit::max(), LayoutUnit())); | |
| 98 constraint_space = new NGConstraintSpace( | |
| 99 FromPlatformWritingMode(Style()->getWritingMode()), | |
| 100 FromPlatformDirection(Style()->direction()), builder.ToConstraintSpace()); | |
| 101 | |
| 102 algorithm = | |
| 103 new NGBlockLayoutAlgorithm(Style(), FirstChild(), constraint_space); | |
| 104 while (!algorithm->Layout(&fragment)) | |
| 105 continue; | |
| 106 | |
| 107 fragment = | |
| 108 new NGPhysicalFragment(fragment->OverflowSize(), fragment->OverflowSize(), | |
| 109 empty, NGMarginStrut()); | |
| 110 *max_content = | |
| 111 new NGFragment(FromPlatformWritingMode(Style()->getWritingMode()), | |
| 112 FromPlatformDirection(Style()->direction()), fragment); | |
| 113 } | |
| 114 | |
| 66 const ComputedStyle* NGBox::Style() const { | 115 const ComputedStyle* NGBox::Style() const { |
| 67 if (style_) | 116 if (style_) |
| 68 return style_.get(); | 117 return style_.get(); |
| 69 DCHECK(layout_box_); | 118 DCHECK(layout_box_); |
| 70 return layout_box_->style(); | 119 return layout_box_->style(); |
| 71 } | 120 } |
| 72 | 121 |
| 73 NGBox* NGBox::NextSibling() { | 122 NGBox* NGBox::NextSibling() { |
| 74 if (!next_sibling_) { | 123 if (!next_sibling_) { |
| 75 LayoutObject* next_sibling = | 124 LayoutObject* next_sibling = |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 90 } | 139 } |
| 91 | 140 |
| 92 void NGBox::SetNextSibling(NGBox* sibling) { | 141 void NGBox::SetNextSibling(NGBox* sibling) { |
| 93 next_sibling_ = sibling; | 142 next_sibling_ = sibling; |
| 94 } | 143 } |
| 95 | 144 |
| 96 void NGBox::SetFirstChild(NGBox* child) { | 145 void NGBox::SetFirstChild(NGBox* child) { |
| 97 first_child_ = child; | 146 first_child_ = child; |
| 98 } | 147 } |
| 99 | 148 |
| 149 DEFINE_TRACE(NGBox) { | |
| 150 visitor->trace(algorithm_); | |
| 151 visitor->trace(fragment_); | |
| 152 visitor->trace(next_sibling_); | |
| 153 visitor->trace(first_child_); | |
| 154 } | |
| 155 | |
| 100 void NGBox::PositionUpdated() { | 156 void NGBox::PositionUpdated() { |
| 101 if (!layout_box_) | 157 if (!layout_box_) |
| 102 return; | 158 return; |
| 103 DCHECK(layout_box_->parent()) << "Should be called on children only."; | 159 DCHECK(layout_box_->parent()) << "Should be called on children only."; |
| 104 | 160 |
| 105 layout_box_->setX(fragment_->LeftOffset()); | 161 layout_box_->setX(fragment_->LeftOffset()); |
| 106 layout_box_->setY(fragment_->TopOffset()); | 162 layout_box_->setY(fragment_->TopOffset()); |
| 107 | 163 |
| 108 if (layout_box_->isFloating() && layout_box_->parent()->isLayoutBlockFlow()) { | 164 if (layout_box_->isFloating() && layout_box_->parent()->isLayoutBlockFlow()) { |
| 109 FloatingObject* floating_object = toLayoutBlockFlow(layout_box_->parent()) | 165 FloatingObject* floating_object = toLayoutBlockFlow(layout_box_->parent()) |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 179 .SetBlockSize(layout_box_->logicalHeight()) | 235 .SetBlockSize(layout_box_->logicalHeight()) |
| 180 .SetDirection(FromPlatformDirection(layout_box_->styleRef().direction())) | 236 .SetDirection(FromPlatformDirection(layout_box_->styleRef().direction())) |
| 181 .SetWritingMode( | 237 .SetWritingMode( |
| 182 FromPlatformWritingMode(layout_box_->styleRef().getWritingMode())) | 238 FromPlatformWritingMode(layout_box_->styleRef().getWritingMode())) |
| 183 .SetInlineOverflow(overflow.width()) | 239 .SetInlineOverflow(overflow.width()) |
| 184 .SetBlockOverflow(overflow.height()); | 240 .SetBlockOverflow(overflow.height()); |
| 185 return builder.ToFragment(); | 241 return builder.ToFragment(); |
| 186 } | 242 } |
| 187 | 243 |
| 188 } // namespace blink | 244 } // namespace blink |
| OLD | NEW |