diff --git a/Userland/Libraries/LibWeb/Painting/ViewportPaintable.cpp b/Userland/Libraries/LibWeb/Painting/ViewportPaintable.cpp index 5afd9e876ff..957c369abdc 100644 --- a/Userland/Libraries/LibWeb/Painting/ViewportPaintable.cpp +++ b/Userland/Libraries/LibWeb/Painting/ViewportPaintable.cpp @@ -156,9 +156,16 @@ void ViewportPaintable::refresh_clip_state() // Start from CSS clip property if it exists. Optional clip_rect = paintable_box.get_clip_rect(); + auto add_border_radii_clip = [&](auto rect, auto border_radii_data) { + if (border_radii_data.has_any_radius()) { + BorderRadiiClip border_radii_clip { .rect = rect, .radii = border_radii_data }; + clip_frame.add_border_radii_clip(border_radii_clip); + } + }; clip_frame.clear_border_radii_clips(); if (overflow_x != CSS::Overflow::Visible && overflow_y != CSS::Overflow::Visible) { auto overflow_clip_rect = paintable_box.compute_absolute_padding_rect_with_css_transform_applied(); + add_border_radii_clip(overflow_clip_rect, paintable_box.normalized_border_radii_data(ShrinkRadiiForBorders::Yes)); for (auto const* block = &paintable_box.layout_box(); !block->is_viewport(); block = block->containing_block()) { auto const& block_paintable_box = *block->paintable_box(); auto block_overflow_x = block_paintable_box.computed_values().overflow_x(); @@ -166,11 +173,7 @@ void ViewportPaintable::refresh_clip_state() if (block_overflow_x != CSS::Overflow::Visible && block_overflow_y != CSS::Overflow::Visible) { auto rect = block_paintable_box.compute_absolute_padding_rect_with_css_transform_applied(); overflow_clip_rect.intersect(rect); - auto border_radii_data = block_paintable_box.normalized_border_radii_data(ShrinkRadiiForBorders::Yes); - if (border_radii_data.has_any_radius()) { - BorderRadiiClip border_radii_clip { .rect = rect, .radii = border_radii_data }; - clip_frame.add_border_radii_clip(border_radii_clip); - } + add_border_radii_clip(rect, block_paintable_box.normalized_border_radii_data(ShrinkRadiiForBorders::Yes)); } if (auto css_clip_property_rect = block->paintable_box()->get_clip_rect(); css_clip_property_rect.has_value()) overflow_clip_rect.intersect(css_clip_property_rect.value());