From 4d110c39f3dc4f1fa4ba43980bbe2f7b3dd8160e Mon Sep 17 00:00:00 2001 From: MacDue Date: Wed, 15 Jun 2022 21:29:55 +0100 Subject: [PATCH] LibWeb: Support using border-radius on tags --- .../LibWeb/Painting/ImagePaintable.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp b/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp index 8fde403e76..d29e4a657a 100644 --- a/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp +++ b/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include namespace Web::Painting { @@ -47,7 +48,23 @@ void ImagePaintable::paint(PaintContext& context, PaintPhase phase) const alt = image_element.src(); 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())) { - context.painter().draw_scaled_bitmap(absolute_rect().to_rounded(), *bitmap, bitmap->rect(), 1.0f, to_gfx_scaling_mode(computed_values().image_rendering())); + auto image_rect = absolute_rect().to_rounded(); + auto border_radii_data = normalized_border_radii_data(); + + Optional corner_clipper; + if (border_radii_data.has_any_radius()) { + auto clipper = BorderRadiusCornerClipper::create(image_rect, border_radii_data); + if (!clipper.is_error()) + corner_clipper = clipper.release_value(); + } + + if (corner_clipper.has_value()) + corner_clipper->sample_under_corners(context.painter()); + + context.painter().draw_scaled_bitmap(image_rect, *bitmap, bitmap->rect(), 1.0f, to_gfx_scaling_mode(computed_values().image_rendering())); + + if (corner_clipper.has_value()) + corner_clipper->blit_corner_clipping(context.painter()); } } }