1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 13:47:35 +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

@ -11,9 +11,14 @@
namespace Web::Painting {
enum class CornerClip {
Outside,
Inside
};
class BorderRadiusCornerClipper {
public:
static ErrorOr<BorderRadiusCornerClipper> create(Gfx::IntRect const& border_rect, BorderRadiiData const& border_radii);
static ErrorOr<BorderRadiusCornerClipper> create(Gfx::IntRect const& border_rect, BorderRadiiData const& border_radii, CornerClip corner_clip = CornerClip::Outside);
void sample_under_corners(Gfx::Painter& page_painter);
void blit_corner_clipping(Gfx::Painter& page_painter);
@ -40,10 +45,12 @@ private:
NonnullRefPtr<Gfx::Bitmap> m_corner_bitmap;
bool m_has_sampled { false };
CornerClip m_corner_clip { false };
BorderRadiusCornerClipper(CornerData corner_data, NonnullRefPtr<Gfx::Bitmap> corner_bitmap)
BorderRadiusCornerClipper(CornerData corner_data, NonnullRefPtr<Gfx::Bitmap> corner_bitmap, CornerClip corner_clip)
: m_data(move(corner_data))
, m_corner_bitmap(corner_bitmap)
, m_corner_clip(corner_clip)
{
}
};