diff --git a/Userland/Libraries/LibWeb/HTML/Navigable.cpp b/Userland/Libraries/LibWeb/HTML/Navigable.cpp index 7f66f140ee..8f8bec3af0 100644 --- a/Userland/Libraries/LibWeb/HTML/Navigable.cpp +++ b/Userland/Libraries/LibWeb/HTML/Navigable.cpp @@ -2085,7 +2085,7 @@ void Navigable::paint(Painting::RecordingPainter& recording_painter, PaintConfig HashMap scroll_frames; if (is_traversable()) { document->paintable()->assign_scroll_frame_ids(scroll_frames); - document->paintable()->assign_clip_rectangles(context); + document->paintable()->assign_clip_rectangles(); } document->paintable()->paint_all_phases(context); diff --git a/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp b/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp index 1f691acd5c..eb2f4f5456 100644 --- a/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp +++ b/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp @@ -412,7 +412,9 @@ void PaintableBox::apply_clip_overflow_rect(PaintContext& context, PaintPhase ph if (m_corner_clip_radii.has_value()) { VERIFY(!m_corner_clipper_id.has_value()); m_corner_clipper_id = context.allocate_corner_clipper_id(); - context.recording_painter().sample_under_corners(*m_corner_clipper_id, *m_corner_clip_radii, context.rounded_device_rect(overflow_clip_rect).to_type(), CornerClip::Outside); + auto corner_radii = m_corner_clip_radii->as_corners(context); + if (corner_radii.has_any_radius()) + context.recording_painter().sample_under_corners(*m_corner_clipper_id, m_corner_clip_radii->as_corners(context), context.rounded_device_rect(overflow_clip_rect).to_type(), CornerClip::Outside); } } } @@ -426,7 +428,9 @@ void PaintableBox::clear_clip_overflow_rect(PaintContext& context, PaintPhase ph m_clipping_overflow = false; if (m_corner_clip_radii.has_value()) { VERIFY(m_corner_clipper_id.has_value()); - context.recording_painter().blit_corner_clipping(*m_corner_clipper_id, context.rounded_device_rect(*m_clip_rect).to_type()); + auto corner_radii = m_corner_clip_radii->as_corners(context); + if (corner_radii.has_any_radius()) + context.recording_painter().blit_corner_clipping(*m_corner_clipper_id, context.rounded_device_rect(*m_clip_rect).to_type()); m_corner_clipper_id = {}; } context.recording_painter().restore(); diff --git a/Userland/Libraries/LibWeb/Painting/PaintableBox.h b/Userland/Libraries/LibWeb/Painting/PaintableBox.h index f84c939724..b9dc4b2cb9 100644 --- a/Userland/Libraries/LibWeb/Painting/PaintableBox.h +++ b/Userland/Libraries/LibWeb/Painting/PaintableBox.h @@ -196,7 +196,7 @@ public: void set_clip_rect(Optional rect) { m_clip_rect = rect; } void set_scroll_frame_id(int id) { m_scroll_frame_id = id; } void set_enclosing_scroll_frame_offset(CSSPixelPoint offset) { m_enclosing_scroll_frame_offset = offset; } - void set_corner_clip_radii(CornerRadii const& corner_radii) { m_corner_clip_radii = corner_radii; } + void set_corner_clip_radii(BorderRadiiData const& corner_radii) { m_corner_clip_radii = corner_radii; } protected: explicit PaintableBox(Layout::Box const&); @@ -228,7 +228,7 @@ private: Optional m_clip_rect; Optional m_scroll_frame_id; Optional m_enclosing_scroll_frame_offset; - Optional m_corner_clip_radii; + Optional m_corner_clip_radii; Optional m_override_borders_data; Optional m_table_cell_coordinates; diff --git a/Userland/Libraries/LibWeb/Painting/ViewportPaintable.cpp b/Userland/Libraries/LibWeb/Painting/ViewportPaintable.cpp index 5c234e79f1..c7bd5df984 100644 --- a/Userland/Libraries/LibWeb/Painting/ViewportPaintable.cpp +++ b/Userland/Libraries/LibWeb/Painting/ViewportPaintable.cpp @@ -95,7 +95,7 @@ void ViewportPaintable::assign_scroll_frame_ids(HashMap clip_rects; // Calculate clip rects for all boxes that either have hidden overflow or a CSS clip property. @@ -129,10 +129,9 @@ void ViewportPaintable::assign_clip_rectangles(PaintContext const& context) for (auto block = paintable_box.containing_block(); block; block = block->containing_block()) { if (auto containing_block_clip_rect = clip_rects.get(block->paintable()); containing_block_clip_rect.has_value()) { auto border_radii_data = block->paintable_box()->normalized_border_radii_data(ShrinkRadiiForBorders::Yes); - CornerRadii corner_radii = border_radii_data.as_corners(context); - if (corner_radii.has_any_radius()) { + if (border_radii_data.has_any_radius()) { // FIXME: Border radii of all boxes in containing block chain should be taken into account instead of just the closest one. - const_cast(paintable_box).set_corner_clip_radii(corner_radii); + const_cast(paintable_box).set_corner_clip_radii(border_radii_data); } clip_rect = *containing_block_clip_rect; break; diff --git a/Userland/Libraries/LibWeb/Painting/ViewportPaintable.h b/Userland/Libraries/LibWeb/Painting/ViewportPaintable.h index 96b0f30c28..53d10ab12f 100644 --- a/Userland/Libraries/LibWeb/Painting/ViewportPaintable.h +++ b/Userland/Libraries/LibWeb/Painting/ViewportPaintable.h @@ -25,7 +25,7 @@ public: CSSPixelPoint offset; }; void assign_scroll_frame_ids(HashMap&) const; - void assign_clip_rectangles(PaintContext const&); + void assign_clip_rectangles(); private: void build_stacking_context_tree();