summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMacDue <macdue@dueutil.tech>2022-07-04 20:43:40 +0100
committerAndreas Kling <kling@serenityos.org>2022-07-04 23:09:06 +0200
commit9a97adf121bd032bad11a7c659ca6763669b91a0 (patch)
tree9558118ae5238ec62626eeb41782151860b15677
parent13b4d91f66d1dce494d24ed08a845a5ca3060263 (diff)
downloadserenity-9a97adf121bd032bad11a7c659ca6763669b91a0.zip
LibWeb: Add option to allocate new bitmap for BorderRadiusCornerClipper
This will be needed for overflow: hidden, that clips things which may themselves use the BorderRadiusCornerClipper.
-rw-r--r--Userland/Libraries/LibWeb/Painting/BorderRadiusCornerClipper.cpp13
-rw-r--r--Userland/Libraries/LibWeb/Painting/BorderRadiusCornerClipper.h7
2 files changed, 15 insertions, 5 deletions
diff --git a/Userland/Libraries/LibWeb/Painting/BorderRadiusCornerClipper.cpp b/Userland/Libraries/LibWeb/Painting/BorderRadiusCornerClipper.cpp
index 6e73d7fa00..7b21ebe38c 100644
--- a/Userland/Libraries/LibWeb/Painting/BorderRadiusCornerClipper.cpp
+++ b/Userland/Libraries/LibWeb/Painting/BorderRadiusCornerClipper.cpp
@@ -10,7 +10,7 @@
namespace Web::Painting {
-ErrorOr<BorderRadiusCornerClipper> BorderRadiusCornerClipper::create(Gfx::IntRect const& border_rect, BorderRadiiData const& border_radii, CornerClip corner_clip)
+ErrorOr<BorderRadiusCornerClipper> BorderRadiusCornerClipper::create(Gfx::IntRect const& border_rect, BorderRadiiData const& border_radii, CornerClip corner_clip, UseCachedBitmap use_cached_bitmap)
{
VERIFY(border_radii.has_any_radius());
@@ -28,9 +28,14 @@ ErrorOr<BorderRadiusCornerClipper> BorderRadiusCornerClipper::create(Gfx::IntRec
top_right.vertical_radius + bottom_right.vertical_radius)
};
- auto corner_bitmap = get_cached_corner_bitmap(corners_bitmap_size);
- if (!corner_bitmap)
- return Error::from_errno(ENOMEM);
+ RefPtr<Gfx::Bitmap> corner_bitmap;
+ if (use_cached_bitmap == UseCachedBitmap::Yes) {
+ corner_bitmap = get_cached_corner_bitmap(corners_bitmap_size);
+ if (!corner_bitmap)
+ return Error::from_errno(ENOMEM);
+ } else {
+ corner_bitmap = TRY(Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, corners_bitmap_size));
+ }
CornerData corner_data {
.corner_radii = {
diff --git a/Userland/Libraries/LibWeb/Painting/BorderRadiusCornerClipper.h b/Userland/Libraries/LibWeb/Painting/BorderRadiusCornerClipper.h
index cdb8176503..c60cf747de 100644
--- a/Userland/Libraries/LibWeb/Painting/BorderRadiusCornerClipper.h
+++ b/Userland/Libraries/LibWeb/Painting/BorderRadiusCornerClipper.h
@@ -18,7 +18,12 @@ enum class CornerClip {
class BorderRadiusCornerClipper {
public:
- static ErrorOr<BorderRadiusCornerClipper> create(Gfx::IntRect const& border_rect, BorderRadiiData const& border_radii, CornerClip corner_clip = CornerClip::Outside);
+ enum class UseCachedBitmap {
+ Yes,
+ No
+ };
+
+ static ErrorOr<BorderRadiusCornerClipper> create(Gfx::IntRect const& border_rect, BorderRadiiData const& border_radii, CornerClip corner_clip = CornerClip::Outside, UseCachedBitmap use_cached_bitmap = UseCachedBitmap::Yes);
void sample_under_corners(Gfx::Painter& page_painter);
void blit_corner_clipping(Gfx::Painter& page_painter);