diff --git a/Userland/Libraries/LibWeb/Painting/CanvasPaintable.cpp b/Userland/Libraries/LibWeb/Painting/CanvasPaintable.cpp index ea211666b1..8e7977f501 100644 --- a/Userland/Libraries/LibWeb/Painting/CanvasPaintable.cpp +++ b/Userland/Libraries/LibWeb/Painting/CanvasPaintable.cpp @@ -32,7 +32,7 @@ void CanvasPaintable::paint(PaintContext& context, PaintPhase phase) const if (phase == PaintPhase::Foreground) { auto canvas_rect = absolute_rect().to_rounded(); - ScopedCornerRadiusClip corner_clip { context.painter(), canvas_rect, normalized_border_radii_data() }; + ScopedCornerRadiusClip corner_clip { context.painter(), canvas_rect, normalized_border_radii_data(ShrinkRadiiForBorders::Yes) }; // FIXME: This should be done at a different level. Also rect() does not include padding etc! if (!context.viewport_rect().intersects(canvas_rect)) diff --git a/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp b/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp index 22ef7e7074..9b3feb84db 100644 --- a/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp +++ b/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp @@ -49,7 +49,7 @@ void ImagePaintable::paint(PaintContext& context, PaintPhase phase) const context.painter().draw_text(enclosing_int_rect(absolute_rect()), alt, Gfx::TextAlignment::Center, computed_values().color(), Gfx::TextElision::Right); } else if (auto bitmap = layout_box().image_loader().bitmap(layout_box().image_loader().current_frame_index())) { auto image_rect = absolute_rect().to_rounded(); - ScopedCornerRadiusClip corner_clip { context.painter(), image_rect, normalized_border_radii_data() }; + ScopedCornerRadiusClip corner_clip { context.painter(), image_rect, normalized_border_radii_data(ShrinkRadiiForBorders::Yes) }; context.painter().draw_scaled_bitmap(image_rect, *bitmap, bitmap->rect(), 1.0f, to_gfx_scaling_mode(computed_values().image_rendering())); } } diff --git a/Userland/Libraries/LibWeb/Painting/NestedBrowsingContextPaintable.cpp b/Userland/Libraries/LibWeb/Painting/NestedBrowsingContextPaintable.cpp index 0c18019e13..11da2020b0 100644 --- a/Userland/Libraries/LibWeb/Painting/NestedBrowsingContextPaintable.cpp +++ b/Userland/Libraries/LibWeb/Painting/NestedBrowsingContextPaintable.cpp @@ -34,7 +34,7 @@ void NestedBrowsingContextPaintable::paint(PaintContext& context, PaintPhase pha if (phase == PaintPhase::Foreground) { auto clip_rect = absolute_rect().to_rounded(); - ScopedCornerRadiusClip corner_clip { context.painter(), clip_rect, normalized_border_radii_data() }; + ScopedCornerRadiusClip corner_clip { context.painter(), clip_rect, normalized_border_radii_data(ShrinkRadiiForBorders::Yes) }; auto* hosted_document = layout_box().dom_node().content_document_without_origin_check(); if (!hosted_document) diff --git a/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp b/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp index b2450c97dc..f9074aa65d 100644 --- a/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp +++ b/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp @@ -234,13 +234,16 @@ void PaintableBox::paint_box_shadow(PaintContext& context) const Painting::paint_box_shadow(context, absolute_border_box_rect().to_rounded(), normalized_border_radii_data(), resolved_box_shadow_data); } -BorderRadiiData PaintableBox::normalized_border_radii_data() const +BorderRadiiData PaintableBox::normalized_border_radii_data(ShrinkRadiiForBorders shrink) const { - return Painting::normalized_border_radii_data(layout_box(), absolute_border_box_rect(), + auto border_radius_data = Painting::normalized_border_radii_data(layout_box(), absolute_border_box_rect(), computed_values().border_top_left_radius(), computed_values().border_top_right_radius(), computed_values().border_bottom_right_radius(), computed_values().border_bottom_left_radius()); + if (shrink == ShrinkRadiiForBorders::Yes) + border_radius_data.shrink(computed_values().border_top().width, computed_values().border_right().width, computed_values().border_bottom().width, computed_values().border_left().width); + return border_radius_data; } void PaintableBox::before_children_paint(PaintContext& context, PaintPhase phase) const @@ -265,9 +268,7 @@ void PaintableBox::before_children_paint(PaintContext& context, PaintPhase phase clip_overflow(); } if (overflow_y == CSS::Overflow::Hidden || overflow_x == CSS::Overflow::Hidden) { - auto border_radii_data = normalized_border_radii_data(); - auto const& border = box_model().border; - border_radii_data.shrink(border.top, border.right, border.bottom, border.left); + auto border_radii_data = normalized_border_radii_data(ShrinkRadiiForBorders::Yes); if (border_radii_data.has_any_radius()) { auto corner_clipper = BorderRadiusCornerClipper::create(clip_rect, border_radii_data, CornerClip::Outside, BorderRadiusCornerClipper::UseCachedBitmap::No); if (corner_clipper.is_error()) { @@ -464,7 +465,7 @@ void PaintableWithLines::paint(PaintContext& context, PaintPhase phase) const auto scroll_offset = static_cast(layout_box()).scroll_offset(); context.painter().translate(-scroll_offset.to_type()); - auto border_radii = normalized_border_radii_data(); + auto border_radii = normalized_border_radii_data(ShrinkRadiiForBorders::Yes); if (border_radii.has_any_radius()) { auto clipper = BorderRadiusCornerClipper::create(clip_box, border_radii); if (!clipper.is_error()) { diff --git a/Userland/Libraries/LibWeb/Painting/PaintableBox.h b/Userland/Libraries/LibWeb/Painting/PaintableBox.h index ce52126ad9..fbe163f890 100644 --- a/Userland/Libraries/LibWeb/Painting/PaintableBox.h +++ b/Userland/Libraries/LibWeb/Painting/PaintableBox.h @@ -123,7 +123,12 @@ protected: virtual Gfx::FloatRect compute_absolute_rect() const; - Painting::BorderRadiiData normalized_border_radii_data() const; + enum class ShrinkRadiiForBorders { + Yes, + No + }; + + Painting::BorderRadiiData normalized_border_radii_data(ShrinkRadiiForBorders shrink = ShrinkRadiiForBorders::No) const; private: Optional m_overflow_data;