diff --git a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp index 3eae69c6964bd9..b3b5b4fa22d422 100644 --- a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp @@ -815,29 +815,7 @@ void BlockFormattingContext::resolve_vertical_box_model_metrics(Box const& box) CSSPixels BlockFormattingContext::BlockMarginState::current_collapsed_margin() const { - CSSPixels smallest_margin = 0; - CSSPixels largest_margin = 0; - size_t negative_margin_count = 0; - for (auto margin : current_collapsible_margins) { - if (margin < 0) - ++negative_margin_count; - largest_margin = max(largest_margin, margin); - smallest_margin = min(smallest_margin, margin); - } - - CSSPixels collapsed_margin = 0; - if (negative_margin_count == current_collapsible_margins.size()) { - // When all margins are negative, the size of the collapsed margin is the smallest (most negative) margin. - collapsed_margin = smallest_margin; - } else if (negative_margin_count > 0) { - // When negative margins are involved, the size of the collapsed margin is the sum of the largest positive margin and the smallest (most negative) negative margin. - collapsed_margin = largest_margin + smallest_margin; - } else { - // Otherwise, collapse all the adjacent margins by using only the largest one. - collapsed_margin = largest_margin; - } - - return collapsed_margin; + return current_positive_collapsible_margin + current_negative_collapsible_margin; } BlockFormattingContext::DidIntroduceClearance BlockFormattingContext::clear_floating_boxes(Node const& child_box, Optional inline_formatting_context) diff --git a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.h b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.h index 9d34d8a91647af..1f093f435a4732 100644 --- a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.h +++ b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.h @@ -128,13 +128,18 @@ class BlockFormattingContext : public FormattingContext { }; struct BlockMarginState { - Vector current_collapsible_margins; + CSSPixels current_positive_collapsible_margin; + CSSPixels current_negative_collapsible_margin; Function block_container_y_position_update_callback; bool box_last_in_flow_child_margin_bottom_collapsed { false }; void add_margin(CSSPixels margin) { - current_collapsible_margins.append(margin); + if (margin < 0) { + current_negative_collapsible_margin = min(margin, current_negative_collapsible_margin); + } else { + current_positive_collapsible_margin = max(margin, current_positive_collapsible_margin); + } } void register_block_container_y_position_update_callback(ESCAPING Function callback) @@ -160,7 +165,8 @@ class BlockFormattingContext : public FormattingContext { void reset() { block_container_y_position_update_callback = {}; - current_collapsible_margins.clear(); + current_negative_collapsible_margin = 0; + current_positive_collapsible_margin = 0; } };