diff --git a/Userland/Applications/PixelPaint/Filters/FastBoxBlur.cpp b/Userland/Applications/PixelPaint/Filters/FastBoxBlur.cpp index 4813a8de10..e12d15bf1a 100644 --- a/Userland/Applications/PixelPaint/Filters/FastBoxBlur.cpp +++ b/Userland/Applications/PixelPaint/Filters/FastBoxBlur.cpp @@ -14,15 +14,8 @@ namespace PixelPaint::Filters { -void FastBoxBlur::apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const +void FastBoxBlur::apply(Gfx::Bitmap& target_bitmap) const { - // This filter only works in-place, so if we have different target and source, we first copy over - // the source bitmap to the target one. - if (&target_bitmap != &source_bitmap) { - VERIFY(source_bitmap.size_in_bytes() == target_bitmap.size_in_bytes()); - memcpy(target_bitmap.scanline(0), source_bitmap.scanline(0), source_bitmap.size_in_bytes()); - } - Gfx::FastBoxBlurFilter filter(target_bitmap); if (m_use_asymmetric_radii) { diff --git a/Userland/Applications/PixelPaint/Filters/FastBoxBlur.h b/Userland/Applications/PixelPaint/Filters/FastBoxBlur.h index 85006620ad..c041c2213c 100644 --- a/Userland/Applications/PixelPaint/Filters/FastBoxBlur.h +++ b/Userland/Applications/PixelPaint/Filters/FastBoxBlur.h @@ -6,21 +6,21 @@ #pragma once -#include "Filter.h" +#include "InplaceFilter.h" #include #include namespace PixelPaint::Filters { -class FastBoxBlur final : public Filter { +class FastBoxBlur final : public InplaceFilter { public: - virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override; + virtual void apply(Gfx::Bitmap& target_bitmap) const override; virtual RefPtr get_settings_widget() override; virtual StringView filter_name() const override { return "Fast Box Blur (& Gauss)"sv; } FastBoxBlur(ImageEditor* editor) - : Filter(editor) {}; + : InplaceFilter(editor) {}; private: size_t m_radius { 5 }; diff --git a/Userland/Applications/PixelPaint/Filters/InplaceFilter.h b/Userland/Applications/PixelPaint/Filters/InplaceFilter.h new file mode 100644 index 0000000000..fd9ef94b76 --- /dev/null +++ b/Userland/Applications/PixelPaint/Filters/InplaceFilter.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022, MacDue + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include "Filter.h" + +namespace PixelPaint { + +class InplaceFilter : public Filter { +public: + using Filter::apply; + using Filter::Filter; + + virtual void apply(Gfx::Bitmap& target_bitmap) const = 0; + + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override + { + // This filter only works in-place, so if we have different target and source, we first copy over + // the source bitmap to the target one. + if (&target_bitmap != &source_bitmap) { + VERIFY(source_bitmap.size_in_bytes() == target_bitmap.size_in_bytes()); + memcpy(target_bitmap.scanline(0), source_bitmap.scanline(0), source_bitmap.size_in_bytes()); + } + apply(target_bitmap); + } +}; + +}