PixelPaint: Make PaletteWidget::set_image_editor take a ImageEditor*

After closing the last open ImageEditor, selecting a color would try to
dereference it causing a crash. Instead make set_image_editor() take a
pointer to it and set it to nullptr when closing the last tab like we
do with LayerListWidget and LayerPropertiesWidget.
This commit is contained in:
Marcus Nilsson 2022-01-09 11:59:32 +01:00 committed by Linus Groh
parent 29bbf56286
commit 7ca4d045bd
Notes: sideshowbarker 2024-07-17 21:18:25 +09:00
3 changed files with 16 additions and 10 deletions

View File

@ -71,6 +71,7 @@ MainWidget::MainWidget()
if (m_tab_widget->children().size() == 0) {
m_layer_list_widget->set_image(nullptr);
m_layer_properties_widget->set_layer(nullptr);
m_palette_widget->set_image_editor(nullptr);
}
});
}
@ -78,7 +79,7 @@ MainWidget::MainWidget()
m_tab_widget->on_change = [&](auto& widget) {
auto& image_editor = verify_cast<PixelPaint::ImageEditor>(widget);
m_palette_widget->set_image_editor(image_editor);
m_palette_widget->set_image_editor(&image_editor);
m_layer_list_widget->set_image(&image_editor.image());
m_layer_properties_widget->set_layer(image_editor.active_layer());
if (auto* active_tool = m_toolbox->active_tool())

View File

@ -143,17 +143,20 @@ PaletteWidget::PaletteWidget()
display_color_list(result.value());
}
void PaletteWidget::set_image_editor(ImageEditor& editor)
void PaletteWidget::set_image_editor(ImageEditor* editor)
{
m_editor = &editor;
set_primary_color(editor.primary_color());
set_secondary_color(editor.secondary_color());
m_editor = editor;
if (!m_editor)
return;
editor.on_primary_color_change = [this](Color color) {
set_primary_color(editor->primary_color());
set_secondary_color(editor->secondary_color());
editor->on_primary_color_change = [this](Color color) {
set_primary_color(color);
};
editor.on_secondary_color_change = [this](Color color) {
editor->on_secondary_color_change = [this](Color color) {
set_secondary_color(color);
};
}
@ -164,13 +167,15 @@ PaletteWidget::~PaletteWidget()
void PaletteWidget::set_primary_color(Color color)
{
m_editor->set_primary_color(color);
if (m_editor)
m_editor->set_primary_color(color);
m_primary_color_widget->set_background_color(color);
}
void PaletteWidget::set_secondary_color(Color color)
{
m_editor->set_secondary_color(color);
if (m_editor)
m_editor->set_secondary_color(color);
m_secondary_color_widget->set_background_color(color);
}

View File

@ -35,7 +35,7 @@ public:
static Result<void, String> save_palette_fd_and_close(Vector<Color>, int);
static Vector<Color> fallback_colors();
void set_image_editor(ImageEditor&);
void set_image_editor(ImageEditor*);
private:
static Result<Vector<Color>, String> load_palette_file(Core::File&);