1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 06:57:44 +00:00

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.
This commit is contained in:
Sam Atkins 2022-04-29 12:07:06 +01:00 committed by Andreas Kling
parent 5fd0140772
commit 6c572006a3
4 changed files with 15 additions and 10 deletions

View file

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org> * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org> * Copyright (c) 2021-2022, Sam Atkins <atkinssj@serenityos.org>
* Copyright (c) 2021, Antonio Di Stefano <tonio9681@gmail.com> * Copyright (c) 2021, Antonio Di Stefano <tonio9681@gmail.com>
* Copyright (c) 2022, the SerenityOS developers. * Copyright (c) 2022, the SerenityOS developers.
* *
@ -82,14 +82,16 @@ private:
PreviewWidget::PreviewWidget(Gfx::Palette const& initial_preview_palette) PreviewWidget::PreviewWidget(Gfx::Palette const& initial_preview_palette)
: GUI::AbstractThemePreview(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<MiniWidgetGallery>(); m_gallery = add<MiniWidgetGallery>();
set_greedy_for_hits(true); 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<Gfx::ColorBlindnessFilter> color_filter) void PreviewWidget::set_color_filter(OwnPtr<Gfx::ColorBlindnessFilter> color_filter)
{ {
m_color_filter = move(color_filter); m_color_filter = move(color_filter);

View file

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org> * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org> * Copyright (c) 2021-2022, Sam Atkins <atkinssj@serenityos.org>
* Copyright (c) 2021, Antonio Di Stefano <tonio9681@gmail.com> * Copyright (c) 2021, Antonio Di Stefano <tonio9681@gmail.com>
* Copyright (c) 2022, the SerenityOS developers. * Copyright (c) 2022, the SerenityOS developers.
* *
@ -34,6 +34,7 @@ private:
virtual void second_paint_event(GUI::PaintEvent&) override; virtual void second_paint_event(GUI::PaintEvent&) override;
virtual void resize_event(GUI::ResizeEvent&) override; virtual void resize_event(GUI::ResizeEvent&) override;
virtual void drop_event(GUI::DropEvent&) override; virtual void drop_event(GUI::DropEvent&) override;
virtual void palette_changed() override;
void paint_hightlight_window(); void paint_hightlight_window();
void update_preview_window_locations(); void update_preview_window_locations();

View file

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org> * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org> * Copyright (c) 2021-2022, Sam Atkins <atkinssj@serenityos.org>
* Copyright (c) 2021, Antonio Di Stefano <tonio9681@gmail.com> * Copyright (c) 2021, Antonio Di Stefano <tonio9681@gmail.com>
* Copyright (c) 2022, the SerenityOS developers. * Copyright (c) 2022, the SerenityOS developers.
* *
@ -71,9 +71,9 @@ void AbstractThemePreview::load_theme_bitmaps()
void AbstractThemePreview::set_preview_palette(Gfx::Palette const& palette) void AbstractThemePreview::set_preview_palette(Gfx::Palette const& palette)
{ {
m_preview_palette = palette; m_preview_palette = palette;
if (on_palette_change) { palette_changed();
if (on_palette_change)
on_palette_change(); on_palette_change();
}
load_theme_bitmaps(); load_theme_bitmaps();
update(); update();
} }

View file

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org> * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org> * Copyright (c) 2021-2022, Sam Atkins <atkinssj@serenityos.org>
* Copyright (c) 2021, Antonio Di Stefano <tonio9681@gmail.com> * Copyright (c) 2021, Antonio Di Stefano <tonio9681@gmail.com>
* Copyright (c) 2022, the SerenityOS developers. * Copyright (c) 2022, the SerenityOS developers.
* *
@ -45,6 +45,8 @@ protected:
return *m_inactive_window_icon; return *m_inactive_window_icon;
} }
virtual void palette_changed() {};
private: private:
virtual void paint_preview(GUI::PaintEvent&) = 0; virtual void paint_preview(GUI::PaintEvent&) = 0;