Index: third_party/WebKit/Source/core/layout/ng/ng_floating_object.h |
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_floating_object.h b/third_party/WebKit/Source/core/layout/ng/ng_floating_object.h |
index e601df3bad10c4581f2568aa275c0bd76c7b69b1..5eebf61ed30edc0c3d147a684aee8e807243c6e8 100644 |
--- a/third_party/WebKit/Source/core/layout/ng/ng_floating_object.h |
+++ b/third_party/WebKit/Source/core/layout/ng/ng_floating_object.h |
@@ -20,30 +20,39 @@ namespace blink { |
// Struct that keeps all information needed to position floats in LayoutNG. |
struct CORE_EXPORT NGFloatingObject : public RefCounted<NGFloatingObject> { |
public: |
- static RefPtr<NGFloatingObject> Create(const NGConstraintSpace* space, |
- const NGConstraintSpace* parent_space, |
- const ComputedStyle& style, |
- const NGBoxStrut& margins, |
- const NGLogicalSize& available_size, |
+ static RefPtr<NGFloatingObject> Create(const ComputedStyle& style, |
+ NGWritingMode writing_mode, |
+ NGLogicalSize available_size, |
+ NGLogicalOffset origin_offset, |
+ NGLogicalOffset from_offset, |
+ NGBoxStrut margins, |
NGPhysicalFragment* fragment) { |
- return adoptRef(new NGFloatingObject(space, parent_space, style, margins, |
- available_size, fragment)); |
+ return adoptRef(new NGFloatingObject(style, margins, available_size, |
+ origin_offset, from_offset, |
+ writing_mode, fragment)); |
} |
- // Original constraint space of the float. |
- RefPtr<const NGConstraintSpace> space; |
- |
- // Parent space is used so we can calculate the inline offset relative to |
- // the original parent of this float. |
- RefPtr<const NGConstraintSpace> original_parent_space; |
- |
NGExclusion::Type exclusion_type; |
EClear clear_type; |
NGBoxStrut margins; |
// Available size of the constraint space that will be used by |
- // NGLayoutOpportunityIterator to position this floaing object. |
+ // NGLayoutOpportunityIterator to position this floating object. |
NGLogicalSize available_size; |
+ // To correctly position a float we need 2 offsets: |
+ // - origin_offset which represents the layout point for this float. |
+ // - from_offset which represents the point from where we need to calculate |
+ // the relative logical offset for this float. |
+ // Layout details: |
+ // At the time when this float is created only *inline* offsets are known. |
+ // Block offset will be set when we are about to place this float, i.e. when |
+ // we resolved MarginStrut, adjusted the offset to clearance line etc. |
+ NGLogicalOffset origin_offset; |
+ NGLogicalOffset from_offset; |
+ |
+ // Writing mode of the float's constraint space. |
+ NGWritingMode writing_mode; |
+ |
RefPtr<NGPhysicalFragment> fragment; |
// In the case where a legacy FloatingObject is attached to not its own |
@@ -65,16 +74,18 @@ struct CORE_EXPORT NGFloatingObject : public RefCounted<NGFloatingObject> { |
} |
private: |
- NGFloatingObject(const NGConstraintSpace* space, |
- const NGConstraintSpace* parent_space, |
- const ComputedStyle& style, |
+ NGFloatingObject(const ComputedStyle& style, |
const NGBoxStrut& margins, |
const NGLogicalSize& available_size, |
+ const NGLogicalOffset& origin_offset, |
+ const NGLogicalOffset& from_offset, |
+ NGWritingMode writing_mode, |
NGPhysicalFragment* fragment) |
- : space(space), |
- original_parent_space(parent_space), |
- margins(margins), |
+ : margins(margins), |
available_size(available_size), |
+ origin_offset(origin_offset), |
+ from_offset(from_offset), |
+ writing_mode(writing_mode), |
fragment(fragment) { |
exclusion_type = NGExclusion::kFloatLeft; |
if (style.floating() == EFloat::kRight) |