| 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 #ifndef NGPhysicalFragment_h | 5 #ifndef NGPhysicalFragment_h |
| 6 #define NGPhysicalFragment_h | 6 #define NGPhysicalFragment_h |
| 7 | 7 |
| 8 #include "core/CoreExport.h" | 8 #include "core/CoreExport.h" |
| 9 #include "core/layout/ng/ng_units.h" | 9 #include "core/layout/ng/ng_units.h" |
| 10 #include "platform/LayoutUnit.h" | 10 #include "platform/LayoutUnit.h" |
| 11 #include "platform/heap/Handle.h" | 11 #include "platform/heap/Handle.h" |
| 12 #include "wtf/Vector.h" | 12 #include "wtf/Vector.h" |
| 13 | 13 |
| 14 namespace blink { | 14 namespace blink { |
| 15 | 15 |
| 16 class LayoutObject; | 16 class LayoutObject; |
| 17 class NGBlockNode; | |
| 18 class NGBreakToken; | 17 class NGBreakToken; |
| 19 struct NGFloatingObject; | |
| 20 | 18 |
| 21 // The NGPhysicalFragment contains the output information from layout. The | 19 // The NGPhysicalFragment contains the output geometry from layout. The |
| 22 // fragment stores all of its information in the physical coordinate system for | 20 // fragment stores all of its information in the physical coordinate system for |
| 23 // use by paint, hit-testing etc. | 21 // use by paint, hit-testing etc. |
| 24 // | 22 // |
| 25 // The fragment keeps a pointer back to the LayoutObject which generated it. | 23 // The fragment keeps a pointer back to the LayoutObject which generated it. |
| 26 // Once we have transitioned fully to LayoutNG it should be a const pointer | 24 // Once we have transitioned fully to LayoutNG it should be a const pointer |
| 27 // such that paint/hit-testing/etc don't modify it. | 25 // such that paint/hit-testing/etc don't modify it. |
| 28 // | 26 // |
| 29 // Layout code should only access output layout information through the | 27 // Layout code should only access geometry information through the |
| 30 // NGFragmentBase classes which transforms information into the logical | 28 // NGFragment wrapper classes which transforms information into the logical |
| 31 // coordinate system. | 29 // coordinate system. |
| 32 class CORE_EXPORT NGPhysicalFragment : public RefCounted<NGPhysicalFragment> { | 30 class CORE_EXPORT NGPhysicalFragment : public RefCounted<NGPhysicalFragment> { |
| 33 public: | 31 public: |
| 34 enum NGFragmentType { kFragmentBox = 0, kFragmentText = 1 }; | 32 enum NGFragmentType { kFragmentBox = 0, kFragmentText = 1 }; |
| 35 | 33 |
| 36 NGFragmentType Type() const { return static_cast<NGFragmentType>(type_); } | 34 NGFragmentType Type() const { return static_cast<NGFragmentType>(type_); } |
| 37 | 35 |
| 38 // Override RefCounted's deref() to ensure operator delete is called on the | 36 // Override RefCounted's deref() to ensure operator delete is called on the |
| 39 // appropriate subclass type. | 37 // appropriate subclass type. |
| 40 void deref() const { | 38 void deref() const { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 void SetOffset(NGPhysicalOffset offset) { | 73 void SetOffset(NGPhysicalOffset offset) { |
| 76 DCHECK(!is_placed_); | 74 DCHECK(!is_placed_); |
| 77 offset_ = offset; | 75 offset_ = offset; |
| 78 is_placed_ = true; | 76 is_placed_ = true; |
| 79 } | 77 } |
| 80 | 78 |
| 81 NGBreakToken* BreakToken() const { return break_token_; } | 79 NGBreakToken* BreakToken() const { return break_token_; } |
| 82 | 80 |
| 83 LayoutObject* GetLayoutObject() const { return layout_object_; } | 81 LayoutObject* GetLayoutObject() const { return layout_object_; } |
| 84 | 82 |
| 85 const HeapLinkedHashSet<WeakMember<NGBlockNode>>& OutOfFlowDescendants() | |
| 86 const { | |
| 87 return out_of_flow_descendants_; | |
| 88 } | |
| 89 | |
| 90 const Vector<NGStaticPosition>& OutOfFlowPositions() const { | |
| 91 return out_of_flow_positions_; | |
| 92 } | |
| 93 | |
| 94 bool IsPlaced() const { return is_placed_; } | 83 bool IsPlaced() const { return is_placed_; } |
| 95 | 84 |
| 96 // List of floats that need to be positioned by the next in-flow child that | |
| 97 // can determine its position in space. | |
| 98 // Use case example where it may be needed: | |
| 99 // <div><float></div> | |
| 100 // <div style="margin-top: 10px; height: 20px"></div> | |
| 101 // The float cannot be positioned right away inside of the 1st div because | |
| 102 // the vertical position is not known at that moment. It will be known only | |
| 103 // after the 2nd div collapses its margin with its parent. | |
| 104 const Vector<Persistent<NGFloatingObject>>& UnpositionedFloats() const { | |
| 105 return unpositioned_floats_; | |
| 106 } | |
| 107 | |
| 108 // List of positioned float that need to be copied to the old layout tree. | |
| 109 // TODO(layout-ng): remove this once we change painting code to handle floats | |
| 110 // differently. | |
| 111 const Vector<Persistent<NGFloatingObject>>& PositionedFloats() const { | |
| 112 return positioned_floats_; | |
| 113 } | |
| 114 | |
| 115 protected: | 85 protected: |
| 116 NGPhysicalFragment(LayoutObject* layout_object, | 86 NGPhysicalFragment(LayoutObject* layout_object, |
| 117 NGPhysicalSize size, | 87 NGPhysicalSize size, |
| 118 NGPhysicalSize overflow, | 88 NGPhysicalSize overflow, |
| 119 NGFragmentType type, | 89 NGFragmentType type, |
| 120 PersistentHeapLinkedHashSet<WeakMember<NGBlockNode>>& | |
| 121 out_of_flow_descendants, | |
| 122 Vector<NGStaticPosition> out_of_flow_positions, | |
| 123 Vector<Persistent<NGFloatingObject>>& unpositioned_floats, | |
| 124 Vector<Persistent<NGFloatingObject>>& positioned_floats, | |
| 125 NGBreakToken* break_token = nullptr); | 90 NGBreakToken* break_token = nullptr); |
| 126 | 91 |
| 127 LayoutObject* layout_object_; | 92 LayoutObject* layout_object_; |
| 128 NGPhysicalSize size_; | 93 NGPhysicalSize size_; |
| 129 NGPhysicalSize overflow_; | 94 NGPhysicalSize overflow_; |
| 130 NGPhysicalOffset offset_; | 95 NGPhysicalOffset offset_; |
| 131 Persistent<NGBreakToken> break_token_; | 96 Persistent<NGBreakToken> break_token_; |
| 132 PersistentHeapLinkedHashSet<WeakMember<NGBlockNode>> out_of_flow_descendants_; | |
| 133 Vector<NGStaticPosition> out_of_flow_positions_; | |
| 134 Vector<Persistent<NGFloatingObject>> unpositioned_floats_; | |
| 135 Vector<Persistent<NGFloatingObject>> positioned_floats_; | |
| 136 | 97 |
| 137 unsigned type_ : 1; | 98 unsigned type_ : 1; |
| 138 unsigned is_placed_ : 1; | 99 unsigned is_placed_ : 1; |
| 139 | 100 |
| 140 private: | 101 private: |
| 141 void destroy() const; | 102 void destroy() const; |
| 142 }; | 103 }; |
| 143 | 104 |
| 144 } // namespace blink | 105 } // namespace blink |
| 145 | 106 |
| 146 #endif // NGPhysicalFragment_h | 107 #endif // NGPhysicalFragment_h |
| OLD | NEW |