mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 03:37:43 +00:00
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:
parent
29bbf56286
commit
7ca4d045bd
3 changed files with 16 additions and 10 deletions
|
@ -71,6 +71,7 @@ MainWidget::MainWidget()
|
||||||
if (m_tab_widget->children().size() == 0) {
|
if (m_tab_widget->children().size() == 0) {
|
||||||
m_layer_list_widget->set_image(nullptr);
|
m_layer_list_widget->set_image(nullptr);
|
||||||
m_layer_properties_widget->set_layer(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) {
|
m_tab_widget->on_change = [&](auto& widget) {
|
||||||
auto& image_editor = verify_cast<PixelPaint::ImageEditor>(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_list_widget->set_image(&image_editor.image());
|
||||||
m_layer_properties_widget->set_layer(image_editor.active_layer());
|
m_layer_properties_widget->set_layer(image_editor.active_layer());
|
||||||
if (auto* active_tool = m_toolbox->active_tool())
|
if (auto* active_tool = m_toolbox->active_tool())
|
||||||
|
|
|
@ -143,17 +143,20 @@ PaletteWidget::PaletteWidget()
|
||||||
display_color_list(result.value());
|
display_color_list(result.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
void PaletteWidget::set_image_editor(ImageEditor& editor)
|
void PaletteWidget::set_image_editor(ImageEditor* editor)
|
||||||
{
|
{
|
||||||
m_editor = &editor;
|
m_editor = editor;
|
||||||
set_primary_color(editor.primary_color());
|
if (!m_editor)
|
||||||
set_secondary_color(editor.secondary_color());
|
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);
|
set_primary_color(color);
|
||||||
};
|
};
|
||||||
|
|
||||||
editor.on_secondary_color_change = [this](Color color) {
|
editor->on_secondary_color_change = [this](Color color) {
|
||||||
set_secondary_color(color);
|
set_secondary_color(color);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -164,13 +167,15 @@ PaletteWidget::~PaletteWidget()
|
||||||
|
|
||||||
void PaletteWidget::set_primary_color(Color color)
|
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);
|
m_primary_color_widget->set_background_color(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PaletteWidget::set_secondary_color(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);
|
m_secondary_color_widget->set_background_color(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ public:
|
||||||
static Result<void, String> save_palette_fd_and_close(Vector<Color>, int);
|
static Result<void, String> save_palette_fd_and_close(Vector<Color>, int);
|
||||||
static Vector<Color> fallback_colors();
|
static Vector<Color> fallback_colors();
|
||||||
|
|
||||||
void set_image_editor(ImageEditor&);
|
void set_image_editor(ImageEditor*);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static Result<Vector<Color>, String> load_palette_file(Core::File&);
|
static Result<Vector<Color>, String> load_palette_file(Core::File&);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue