| 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_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" | 8 #include "core/layout/LayoutMultiColumnFlowThread.h" |
| 9 #include "core/layout/LayoutMultiColumnSet.h" | 9 #include "core/layout/LayoutMultiColumnSet.h" |
| 10 #include "core/layout/api/LineLayoutAPIShim.h" | 10 #include "core/layout/api/LineLayoutAPIShim.h" |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 } | 215 } |
| 216 } | 216 } |
| 217 } | 217 } |
| 218 return next_sibling_; | 218 return next_sibling_; |
| 219 } | 219 } |
| 220 | 220 |
| 221 LayoutObject* NGBlockNode::GetLayoutObject() { | 221 LayoutObject* NGBlockNode::GetLayoutObject() { |
| 222 return layout_box_; | 222 return layout_box_; |
| 223 } | 223 } |
| 224 | 224 |
| 225 static bool ShouldHandleByInlineContext(LayoutObject* child) { | |
| 226 DCHECK(child); | |
| 227 // The spec isn't clear about whether floats/OOF should be in inline | |
| 228 // formatting context or in block formatting context. | |
| 229 // Prefer inline formatting context because 1) floats/OOF at the beginning | |
| 230 // and in the middle of inline should be handled in the same code, and 2) | |
| 231 // it matches to the LayoutObject tree. | |
| 232 for (; child; child = child->NextSibling()) { | |
| 233 if (child->IsInline()) | |
| 234 return true; | |
| 235 if (child->IsFloating() || child->IsOutOfFlowPositioned()) | |
| 236 continue; | |
| 237 return false; | |
| 238 } | |
| 239 // All children are either float or OOF. | |
| 240 // TODO(kojii): Should this be handled in block context or inline context? | |
| 241 // If we handle in inline, we can remove all code for floats/OOF from block | |
| 242 // layout, but it may change semantics and causes incorrectness? | |
| 243 return false; | |
| 244 } | |
| 245 | |
| 246 NGLayoutInputNode* NGBlockNode::FirstChild() { | 225 NGLayoutInputNode* NGBlockNode::FirstChild() { |
| 247 if (!first_child_) { | 226 if (!first_child_) { |
| 248 LayoutObject* child = layout_box_->SlowFirstChild(); | 227 LayoutObject* child = layout_box_->SlowFirstChild(); |
| 249 if (child) { | 228 if (child) { |
| 250 if (ShouldHandleByInlineContext(child)) { | 229 if (layout_box_->ChildrenInline()) { |
| 251 first_child_ = new NGInlineNode(child, ToLayoutBlockFlow(layout_box_)); | 230 first_child_ = new NGInlineNode(child, ToLayoutBlockFlow(layout_box_)); |
| 252 } else { | 231 } else { |
| 253 first_child_ = new NGBlockNode(child); | 232 first_child_ = new NGBlockNode(child); |
| 254 } | 233 } |
| 255 } | 234 } |
| 256 } | 235 } |
| 257 return first_child_; | 236 return first_child_; |
| 258 } | 237 } |
| 259 | 238 |
| 260 DEFINE_TRACE(NGBlockNode) { | 239 DEFINE_TRACE(NGBlockNode) { |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 | 366 |
| 388 // Save static position for legacy AbsPos layout. | 367 // Save static position for legacy AbsPos layout. |
| 389 void NGBlockNode::SaveStaticOffsetForLegacy(const NGLogicalOffset& offset) { | 368 void NGBlockNode::SaveStaticOffsetForLegacy(const NGLogicalOffset& offset) { |
| 390 DCHECK(layout_box_->IsOutOfFlowPositioned()); | 369 DCHECK(layout_box_->IsOutOfFlowPositioned()); |
| 391 DCHECK(layout_box_->Layer()); | 370 DCHECK(layout_box_->Layer()); |
| 392 layout_box_->Layer()->SetStaticBlockPosition(offset.block_offset); | 371 layout_box_->Layer()->SetStaticBlockPosition(offset.block_offset); |
| 393 layout_box_->Layer()->SetStaticInlinePosition(offset.inline_offset); | 372 layout_box_->Layer()->SetStaticInlinePosition(offset.inline_offset); |
| 394 } | 373 } |
| 395 | 374 |
| 396 } // namespace blink | 375 } // namespace blink |
| OLD | NEW |