diff options
author | Andreas Kling <kling@serenityos.org> | 2023-06-04 12:55:55 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2023-06-04 18:14:12 +0200 |
commit | 89ba00304ce8c022b7cdd47be16759bf8dc008b4 (patch) | |
tree | 39dbdd772d9389b2194147c617d5bc30e5c00f93 /Userland/Libraries/LibWeb | |
parent | 0e5ec8c0ab8594602fd226c9b96a64556417445b (diff) | |
download | serenity-89ba00304ce8c022b7cdd47be16759bf8dc008b4.zip |
LibWeb: Account for negative margins when calculating float intrusion
If a box has a negative margin-left, it may have a negative effective
offset within its parent BFC root coordinate system.
We can account for this when calculating the amount of left-side float
intrusion by flooring the X offset at 0.
Diffstat (limited to 'Userland/Libraries/LibWeb')
-rw-r--r-- | Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp | 2 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/Layout/InlineFormattingContext.cpp | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp index 17961989c1..e362008da1 100644 --- a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp @@ -1066,7 +1066,7 @@ FormattingContext::SpaceUsedByFloats BlockFormattingContext::intrusion_by_floats CSSPixels y_in_root = box_in_root_rect.y() + y_in_box; auto space_used_by_floats_in_root = space_used_by_floats(y_in_root); - auto left_intrusion = max(CSSPixels(0), space_used_by_floats_in_root.left - box_in_root_rect.x()); + auto left_intrusion = max(CSSPixels(0), space_used_by_floats_in_root.left - max(CSSPixels(0), box_in_root_rect.x())); CSSPixels offset_from_containing_block_chain_margins_between_here_and_root = 0; for (auto const* containing_block = static_cast<Box const*>(&box); containing_block && containing_block != &root(); containing_block = containing_block->containing_block()) { diff --git a/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.cpp index 5284d433c0..3dd30d58f6 100644 --- a/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.cpp @@ -51,7 +51,7 @@ CSSPixels InlineFormattingContext::leftmost_x_offset_at(CSSPixels y) const } // The left edge of the containing block is to the left of the rightmost left-side float. // We adjust the inline content insertion point by the overlap between the containing block and the float. - return space.left - box_in_root_rect.x(); + return space.left - max(CSSPixels(0), box_in_root_rect.x()); } CSSPixels InlineFormattingContext::available_space_for_line(CSSPixels y) const |