diff --git a/Userland/Libraries/LibGUI/Button.cpp b/Userland/Libraries/LibGUI/Button.cpp index 911d844021..e75938da56 100644 --- a/Userland/Libraries/LibGUI/Button.cpp +++ b/Userland/Libraries/LibGUI/Button.cpp @@ -89,18 +89,15 @@ void Button::paint_event(PaintEvent& event) // Reusing that threshold here as it seems to work reasonably well. should_invert_icon = contrast_ratio < 4.5f && contrast_ratio < palette().button().contrast_ratio(solid_color->inverted()); } - if (should_invert_icon) - m_icon->invert(); + auto icon = should_invert_icon ? m_icon->inverted().release_value_but_fixme_should_propagate_errors() : NonnullRefPtr { *m_icon }; if (is_enabled()) { if (is_hovered()) - painter.blit_brightened(icon_location, *m_icon, m_icon->rect()); + painter.blit_brightened(icon_location, *icon, icon->rect()); else - painter.blit(icon_location, *m_icon, m_icon->rect()); + painter.blit(icon_location, *icon, icon->rect()); } else { - painter.blit_disabled(icon_location, *m_icon, m_icon->rect(), palette()); + painter.blit_disabled(icon_location, *icon, icon->rect(), palette()); } - if (should_invert_icon) - m_icon->invert(); } auto& font = is_checked() ? this->font().bold_variant() : this->font(); if (m_icon && !text().is_empty()) { diff --git a/Userland/Libraries/LibGfx/Bitmap.cpp b/Userland/Libraries/LibGfx/Bitmap.cpp index 5bc238f8d1..73d871f32b 100644 --- a/Userland/Libraries/LibGfx/Bitmap.cpp +++ b/Userland/Libraries/LibGfx/Bitmap.cpp @@ -476,12 +476,14 @@ ErrorOr> Bitmap::to_bitmap_backed_by_anonymous_buffer() co return bitmap; } -void Bitmap::invert() +ErrorOr> Bitmap::inverted() const { + auto inverted_bitmap = TRY(clone()); for (auto y = 0; y < height(); y++) { for (auto x = 0; x < width(); x++) - set_pixel(x, y, get_pixel(x, y).inverted()); + inverted_bitmap->set_pixel(x, y, get_pixel(x, y).inverted()); } + return inverted_bitmap; } Bitmap::~Bitmap() diff --git a/Userland/Libraries/LibGfx/Bitmap.h b/Userland/Libraries/LibGfx/Bitmap.h index 6adfcfd176..35627183f1 100644 --- a/Userland/Libraries/LibGfx/Bitmap.h +++ b/Userland/Libraries/LibGfx/Bitmap.h @@ -126,7 +126,7 @@ public: [[nodiscard]] ShareableBitmap to_shareable_bitmap() const; - void invert(); + ErrorOr> inverted() const; ~Bitmap();