From 0be57df54dd57d1544eead1c1bc8fe117c0a3450 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Fri, 19 Jul 2024 13:58:59 +0200 Subject: [PATCH] LibWeb: Subtract left inset from size_available_for_margins for abspos Fixes https://github.com/LadybirdBrowser/ladybird/issues/712 --- .../abspos-with-insets-and-auto-margins.txt | 15 +++++++++++++++ .../abspos-with-insets-and-auto-margins.html | 18 ++++++++++++++++++ .../LibWeb/Layout/FormattingContext.cpp | 2 +- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 Tests/LibWeb/Layout/expected/block-and-inline/abspos-with-insets-and-auto-margins.txt create mode 100644 Tests/LibWeb/Layout/input/block-and-inline/abspos-with-insets-and-auto-margins.html diff --git a/Tests/LibWeb/Layout/expected/block-and-inline/abspos-with-insets-and-auto-margins.txt b/Tests/LibWeb/Layout/expected/block-and-inline/abspos-with-insets-and-auto-margins.txt new file mode 100644 index 00000000000..6449a0f5de2 --- /dev/null +++ b/Tests/LibWeb/Layout/expected/block-and-inline/abspos-with-insets-and-auto-margins.txt @@ -0,0 +1,15 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (0,0) content-size 800x418 [BFC] children: not-inline + BlockContainer at (8,8) content-size 784x402 children: not-inline + BlockContainer at (9,9) content-size 400x400 positioned children: not-inline + BlockContainer at (109,10) content-size 200x200 positioned [BFC] children: inline + frag 0 from TextNode start: 0, length: 11, rect: [109,10 102.625x17] baseline: 13.296875 + "Autocorrect" + TextNode <#text> + +ViewportPaintable (Viewport<#document>) [0,0 800x600] + PaintableWithLines (BlockContainer) [0,0 800x418] + PaintableWithLines (BlockContainer) [8,8 784x402] + PaintableWithLines (BlockContainer
.features-list) [8,8 402x402] + PaintableWithLines (BlockContainer
.feature) [108,9 202x202] + TextPaintable (TextNode<#text>) diff --git a/Tests/LibWeb/Layout/input/block-and-inline/abspos-with-insets-and-auto-margins.html b/Tests/LibWeb/Layout/input/block-and-inline/abspos-with-insets-and-auto-margins.html new file mode 100644 index 00000000000..a3ae420f4f8 --- /dev/null +++ b/Tests/LibWeb/Layout/input/block-and-inline/abspos-with-insets-and-auto-margins.html @@ -0,0 +1,18 @@ +
Autocorrect
\ No newline at end of file diff --git a/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp index 4efe4baf31c..a811027560e 100644 --- a/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp @@ -726,7 +726,7 @@ void FormattingContext::compute_width_for_absolutely_positioned_non_replaced_ele // If both margin-left and margin-right are auto, // solve the equation under the extra constraint that the two margins get equal values // FIXME: unless this would make them negative, in which case when direction of the containing block is ltr (rtl), set margin-left (margin-right) to 0 and solve for margin-right (margin-left). - auto size_available_for_margins = width_of_containing_block - border_left - padding_left - width.to_px(box) - padding_right - border_right - right; + auto size_available_for_margins = width_of_containing_block - border_left - padding_left - width.to_px(box) - padding_right - border_right - left - right; if (margin_left.is_auto() && margin_right.is_auto()) { margin_left = CSS::Length::make_px(size_available_for_margins / 2); margin_right = CSS::Length::make_px(size_available_for_margins / 2);