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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 fragment.Width()); | 58 fragment.Width()); |
59 } else { | 59 } else { |
60 layout_box->SetX(fragment.LeftOffset()); | 60 layout_box->SetX(fragment.LeftOffset()); |
61 } | 61 } |
62 layout_box->SetY(fragment.TopOffset()); | 62 layout_box->SetY(fragment.TopOffset()); |
63 } | 63 } |
64 | 64 |
65 // Similar to FragmentPositionUpdated but for floats. | 65 // Similar to FragmentPositionUpdated but for floats. |
66 // - Updates layout object's geometric information. | 66 // - Updates layout object's geometric information. |
67 // - Creates legacy FloatingObject and attached it to the provided parent. | 67 // - Creates legacy FloatingObject and attached it to the provided parent. |
68 void FloatingObjectPositionedUpdated(NGFloatingObject* ng_floating_object, | 68 void FloatingObjectPositionedUpdated(const NGPositionedFloat& positioned_float, |
69 LayoutBox* parent) { | 69 LayoutBox* parent) { |
70 NGPhysicalBoxFragment* box_fragment = | 70 NGPhysicalBoxFragment* box_fragment = |
71 ToNGPhysicalBoxFragment(ng_floating_object->fragment.Get()); | 71 ToNGPhysicalBoxFragment(positioned_float.fragment.Get()); |
72 FragmentPositionUpdated(*box_fragment); | 72 FragmentPositionUpdated(*box_fragment); |
73 | 73 |
74 LayoutBox* layout_box = ToLayoutBox(box_fragment->GetLayoutObject()); | 74 LayoutBox* layout_box = ToLayoutBox(box_fragment->GetLayoutObject()); |
75 DCHECK(layout_box->IsFloating()); | 75 DCHECK(layout_box->IsFloating()); |
76 | 76 |
77 if (parent && parent->IsLayoutBlockFlow()) { | 77 if (parent && parent->IsLayoutBlockFlow()) { |
78 FloatingObject* floating_object = | 78 FloatingObject* floating_object = |
79 ToLayoutBlockFlow(parent)->InsertFloatingObject(*layout_box); | 79 ToLayoutBlockFlow(parent)->InsertFloatingObject(*layout_box); |
80 floating_object->SetIsInPlacedTree(false); | 80 floating_object->SetIsInPlacedTree(false); |
81 floating_object->SetX(ng_floating_object->left_offset); | 81 floating_object->SetX(positioned_float.left_offset); |
82 floating_object->SetY(box_fragment->TopOffset()); | 82 floating_object->SetY(box_fragment->TopOffset()); |
83 floating_object->SetIsPlaced(true); | 83 floating_object->SetIsPlaced(true); |
84 floating_object->SetIsInPlacedTree(true); | 84 floating_object->SetIsInPlacedTree(true); |
85 } | 85 } |
86 } | 86 } |
87 | 87 |
88 void UpdateLegacyMultiColumnFlowThread(LayoutBox* layout_box, | 88 void UpdateLegacyMultiColumnFlowThread(LayoutBox* layout_box, |
89 const NGPhysicalBoxFragment* fragment) { | 89 const NGPhysicalBoxFragment* fragment) { |
90 LayoutBlockFlow* multicol = ToLayoutBlockFlow(layout_box); | 90 LayoutBlockFlow* multicol = ToLayoutBlockFlow(layout_box); |
91 LayoutMultiColumnFlowThread* flow_thread = multicol->MultiColumnFlowThread(); | 91 LayoutMultiColumnFlowThread* flow_thread = multicol->MultiColumnFlowThread(); |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 ComputePadding(constraint_space, Style()); | 295 ComputePadding(constraint_space, Style()); |
296 LayoutUnit intrinsic_logical_height = | 296 LayoutUnit intrinsic_logical_height = |
297 layout_box_->Style()->IsHorizontalWritingMode() | 297 layout_box_->Style()->IsHorizontalWritingMode() |
298 ? fragment->OverflowSize().height | 298 ? fragment->OverflowSize().height |
299 : fragment->OverflowSize().width; | 299 : fragment->OverflowSize().width; |
300 intrinsic_logical_height -= border_and_padding.BlockSum(); | 300 intrinsic_logical_height -= border_and_padding.BlockSum(); |
301 layout_box_->SetIntrinsicContentLogicalHeight(intrinsic_logical_height); | 301 layout_box_->SetIntrinsicContentLogicalHeight(intrinsic_logical_height); |
302 | 302 |
303 // We may still have unpositioned floats when we reach the root box. | 303 // We may still have unpositioned floats when we reach the root box. |
304 if (!layout_box_->Parent()) { | 304 if (!layout_box_->Parent()) { |
305 for (const RefPtr<NGFloatingObject>& floating_object : | 305 for (const NGPositionedFloat& positioned_float : |
306 fragment->PositionedFloats()) { | 306 fragment->PositionedFloats()) { |
307 FloatingObjectPositionedUpdated(floating_object.Get(), layout_box_); | 307 FloatingObjectPositionedUpdated(positioned_float, layout_box_); |
308 } | 308 } |
309 } | 309 } |
310 | 310 |
311 for (const auto& child_fragment : fragment->Children()) { | 311 for (const auto& child_fragment : fragment->Children()) { |
312 if (child_fragment->IsPlaced()) | 312 if (child_fragment->IsPlaced()) |
313 FragmentPositionUpdated(ToNGPhysicalBoxFragment(*child_fragment)); | 313 FragmentPositionUpdated(ToNGPhysicalBoxFragment(*child_fragment)); |
314 | 314 |
315 for (const RefPtr<NGFloatingObject>& floating_object : | 315 for (const NGPositionedFloat& positioned_float : |
316 ToNGPhysicalBoxFragment(child_fragment.Get())->PositionedFloats()) { | 316 ToNGPhysicalBoxFragment(child_fragment.Get())->PositionedFloats()) { |
317 FloatingObjectPositionedUpdated( | 317 FloatingObjectPositionedUpdated( |
318 floating_object.Get(), | 318 positioned_float, ToLayoutBox(child_fragment->GetLayoutObject())); |
319 ToLayoutBox(child_fragment->GetLayoutObject())); | |
320 } | 319 } |
321 } | 320 } |
322 | 321 |
323 if (layout_box_->IsLayoutBlock()) | 322 if (layout_box_->IsLayoutBlock()) |
324 ToLayoutBlock(layout_box_)->LayoutPositionedObjects(true); | 323 ToLayoutBlock(layout_box_)->LayoutPositionedObjects(true); |
325 layout_box_->ClearNeedsLayout(); | 324 layout_box_->ClearNeedsLayout(); |
326 if (layout_box_->IsLayoutBlockFlow()) { | 325 if (layout_box_->IsLayoutBlockFlow()) { |
327 ToLayoutBlockFlow(layout_box_)->UpdateIsSelfCollapsing(); | 326 ToLayoutBlockFlow(layout_box_)->UpdateIsSelfCollapsing(); |
328 } | 327 } |
329 } | 328 } |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 | 392 |
394 // Save static position for legacy AbsPos layout. | 393 // Save static position for legacy AbsPos layout. |
395 void NGBlockNode::SaveStaticOffsetForLegacy(const NGLogicalOffset& offset) { | 394 void NGBlockNode::SaveStaticOffsetForLegacy(const NGLogicalOffset& offset) { |
396 DCHECK(layout_box_->IsOutOfFlowPositioned()); | 395 DCHECK(layout_box_->IsOutOfFlowPositioned()); |
397 DCHECK(layout_box_->Layer()); | 396 DCHECK(layout_box_->Layer()); |
398 layout_box_->Layer()->SetStaticBlockPosition(offset.block_offset); | 397 layout_box_->Layer()->SetStaticBlockPosition(offset.block_offset); |
399 layout_box_->Layer()->SetStaticInlinePosition(offset.inline_offset); | 398 layout_box_->Layer()->SetStaticInlinePosition(offset.inline_offset); |
400 } | 399 } |
401 | 400 |
402 } // namespace blink | 401 } // namespace blink |
OLD | NEW |