浏览代码

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.
Aliaksandr Kalenik 9 月之前
父节点
当前提交
a499ece16c

+ 3 - 1
Userland/Libraries/LibGfx/ImageFormats/GIFLoader.cpp

@@ -16,6 +16,7 @@
 #include <AK/Try.h>
 #include <AK/Try.h>
 #include <LibCompress/Lzw.h>
 #include <LibCompress/Lzw.h>
 #include <LibGfx/ImageFormats/GIFLoader.h>
 #include <LibGfx/ImageFormats/GIFLoader.h>
+#include <LibGfx/Painter.h>
 #include <string.h>
 #include <string.h>
 
 
 namespace Gfx {
 namespace Gfx {
@@ -159,7 +160,8 @@ static ErrorOr<void> 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;
         auto const previous_image_disposal_method = i > 0 ? context.images.at(i - 1)->disposal_method : GIFImageDescriptor::DisposalMethod::None;
 
 
         if (i == 0) {
         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<float>(), Color::Transparent);
         } else if (i > 0 && image->disposal_method == GIFImageDescriptor::DisposalMethod::RestorePrevious
         } else if (i > 0 && image->disposal_method == GIFImageDescriptor::DisposalMethod::RestorePrevious
             && previous_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
             // This marks the start of a run of frames that once disposed should be restored to the

+ 3 - 2
Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp

@@ -385,8 +385,9 @@ void CanvasRenderingContext2D::reset_to_default_state()
     auto* bitmap = canvas_element().bitmap();
     auto* bitmap = canvas_element().bitmap();
 
 
     // 1. Clear canvas's bitmap to transparent black.
     // 1. Clear canvas's bitmap to transparent black.
-    if (bitmap)
-        bitmap->fill(Gfx::Color::Transparent);
+    if (bitmap) {
+        painter()->clear_rect(bitmap->rect().to_type<float>(), Color::Transparent);
+    }
 
 
     // 2. Empty the list of subpaths in context's current default path.
     // 2. Empty the list of subpaths in context's current default path.
     path().clear();
     path().clear();