From 3e6ca1085c3f1342b1309d6c3097deeceab6acb1 Mon Sep 17 00:00:00 2001 From: MacDue Date: Sat, 29 Jul 2023 19:33:53 +0100 Subject: [PATCH] LibGfx: Add apply_alpha option to Painter::blit_filtered() --- Userland/Libraries/LibGfx/Painter.cpp | 6 +++--- Userland/Libraries/LibGfx/Painter.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibGfx/Painter.cpp b/Userland/Libraries/LibGfx/Painter.cpp index 79d6b4392c..d9806532af 100644 --- a/Userland/Libraries/LibGfx/Painter.cpp +++ b/Userland/Libraries/LibGfx/Painter.cpp @@ -934,7 +934,7 @@ void Painter::blit_with_opacity(IntPoint position, Gfx::Bitmap const& source, In } } -void Painter::blit_filtered(IntPoint position, Gfx::Bitmap const& source, IntRect const& src_rect, Function const& filter) +void Painter::blit_filtered(IntPoint position, Gfx::Bitmap const& source, IntRect const& src_rect, Function const& filter, bool apply_alpha) { VERIFY((source.scale() == 1 || source.scale() == scale()) && "blit_filtered only supports integer upsampling"); @@ -969,7 +969,7 @@ void Painter::blit_filtered(IntPoint position, Gfx::Bitmap const& source, IntRec if (source_color.alpha() == 0) continue; auto filtered_color = filter(source_color); - if (filtered_color.alpha() == 0xff) + if (!apply_alpha || filtered_color.alpha() == 0xff) dst[x] = filtered_color.value(); else dst[x] = color_for_format(dst_format, dst[x]).blend(filtered_color).value(); @@ -985,7 +985,7 @@ void Painter::blit_filtered(IntPoint position, Gfx::Bitmap const& source, IntRec if (source_color.alpha() == 0) continue; auto filtered_color = filter(source_color); - if (filtered_color.alpha() == 0xff) + if (!apply_alpha || filtered_color.alpha() == 0xff) dst[x] = filtered_color.value(); else dst[x] = color_for_format(dst_format, dst[x]).blend(filtered_color).value(); diff --git a/Userland/Libraries/LibGfx/Painter.h b/Userland/Libraries/LibGfx/Painter.h index 90f60d1e2a..8fd3621d29 100644 --- a/Userland/Libraries/LibGfx/Painter.h +++ b/Userland/Libraries/LibGfx/Painter.h @@ -84,7 +84,7 @@ public: void blit(IntPoint, Gfx::Bitmap const&, IntRect const& src_rect, float opacity = 1.0f, bool apply_alpha = true); void blit_dimmed(IntPoint, Gfx::Bitmap const&, IntRect const& src_rect); void blit_brightened(IntPoint, Gfx::Bitmap const&, IntRect const& src_rect); - void blit_filtered(IntPoint, Gfx::Bitmap const&, IntRect const& src_rect, Function const&); + void blit_filtered(IntPoint, Gfx::Bitmap const&, IntRect const& src_rect, Function const&, bool apply_alpha = true); void draw_tiled_bitmap(IntRect const& dst_rect, Gfx::Bitmap const&); void blit_offset(IntPoint, Gfx::Bitmap const&, IntRect const& src_rect, IntPoint); void blit_disabled(IntPoint, Gfx::Bitmap const&, IntRect const&, Palette const&);