From 6c572006a307c06abce828d5093d17ca5f513217 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Fri, 29 Apr 2022 12:07:06 +0100 Subject: [PATCH] LibGUI+ThemeEditor: Split preview-widget palette-change callback There are two different things in ThemeEditor that want to know when a palette changes: 1. The PreviewWidget subclass, so it can update its preview. 2. The ThemeEditor itself, so we know that the palette is modified. Using a protected virtual function for 1 means that we can do 2 without them fighting over the same on_palette_change callback. --- Userland/Applications/ThemeEditor/PreviewWidget.cpp | 12 +++++++----- Userland/Applications/ThemeEditor/PreviewWidget.h | 3 ++- Userland/Libraries/LibGUI/AbstractThemePreview.cpp | 6 +++--- Userland/Libraries/LibGUI/AbstractThemePreview.h | 4 +++- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/Userland/Applications/ThemeEditor/PreviewWidget.cpp b/Userland/Applications/ThemeEditor/PreviewWidget.cpp index af2eea8a613..85505e67262 100644 --- a/Userland/Applications/ThemeEditor/PreviewWidget.cpp +++ b/Userland/Applications/ThemeEditor/PreviewWidget.cpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2020, Andreas Kling - * Copyright (c) 2021, Sam Atkins + * Copyright (c) 2021-2022, Sam Atkins * Copyright (c) 2021, Antonio Di Stefano * Copyright (c) 2022, the SerenityOS developers. * @@ -82,14 +82,16 @@ private: PreviewWidget::PreviewWidget(Gfx::Palette const& initial_preview_palette) : GUI::AbstractThemePreview(initial_preview_palette) { - on_palette_change = [&] { - m_gallery->set_preview_palette(preview_palette()); - update_preview_window_locations(); - }; m_gallery = add(); set_greedy_for_hits(true); } +void PreviewWidget::palette_changed() +{ + m_gallery->set_preview_palette(preview_palette()); + update_preview_window_locations(); +} + void PreviewWidget::set_color_filter(OwnPtr color_filter) { m_color_filter = move(color_filter); diff --git a/Userland/Applications/ThemeEditor/PreviewWidget.h b/Userland/Applications/ThemeEditor/PreviewWidget.h index 0e11f433db2..0009f9c71ea 100644 --- a/Userland/Applications/ThemeEditor/PreviewWidget.h +++ b/Userland/Applications/ThemeEditor/PreviewWidget.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2020, Andreas Kling - * Copyright (c) 2021, Sam Atkins + * Copyright (c) 2021-2022, Sam Atkins * Copyright (c) 2021, Antonio Di Stefano * Copyright (c) 2022, the SerenityOS developers. * @@ -34,6 +34,7 @@ private: virtual void second_paint_event(GUI::PaintEvent&) override; virtual void resize_event(GUI::ResizeEvent&) override; virtual void drop_event(GUI::DropEvent&) override; + virtual void palette_changed() override; void paint_hightlight_window(); void update_preview_window_locations(); diff --git a/Userland/Libraries/LibGUI/AbstractThemePreview.cpp b/Userland/Libraries/LibGUI/AbstractThemePreview.cpp index a081585c254..96ae9f2351b 100644 --- a/Userland/Libraries/LibGUI/AbstractThemePreview.cpp +++ b/Userland/Libraries/LibGUI/AbstractThemePreview.cpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2020, Andreas Kling - * Copyright (c) 2021, Sam Atkins + * Copyright (c) 2021-2022, Sam Atkins * Copyright (c) 2021, Antonio Di Stefano * Copyright (c) 2022, the SerenityOS developers. * @@ -71,9 +71,9 @@ void AbstractThemePreview::load_theme_bitmaps() void AbstractThemePreview::set_preview_palette(Gfx::Palette const& palette) { m_preview_palette = palette; - if (on_palette_change) { + palette_changed(); + if (on_palette_change) on_palette_change(); - } load_theme_bitmaps(); update(); } diff --git a/Userland/Libraries/LibGUI/AbstractThemePreview.h b/Userland/Libraries/LibGUI/AbstractThemePreview.h index 1769cfba0bd..fc1fbbbc1a8 100644 --- a/Userland/Libraries/LibGUI/AbstractThemePreview.h +++ b/Userland/Libraries/LibGUI/AbstractThemePreview.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2020, Andreas Kling - * Copyright (c) 2021, Sam Atkins + * Copyright (c) 2021-2022, Sam Atkins * Copyright (c) 2021, Antonio Di Stefano * Copyright (c) 2022, the SerenityOS developers. * @@ -45,6 +45,8 @@ protected: return *m_inactive_window_icon; } + virtual void palette_changed() {}; + private: virtual void paint_preview(GUI::PaintEvent&) = 0;