1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 04:57:44 +00:00

LibWeb: Add 'inside' clip mode to BorderRadiusCornerClipper

The default clip mode 'outside' clips everything outside the corner,
'inside' does the opposite :^)
This commit is contained in:
MacDue 2022-06-20 12:10:24 +01:00 committed by Linus Groh
parent 08baeb1e7d
commit 13c4c735b8
2 changed files with 14 additions and 5 deletions

View file

@ -10,7 +10,7 @@
namespace Web::Painting {
ErrorOr<BorderRadiusCornerClipper> BorderRadiusCornerClipper::create(Gfx::IntRect const& border_rect, BorderRadiiData const& border_radii)
ErrorOr<BorderRadiusCornerClipper> BorderRadiusCornerClipper::create(Gfx::IntRect const& border_rect, BorderRadiiData const& border_radii, CornerClip corner_clip)
{
VERIFY(border_radii.has_any_radius());
@ -43,7 +43,7 @@ ErrorOr<BorderRadiusCornerClipper> BorderRadiusCornerClipper::create(Gfx::IntRec
.corner_bitmap_size = corners_bitmap_size
};
return BorderRadiusCornerClipper { corner_data, corner_bitmap.release_nonnull() };
return BorderRadiusCornerClipper { corner_data, corner_bitmap.release_nonnull(), corner_clip };
}
void BorderRadiusCornerClipper::sample_under_corners(Gfx::Painter& page_painter)
@ -60,7 +60,9 @@ void BorderRadiusCornerClipper::sample_under_corners(Gfx::Painter& page_painter)
for (int col = 0; col < mask_src.width(); ++col) {
auto corner_location = mask_src.location().translated(col, row);
auto mask_pixel = m_corner_bitmap->get_pixel(corner_location);
u8 mask_alpha = ~mask_pixel.alpha();
u8 mask_alpha = mask_pixel.alpha();
if (m_corner_clip == CornerClip::Outside)
mask_alpha = ~mask_pixel.alpha();
auto final_pixel = Color();
if (mask_alpha > 0) {
auto page_pixel = page_painter.get_pixel(page_location.translated(col, row));