From a499ece16ca32fb712f6a41c657e981a54451f79 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Wed, 18 Sep 2024 18:58:20 +0200 Subject: [PATCH] LibGfx+LibWeb: Replace usages of Bitmap::fill() with Gfx::Painter Let's always mutate a bitmap using painter, because Skia likely could do it faster than our own implementation. --- Userland/Libraries/LibGfx/ImageFormats/GIFLoader.cpp | 4 +++- Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibGfx/ImageFormats/GIFLoader.cpp b/Userland/Libraries/LibGfx/ImageFormats/GIFLoader.cpp index 5ffacd515d4..c05e41e730e 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/GIFLoader.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/GIFLoader.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include namespace Gfx { @@ -159,7 +160,8 @@ static ErrorOr decode_frame(GIFLoadingContext& context, size_t frame_index auto const previous_image_disposal_method = i > 0 ? context.images.at(i - 1)->disposal_method : GIFImageDescriptor::DisposalMethod::None; if (i == 0) { - context.frame_buffer->fill(Color::Transparent); + auto painter = Gfx::Painter::create(*context.frame_buffer); + painter->clear_rect(context.frame_buffer->rect().to_type(), Color::Transparent); } else if (i > 0 && image->disposal_method == GIFImageDescriptor::DisposalMethod::RestorePrevious && previous_image_disposal_method != GIFImageDescriptor::DisposalMethod::RestorePrevious) { // This marks the start of a run of frames that once disposed should be restored to the diff --git a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp index 17470ee4c9f..50efb1af8a5 100644 --- a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp +++ b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp @@ -385,8 +385,9 @@ void CanvasRenderingContext2D::reset_to_default_state() auto* bitmap = canvas_element().bitmap(); // 1. Clear canvas's bitmap to transparent black. - if (bitmap) - bitmap->fill(Gfx::Color::Transparent); + if (bitmap) { + painter()->clear_rect(bitmap->rect().to_type(), Color::Transparent); + } // 2. Empty the list of subpaths in context's current default path. path().clear();