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 NGFloatingObject_h | 5 #ifndef NGFloatingObject_h |
6 #define NGFloatingObject_h | 6 #define NGFloatingObject_h |
7 | 7 |
8 #include "core/layout/ng/geometry/ng_box_strut.h" | 8 #include "core/layout/ng/geometry/ng_box_strut.h" |
9 #include "core/layout/ng/geometry/ng_logical_size.h" | 9 #include "core/layout/ng/geometry/ng_logical_size.h" |
10 #include "core/layout/ng/ng_block_node.h" | 10 #include "core/layout/ng/ng_block_node.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 // - origin_offset which represents the layout point for this float. | 43 // - origin_offset which represents the layout point for this float. |
44 // - from_offset which represents the point from where we need to calculate | 44 // - from_offset which represents the point from where we need to calculate |
45 // the relative logical offset for this float. | 45 // the relative logical offset for this float. |
46 // Layout details: | 46 // Layout details: |
47 // At the time when this float is created only *inline* offsets are known. | 47 // At the time when this float is created only *inline* offsets are known. |
48 // Block offset will be set when we are about to place this float, i.e. when | 48 // Block offset will be set when we are about to place this float, i.e. when |
49 // we resolved MarginStrut, adjusted the offset to clearance line etc. | 49 // we resolved MarginStrut, adjusted the offset to clearance line etc. |
50 NGLogicalOffset origin_offset; | 50 NGLogicalOffset origin_offset; |
51 NGLogicalOffset from_offset; | 51 NGLogicalOffset from_offset; |
52 | 52 |
53 // Calculated logical offset. It's never {@code nullopt} for a positioned | |
54 // float. | |
55 WTF::Optional<NGLogicalOffset> logical_offset; | |
56 | |
57 // Writing mode of the float's constraint space. | 53 // Writing mode of the float's constraint space. |
58 NGWritingMode writing_mode; | 54 NGWritingMode writing_mode; |
59 | 55 |
60 RefPtr<NGPhysicalFragment> fragment; | 56 RefPtr<NGPhysicalFragment> fragment; |
61 | 57 |
62 // In the case where a legacy FloatingObject is attached to not its own | |
63 // parent, e.g. a float surrounded by a bunch of nested empty divs, | |
64 // NG float fragment's LeftOffset() cannot be used as legacy FloatingObject's | |
65 // left offset because that offset should be relative to the original float | |
66 // parent. | |
67 // {@code left_offset} is calculated when we know to which parent this float | |
68 // would be attached. | |
69 LayoutUnit left_offset; | |
70 | |
71 bool IsLeft() const { return exclusion_type == NGExclusion::kFloatLeft; } | 58 bool IsLeft() const { return exclusion_type == NGExclusion::kFloatLeft; } |
72 | 59 |
73 bool IsRight() const { return exclusion_type == NGExclusion::kFloatRight; } | 60 bool IsRight() const { return exclusion_type == NGExclusion::kFloatRight; } |
74 | 61 |
75 String ToString() const { | 62 String ToString() const { |
76 return String::Format("Type: '%d' Fragment: '%s'", exclusion_type, | 63 return String::Format("Type: '%d'", exclusion_type); |
77 fragment->ToString().Ascii().data()); | |
78 } | 64 } |
79 | 65 |
80 private: | 66 private: |
81 NGFloatingObject(const ComputedStyle& style, | 67 NGFloatingObject(const ComputedStyle& style, |
82 const NGBoxStrut& margins, | 68 const NGBoxStrut& margins, |
83 const NGLogicalSize& available_size, | 69 const NGLogicalSize& available_size, |
84 const NGLogicalOffset& origin_offset, | 70 const NGLogicalOffset& origin_offset, |
85 const NGLogicalOffset& from_offset, | 71 const NGLogicalOffset& from_offset, |
86 NGWritingMode writing_mode, | 72 NGWritingMode writing_mode, |
87 NGPhysicalFragment* fragment) | 73 NGPhysicalFragment* fragment) |
88 : margins(margins), | 74 : margins(margins), |
89 available_size(available_size), | 75 available_size(available_size), |
90 origin_offset(origin_offset), | 76 origin_offset(origin_offset), |
91 from_offset(from_offset), | 77 from_offset(from_offset), |
92 writing_mode(writing_mode), | 78 writing_mode(writing_mode), |
93 fragment(fragment) { | 79 fragment(fragment) { |
94 exclusion_type = NGExclusion::kFloatLeft; | 80 exclusion_type = NGExclusion::kFloatLeft; |
95 if (style.Floating() == EFloat::kRight) | 81 if (style.Floating() == EFloat::kRight) |
96 exclusion_type = NGExclusion::kFloatRight; | 82 exclusion_type = NGExclusion::kFloatRight; |
97 clear_type = style.Clear(); | 83 clear_type = style.Clear(); |
98 } | 84 } |
99 }; | 85 }; |
100 | 86 |
101 } // namespace blink | 87 } // namespace blink |
102 | 88 |
103 #endif // NGFloatingObject_h | 89 #endif // NGFloatingObject_h |
OLD | NEW |