diff --git a/Userland/Applications/PixelPaint/Filters/Bloom.cpp b/Userland/Applications/PixelPaint/Filters/Bloom.cpp index f20cbd8695..3c1ec93674 100644 --- a/Userland/Applications/PixelPaint/Filters/Bloom.cpp +++ b/Userland/Applications/PixelPaint/Filters/Bloom.cpp @@ -16,27 +16,24 @@ namespace PixelPaint::Filters { -void Bloom::apply() const +void Bloom::apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const { - if (!m_editor) + auto intermediate_bitmap_or_error = source_bitmap.clone(); + if (intermediate_bitmap_or_error.is_error()) return; - if (auto* layer = m_editor->active_layer()) { - auto intermediate_bitmap_or_error = layer->bitmap().clone(); - if (intermediate_bitmap_or_error.is_error()) - return; - auto intermediate_bitmap = intermediate_bitmap_or_error.release_value(); + auto intermediate_bitmap = intermediate_bitmap_or_error.release_value(); - Gfx::LumaFilter luma_filter(intermediate_bitmap); - luma_filter.apply(m_luma_lower, 255); + Gfx::LumaFilter luma_filter(intermediate_bitmap); + luma_filter.apply(m_luma_lower, 255); - Gfx::FastBoxBlurFilter blur_filter(intermediate_bitmap); - blur_filter.apply_three_passes(m_blur_radius); + Gfx::FastBoxBlurFilter blur_filter(intermediate_bitmap); + blur_filter.apply_three_passes(m_blur_radius); - Gfx::BitmapMixer mixer(layer->bitmap()); - mixer.mix_with(intermediate_bitmap, Gfx::BitmapMixer::MixingMethod::Lightest); - } + Gfx::BitmapMixer mixer(target_bitmap); + mixer.mix_with(intermediate_bitmap, Gfx::BitmapMixer::MixingMethod::Lightest); } + RefPtr Bloom::get_settings_widget() { if (!m_settings_widget) { diff --git a/Userland/Applications/PixelPaint/Filters/Bloom.h b/Userland/Applications/PixelPaint/Filters/Bloom.h index a9ce73e25a..44a6f4d591 100644 --- a/Userland/Applications/PixelPaint/Filters/Bloom.h +++ b/Userland/Applications/PixelPaint/Filters/Bloom.h @@ -12,7 +12,8 @@ namespace PixelPaint::Filters { class Bloom final : public Filter { public: - virtual void apply() const override; + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override; + virtual RefPtr get_settings_widget() override; virtual StringView filter_name() override { return "Bloom Filter"sv; } diff --git a/Userland/Applications/PixelPaint/Filters/BoxBlur3.cpp b/Userland/Applications/PixelPaint/Filters/BoxBlur3.cpp index 51aa454110..596e6819e2 100644 --- a/Userland/Applications/PixelPaint/Filters/BoxBlur3.cpp +++ b/Userland/Applications/PixelPaint/Filters/BoxBlur3.cpp @@ -9,18 +9,11 @@ namespace PixelPaint::Filters { -void BoxBlur3::apply() const +void BoxBlur3::apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const { - if (!m_editor) - return; - if (auto* layer = m_editor->active_layer()) { - Gfx::BoxBlurFilter<3> filter; - if (auto parameters = PixelPaint::FilterParameters>::get()) { - filter.apply(layer->bitmap(), layer->rect(), layer->bitmap(), layer->rect(), *parameters); - layer->did_modify_bitmap(layer->rect()); - m_editor->did_complete_action(); - } - } + Gfx::BoxBlurFilter<3> filter; + if (auto parameters = PixelPaint::FilterParameters>::get()) + filter.apply(target_bitmap, target_bitmap.rect(), source_bitmap, source_bitmap.rect(), *parameters); } } diff --git a/Userland/Applications/PixelPaint/Filters/BoxBlur3.h b/Userland/Applications/PixelPaint/Filters/BoxBlur3.h index 1038a6307c..5ec243baa9 100644 --- a/Userland/Applications/PixelPaint/Filters/BoxBlur3.h +++ b/Userland/Applications/PixelPaint/Filters/BoxBlur3.h @@ -12,7 +12,7 @@ namespace PixelPaint::Filters { class BoxBlur3 final : public Filter { public: - virtual void apply() const override; + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override; virtual StringView filter_name() override { return "Box Blur (3x3)"sv; } BoxBlur3(ImageEditor* editor) diff --git a/Userland/Applications/PixelPaint/Filters/BoxBlur5.cpp b/Userland/Applications/PixelPaint/Filters/BoxBlur5.cpp index e757925cd3..844aa3d37d 100644 --- a/Userland/Applications/PixelPaint/Filters/BoxBlur5.cpp +++ b/Userland/Applications/PixelPaint/Filters/BoxBlur5.cpp @@ -9,18 +9,11 @@ namespace PixelPaint::Filters { -void BoxBlur5::apply() const +void BoxBlur5::apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const { - if (!m_editor) - return; - if (auto* layer = m_editor->active_layer()) { - Gfx::BoxBlurFilter<5> filter; - if (auto parameters = PixelPaint::FilterParameters>::get()) { - filter.apply(layer->bitmap(), layer->rect(), layer->bitmap(), layer->rect(), *parameters); - layer->did_modify_bitmap(layer->rect()); - m_editor->did_complete_action(); - } - } + Gfx::BoxBlurFilter<5> filter; + if (auto parameters = PixelPaint::FilterParameters>::get()) + filter.apply(target_bitmap, target_bitmap.rect(), source_bitmap, source_bitmap.rect(), *parameters); } } diff --git a/Userland/Applications/PixelPaint/Filters/BoxBlur5.h b/Userland/Applications/PixelPaint/Filters/BoxBlur5.h index f34acdc4f0..e1b1482909 100644 --- a/Userland/Applications/PixelPaint/Filters/BoxBlur5.h +++ b/Userland/Applications/PixelPaint/Filters/BoxBlur5.h @@ -12,7 +12,7 @@ namespace PixelPaint::Filters { class BoxBlur5 final : public Filter { public: - virtual void apply() const override; + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override; virtual StringView filter_name() override { return "Box Blur (5x5)"sv; } BoxBlur5(ImageEditor* editor) diff --git a/Userland/Applications/PixelPaint/Filters/FastBoxBlur.cpp b/Userland/Applications/PixelPaint/Filters/FastBoxBlur.cpp index 9eae3fc626..9375b487fa 100644 --- a/Userland/Applications/PixelPaint/Filters/FastBoxBlur.cpp +++ b/Userland/Applications/PixelPaint/Filters/FastBoxBlur.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2022, Tobias Christiansen + * Copyright (c) 2022, Mustafa Quraish * * SPDX-License-Identifier: BSD-2-Clause */ @@ -12,21 +13,20 @@ namespace PixelPaint::Filters { -void FastBoxBlur::apply() const +void FastBoxBlur::apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const { - if (!m_editor) - return; - if (auto* layer = m_editor->active_layer()) { - Gfx::FastBoxBlurFilter filter(layer->bitmap()); - - if (m_approximate_gauss) - filter.apply_three_passes(m_radius); - else - filter.apply_single_pass(m_radius); - - layer->did_modify_bitmap(layer->rect()); - m_editor->did_complete_action(); + // 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_approximate_gauss) + filter.apply_three_passes(m_radius); + else + filter.apply_single_pass(m_radius); } RefPtr FastBoxBlur::get_settings_widget() diff --git a/Userland/Applications/PixelPaint/Filters/FastBoxBlur.h b/Userland/Applications/PixelPaint/Filters/FastBoxBlur.h index 89b4cdd666..cd29addbad 100644 --- a/Userland/Applications/PixelPaint/Filters/FastBoxBlur.h +++ b/Userland/Applications/PixelPaint/Filters/FastBoxBlur.h @@ -12,7 +12,7 @@ namespace PixelPaint::Filters { class FastBoxBlur final : public Filter { public: - virtual void apply() const override; + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override; virtual RefPtr get_settings_widget() override; virtual StringView filter_name() override { return "Fast Box Blur (& Gauss)"sv; } diff --git a/Userland/Applications/PixelPaint/Filters/Filter.cpp b/Userland/Applications/PixelPaint/Filters/Filter.cpp index 568a80403d..a7dcfa5058 100644 --- a/Userland/Applications/PixelPaint/Filters/Filter.cpp +++ b/Userland/Applications/PixelPaint/Filters/Filter.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2022, Tobias Christiansen + * Copyright (c) 2022, Mustafa Quraish * * SPDX-License-Identifier: BSD-2-Clause */ @@ -25,4 +26,15 @@ RefPtr Filter::get_settings_widget() return m_settings_widget.ptr(); } +void Filter::apply() const +{ + if (!m_editor) + return; + if (auto* layer = m_editor->active_layer()) { + apply(layer->bitmap(), layer->bitmap()); + layer->did_modify_bitmap(layer->rect()); + m_editor->did_complete_action(); + } +} + } diff --git a/Userland/Applications/PixelPaint/Filters/Filter.h b/Userland/Applications/PixelPaint/Filters/Filter.h index 4add775e68..7752c931ad 100644 --- a/Userland/Applications/PixelPaint/Filters/Filter.h +++ b/Userland/Applications/PixelPaint/Filters/Filter.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2022, Tobias Christiansen + * Copyright (c) 2022, Mustafa Quraish * * SPDX-License-Identifier: BSD-2-Clause */ @@ -14,7 +15,9 @@ namespace PixelPaint { class Filter { public: - virtual void apply() const = 0; + virtual void apply() const; + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const = 0; + virtual RefPtr get_settings_widget(); virtual StringView filter_name() = 0; diff --git a/Userland/Applications/PixelPaint/Filters/GaussBlur3.cpp b/Userland/Applications/PixelPaint/Filters/GaussBlur3.cpp index 5987da3870..845802c5f7 100644 --- a/Userland/Applications/PixelPaint/Filters/GaussBlur3.cpp +++ b/Userland/Applications/PixelPaint/Filters/GaussBlur3.cpp @@ -9,18 +9,11 @@ namespace PixelPaint::Filters { -void GaussBlur3::apply() const +void GaussBlur3::apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const { - if (!m_editor) - return; - if (auto* layer = m_editor->active_layer()) { - Gfx::SpatialGaussianBlurFilter<3> filter; - if (auto parameters = PixelPaint::FilterParameters>::get()) { - filter.apply(layer->bitmap(), layer->rect(), layer->bitmap(), layer->rect(), *parameters); - layer->did_modify_bitmap(layer->rect()); - m_editor->did_complete_action(); - } - } + Gfx::SpatialGaussianBlurFilter<3> filter; + if (auto parameters = PixelPaint::FilterParameters>::get()) + filter.apply(target_bitmap, target_bitmap.rect(), source_bitmap, source_bitmap.rect(), *parameters); } } diff --git a/Userland/Applications/PixelPaint/Filters/GaussBlur3.h b/Userland/Applications/PixelPaint/Filters/GaussBlur3.h index d62462b42b..d4b8dbf5b8 100644 --- a/Userland/Applications/PixelPaint/Filters/GaussBlur3.h +++ b/Userland/Applications/PixelPaint/Filters/GaussBlur3.h @@ -13,7 +13,7 @@ namespace PixelPaint::Filters { // FIXME: Make a generic gaussian blur that does not need the templated radius class GaussBlur3 final : public Filter { public: - virtual void apply() const override; + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override; virtual StringView filter_name() override { return "Gaussian Blur (3x3)"sv; } GaussBlur3(ImageEditor* editor) diff --git a/Userland/Applications/PixelPaint/Filters/GaussBlur5.cpp b/Userland/Applications/PixelPaint/Filters/GaussBlur5.cpp index aac6614eae..36cb9b64ab 100644 --- a/Userland/Applications/PixelPaint/Filters/GaussBlur5.cpp +++ b/Userland/Applications/PixelPaint/Filters/GaussBlur5.cpp @@ -9,18 +9,11 @@ namespace PixelPaint::Filters { -void GaussBlur5::apply() const +void GaussBlur5::apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const { - if (!m_editor) - return; - if (auto* layer = m_editor->active_layer()) { - Gfx::SpatialGaussianBlurFilter<5> filter; - if (auto parameters = PixelPaint::FilterParameters>::get()) { - filter.apply(layer->bitmap(), layer->rect(), layer->bitmap(), layer->rect(), *parameters); - layer->did_modify_bitmap(layer->rect()); - m_editor->did_complete_action(); - } - } + Gfx::SpatialGaussianBlurFilter<5> filter; + if (auto parameters = PixelPaint::FilterParameters>::get()) + filter.apply(target_bitmap, target_bitmap.rect(), source_bitmap, source_bitmap.rect(), *parameters); } } diff --git a/Userland/Applications/PixelPaint/Filters/GaussBlur5.h b/Userland/Applications/PixelPaint/Filters/GaussBlur5.h index d30e8845b3..3d87e01777 100644 --- a/Userland/Applications/PixelPaint/Filters/GaussBlur5.h +++ b/Userland/Applications/PixelPaint/Filters/GaussBlur5.h @@ -12,7 +12,7 @@ namespace PixelPaint::Filters { class GaussBlur5 final : public Filter { public: - virtual void apply() const override; + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override; virtual StringView filter_name() override { return "Gaussian Blur (5x5)"sv; } GaussBlur5(ImageEditor* editor) diff --git a/Userland/Applications/PixelPaint/Filters/Grayscale.cpp b/Userland/Applications/PixelPaint/Filters/Grayscale.cpp index a7f87d5498..db8fb7e260 100644 --- a/Userland/Applications/PixelPaint/Filters/Grayscale.cpp +++ b/Userland/Applications/PixelPaint/Filters/Grayscale.cpp @@ -9,16 +9,10 @@ namespace PixelPaint::Filters { -void Grayscale::apply() const +void Grayscale::apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const { - if (!m_editor) - return; - if (auto* layer = m_editor->active_layer()) { - Gfx::GrayscaleFilter filter; - filter.apply(layer->bitmap(), layer->rect(), layer->bitmap(), layer->rect()); - layer->did_modify_bitmap(layer->rect()); - m_editor->did_complete_action(); - } + Gfx::GrayscaleFilter filter; + filter.apply(target_bitmap, target_bitmap.rect(), source_bitmap, source_bitmap.rect()); } } diff --git a/Userland/Applications/PixelPaint/Filters/Grayscale.h b/Userland/Applications/PixelPaint/Filters/Grayscale.h index 873bec04c7..2eaaa63e87 100644 --- a/Userland/Applications/PixelPaint/Filters/Grayscale.h +++ b/Userland/Applications/PixelPaint/Filters/Grayscale.h @@ -12,7 +12,7 @@ namespace PixelPaint::Filters { class Grayscale final : public Filter { public: - virtual void apply() const override; + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override; virtual StringView filter_name() override { return "Grayscale"sv; } Grayscale(ImageEditor* editor) diff --git a/Userland/Applications/PixelPaint/Filters/Invert.cpp b/Userland/Applications/PixelPaint/Filters/Invert.cpp index c9db6b7db3..c5f182d506 100644 --- a/Userland/Applications/PixelPaint/Filters/Invert.cpp +++ b/Userland/Applications/PixelPaint/Filters/Invert.cpp @@ -9,16 +9,10 @@ namespace PixelPaint::Filters { -void Invert::apply() const +void Invert::apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const { - if (!m_editor) - return; - if (auto* layer = m_editor->active_layer()) { - Gfx::InvertFilter filter; - filter.apply(layer->bitmap(), layer->rect(), layer->bitmap(), layer->rect()); - layer->did_modify_bitmap(layer->rect()); - m_editor->did_complete_action(); - } + Gfx::InvertFilter filter; + filter.apply(target_bitmap, target_bitmap.rect(), source_bitmap, source_bitmap.rect()); } } diff --git a/Userland/Applications/PixelPaint/Filters/Invert.h b/Userland/Applications/PixelPaint/Filters/Invert.h index 3adc7b9fe3..d245ff9c93 100644 --- a/Userland/Applications/PixelPaint/Filters/Invert.h +++ b/Userland/Applications/PixelPaint/Filters/Invert.h @@ -12,7 +12,7 @@ namespace PixelPaint::Filters { class Invert final : public Filter { public: - virtual void apply() const override; + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override; virtual StringView filter_name() override { return "Invert"sv; } Invert(ImageEditor* editor) diff --git a/Userland/Applications/PixelPaint/Filters/LaplaceCardinal.cpp b/Userland/Applications/PixelPaint/Filters/LaplaceCardinal.cpp index 15ae82fb07..c0cf43f525 100644 --- a/Userland/Applications/PixelPaint/Filters/LaplaceCardinal.cpp +++ b/Userland/Applications/PixelPaint/Filters/LaplaceCardinal.cpp @@ -9,18 +9,11 @@ namespace PixelPaint::Filters { -void LaplaceCardinal::apply() const +void LaplaceCardinal::apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const { - if (!m_editor) - return; - if (auto* layer = m_editor->active_layer()) { - Gfx::LaplacianFilter filter; - if (auto parameters = PixelPaint::FilterParameters::get(false)) { - filter.apply(layer->bitmap(), layer->rect(), layer->bitmap(), layer->rect(), *parameters); - layer->did_modify_bitmap(layer->rect()); - m_editor->did_complete_action(); - } - } + Gfx::LaplacianFilter filter; + if (auto parameters = PixelPaint::FilterParameters::get(false)) + filter.apply(target_bitmap, target_bitmap.rect(), source_bitmap, source_bitmap.rect(), *parameters); } } diff --git a/Userland/Applications/PixelPaint/Filters/LaplaceCardinal.h b/Userland/Applications/PixelPaint/Filters/LaplaceCardinal.h index a66861e807..f3b75a2a54 100644 --- a/Userland/Applications/PixelPaint/Filters/LaplaceCardinal.h +++ b/Userland/Applications/PixelPaint/Filters/LaplaceCardinal.h @@ -12,7 +12,7 @@ namespace PixelPaint::Filters { class LaplaceCardinal final : public Filter { public: - virtual void apply() const override; + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override; virtual StringView filter_name() override { return "Laplacian Cardinal"sv; } LaplaceCardinal(ImageEditor* editor) diff --git a/Userland/Applications/PixelPaint/Filters/LaplaceDiagonal.cpp b/Userland/Applications/PixelPaint/Filters/LaplaceDiagonal.cpp index 01d4cfd5b3..60f1cb2254 100644 --- a/Userland/Applications/PixelPaint/Filters/LaplaceDiagonal.cpp +++ b/Userland/Applications/PixelPaint/Filters/LaplaceDiagonal.cpp @@ -9,18 +9,11 @@ namespace PixelPaint::Filters { -void LaplaceDiagonal::apply() const +void LaplaceDiagonal::apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const { - if (!m_editor) - return; - if (auto* layer = m_editor->active_layer()) { - Gfx::LaplacianFilter filter; - if (auto parameters = PixelPaint::FilterParameters::get(true)) { - filter.apply(layer->bitmap(), layer->rect(), layer->bitmap(), layer->rect(), *parameters); - layer->did_modify_bitmap(layer->rect()); - m_editor->did_complete_action(); - } - } + Gfx::LaplacianFilter filter; + if (auto parameters = PixelPaint::FilterParameters::get(true)) + filter.apply(target_bitmap, target_bitmap.rect(), source_bitmap, source_bitmap.rect(), *parameters); } } diff --git a/Userland/Applications/PixelPaint/Filters/LaplaceDiagonal.h b/Userland/Applications/PixelPaint/Filters/LaplaceDiagonal.h index c388a52d36..723d36efe0 100644 --- a/Userland/Applications/PixelPaint/Filters/LaplaceDiagonal.h +++ b/Userland/Applications/PixelPaint/Filters/LaplaceDiagonal.h @@ -12,7 +12,7 @@ namespace PixelPaint::Filters { class LaplaceDiagonal final : public Filter { public: - virtual void apply() const override; + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override; virtual StringView filter_name() override { return "Laplacian Diagonal"sv; } LaplaceDiagonal(ImageEditor* editor) diff --git a/Userland/Applications/PixelPaint/Filters/Sepia.cpp b/Userland/Applications/PixelPaint/Filters/Sepia.cpp index ba86e6a75e..4a3b87099b 100644 --- a/Userland/Applications/PixelPaint/Filters/Sepia.cpp +++ b/Userland/Applications/PixelPaint/Filters/Sepia.cpp @@ -11,16 +11,10 @@ namespace PixelPaint::Filters { -void Sepia::apply() const +void Sepia::apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const { - if (!m_editor) - return; - if (auto* layer = m_editor->active_layer()) { - Gfx::SepiaFilter filter(m_amount); - filter.apply(layer->bitmap(), layer->rect(), layer->bitmap(), layer->rect()); - layer->did_modify_bitmap(layer->rect()); - m_editor->did_complete_action(); - } + Gfx::SepiaFilter filter(m_amount); + filter.apply(target_bitmap, target_bitmap.rect(), source_bitmap, source_bitmap.rect()); } RefPtr Sepia::get_settings_widget() diff --git a/Userland/Applications/PixelPaint/Filters/Sepia.h b/Userland/Applications/PixelPaint/Filters/Sepia.h index a8d1a8a788..17d0d025d5 100644 --- a/Userland/Applications/PixelPaint/Filters/Sepia.h +++ b/Userland/Applications/PixelPaint/Filters/Sepia.h @@ -12,7 +12,7 @@ namespace PixelPaint::Filters { class Sepia final : public Filter { public: - virtual void apply() const override; + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override; virtual RefPtr get_settings_widget() override; virtual StringView filter_name() override { return "Sepia"sv; } diff --git a/Userland/Applications/PixelPaint/Filters/Sharpen.cpp b/Userland/Applications/PixelPaint/Filters/Sharpen.cpp index 4a772beb75..d40e7415ea 100644 --- a/Userland/Applications/PixelPaint/Filters/Sharpen.cpp +++ b/Userland/Applications/PixelPaint/Filters/Sharpen.cpp @@ -9,18 +9,11 @@ namespace PixelPaint::Filters { -void Sharpen::apply() const +void Sharpen::apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const { - if (!m_editor) - return; - if (auto* layer = m_editor->active_layer()) { - Gfx::SharpenFilter filter; - if (auto parameters = PixelPaint::FilterParameters::get()) { - filter.apply(layer->bitmap(), layer->rect(), layer->bitmap(), layer->rect(), *parameters); - layer->did_modify_bitmap(layer->rect()); - m_editor->did_complete_action(); - } - } + Gfx::SharpenFilter filter; + if (auto parameters = PixelPaint::FilterParameters::get()) + filter.apply(target_bitmap, target_bitmap.rect(), source_bitmap, source_bitmap.rect(), *parameters); } } diff --git a/Userland/Applications/PixelPaint/Filters/Sharpen.h b/Userland/Applications/PixelPaint/Filters/Sharpen.h index 76594340be..a718a9f95d 100644 --- a/Userland/Applications/PixelPaint/Filters/Sharpen.h +++ b/Userland/Applications/PixelPaint/Filters/Sharpen.h @@ -12,7 +12,7 @@ namespace PixelPaint::Filters { class Sharpen final : public Filter { public: - virtual void apply() const override; + virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const override; virtual StringView filter_name() override { return "Sharpen"sv; } Sharpen(ImageEditor* editor)