LibWeb: Use correct coordinate space when measuring space between floats

When calculating how much space is available for inline content between
left and right floated elements, we have to use coordinates in the
containing block's coordinate space, since that's what floats use.

This fixes an issue where text would sometimes overlap floats.
This commit is contained in:
Andreas Kling 2022-02-21 20:40:55 +01:00
commit bb1f26c149
Notes: sideshowbarker 2024-07-17 18:25:06 +09:00

View file

@ -48,7 +48,7 @@ InlineFormattingContext::AvailableSpaceForLineInfo InlineFormattingContext::avai
for (ssize_t i = bfc.left_side_floats().boxes.size() - 1; i >= 0; --i) { for (ssize_t i = bfc.left_side_floats().boxes.size() - 1; i >= 0; --i) {
auto const& floating_box = bfc.left_side_floats().boxes.at(i); auto const& floating_box = bfc.left_side_floats().boxes.at(i);
auto rect = margin_box_rect(floating_box, m_state); auto rect = margin_box_rect_in_ancestor_coordinate_space(floating_box, parent().root(), m_state);
if (rect.contains_vertically(y_in_root)) { if (rect.contains_vertically(y_in_root)) {
info.left = rect.right() + 1; info.left = rect.right() + 1;
break; break;
@ -59,7 +59,7 @@ InlineFormattingContext::AvailableSpaceForLineInfo InlineFormattingContext::avai
for (ssize_t i = bfc.right_side_floats().boxes.size() - 1; i >= 0; --i) { for (ssize_t i = bfc.right_side_floats().boxes.size() - 1; i >= 0; --i) {
auto const& floating_box = bfc.right_side_floats().boxes.at(i); auto const& floating_box = bfc.right_side_floats().boxes.at(i);
auto rect = margin_box_rect(floating_box, m_state); auto rect = margin_box_rect_in_ancestor_coordinate_space(floating_box, parent().root(), m_state);
if (rect.contains_vertically(y_in_root)) { if (rect.contains_vertically(y_in_root)) {
info.right = rect.left() - 1; info.right = rect.left() - 1;
break; break;