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 21 matching lines...) Expand all Loading... |
32 writing_mode, fragment)); | 32 writing_mode, fragment)); |
33 } | 33 } |
34 | 34 |
35 NGExclusion::Type exclusion_type; | 35 NGExclusion::Type exclusion_type; |
36 EClear clear_type; | 36 EClear clear_type; |
37 NGBoxStrut margins; | 37 NGBoxStrut margins; |
38 // Available size of the constraint space that will be used by | 38 // Available size of the constraint space that will be used by |
39 // NGLayoutOpportunityIterator to position this floating object. | 39 // NGLayoutOpportunityIterator to position this floating object. |
40 NGLogicalSize available_size; | 40 NGLogicalSize available_size; |
41 | 41 |
42 // To correctly position a float we need 2 offsets: | 42 // To correctly **position** a float we need 2 offsets: |
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 // To correctly **paint** a float we need to know the BFC offset of the |
| 54 // container to which we are attaching this float. It's used to calculate |
| 55 // {@code paint_offset}. |
| 56 // In most situations {@code paint_offset} equals to float's logical |
| 57 // offset except the cases where a float needs to be re-attached to a non-zero |
| 58 // height parent. |
| 59 // |
| 60 // Example: |
| 61 // <body> |
| 62 // <p style="height: 60px">Example</p> |
| 63 // <div id="zero-height-div"><float></div> |
| 64 // |
| 65 // Here the float's logical offset is 0 relative to its #zero-height-div |
| 66 // parent. Because of the "zero height" div this float is re-attached to the |
| 67 // 1st non-empty parent => body. To paint this float correctly we provide the |
| 68 // modified {@code paint_offset} which is relative to the float's new |
| 69 // parent. |
| 70 // I.e. for our example {@code paint_offset.top} == |
| 71 // #zero-height-div's BFC offset |
| 72 // - body's BFC offset + float's logical offset |
| 73 // |
| 74 // For code safety reasons {@code parent_bfc_block_offset} is Optional here |
| 75 // because the block's offset can be only determined before the actual float's |
| 76 // placement event. |
| 77 WTF::Optional<LayoutUnit> parent_bfc_block_offset; |
| 78 |
53 // Writing mode of the float's constraint space. | 79 // Writing mode of the float's constraint space. |
54 NGWritingMode writing_mode; | 80 NGWritingMode writing_mode; |
55 | 81 |
56 RefPtr<NGPhysicalFragment> fragment; | 82 RefPtr<NGPhysicalFragment> fragment; |
57 | 83 |
58 bool IsLeft() const { return exclusion_type == NGExclusion::kFloatLeft; } | 84 bool IsLeft() const { return exclusion_type == NGExclusion::kFloatLeft; } |
59 | 85 |
60 bool IsRight() const { return exclusion_type == NGExclusion::kFloatRight; } | 86 bool IsRight() const { return exclusion_type == NGExclusion::kFloatRight; } |
61 | 87 |
62 String ToString() const { | 88 String ToString() const { |
(...skipping 17 matching lines...) Expand all Loading... |
80 exclusion_type = NGExclusion::kFloatLeft; | 106 exclusion_type = NGExclusion::kFloatLeft; |
81 if (style.Floating() == EFloat::kRight) | 107 if (style.Floating() == EFloat::kRight) |
82 exclusion_type = NGExclusion::kFloatRight; | 108 exclusion_type = NGExclusion::kFloatRight; |
83 clear_type = style.Clear(); | 109 clear_type = style.Clear(); |
84 } | 110 } |
85 }; | 111 }; |
86 | 112 |
87 } // namespace blink | 113 } // namespace blink |
88 | 114 |
89 #endif // NGFloatingObject_h | 115 #endif // NGFloatingObject_h |
OLD | NEW |