mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:57:34 +00:00
PixelPaint: Make selection changes undoable
Using the Rectangle Select Tool will now generate undo/redo commands like any other tool. :^)
This commit is contained in:
parent
d571159aeb
commit
49deb936be
4 changed files with 12 additions and 0 deletions
|
@ -245,6 +245,7 @@ ErrorOr<NonnullRefPtr<Image>> Image::take_snapshot() const
|
||||||
auto layer_snapshot = TRY(Layer::try_create_snapshot(*snapshot, layer));
|
auto layer_snapshot = TRY(Layer::try_create_snapshot(*snapshot, layer));
|
||||||
snapshot->add_layer(move(layer_snapshot));
|
snapshot->add_layer(move(layer_snapshot));
|
||||||
}
|
}
|
||||||
|
snapshot->m_selection.set_mask(m_selection.mask());
|
||||||
return snapshot;
|
return snapshot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,6 +268,9 @@ ErrorOr<void> Image::restore_snapshot(Image const& snapshot)
|
||||||
select_layer(&layer(0));
|
select_layer(&layer(0));
|
||||||
|
|
||||||
m_size = snapshot.size();
|
m_size = snapshot.size();
|
||||||
|
|
||||||
|
m_selection.set_mask(snapshot.m_selection.mask());
|
||||||
|
|
||||||
did_change_rect();
|
did_change_rect();
|
||||||
did_modify_layer_stack();
|
did_modify_layer_stack();
|
||||||
return {};
|
return {};
|
||||||
|
|
|
@ -54,4 +54,9 @@ void Selection::remove_client(SelectionClient& client)
|
||||||
m_clients.remove(&client);
|
m_clients.remove(&client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Selection::set_mask(Mask mask)
|
||||||
|
{
|
||||||
|
m_mask = move(mask);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,7 @@ public:
|
||||||
[[nodiscard]] u8 get_selection_alpha(Gfx::IntPoint const& point) const { return get_selection_alpha(point.x(), point.y()); }
|
[[nodiscard]] u8 get_selection_alpha(Gfx::IntPoint const& point) const { return get_selection_alpha(point.x(), point.y()); }
|
||||||
|
|
||||||
Mask const& mask() const { return m_mask; }
|
Mask const& mask() const { return m_mask; }
|
||||||
|
void set_mask(Mask);
|
||||||
|
|
||||||
void begin_interactive_selection() { m_in_interactive_selection = true; }
|
void begin_interactive_selection() { m_in_interactive_selection = true; }
|
||||||
void end_interactive_selection() { m_in_interactive_selection = false; }
|
void end_interactive_selection() { m_in_interactive_selection = false; }
|
||||||
|
|
|
@ -99,6 +99,8 @@ void RectangleSelectTool::on_mouseup(Layer*, MouseEvent& event)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_editor->image().selection().merge(mask, m_merge_mode);
|
m_editor->image().selection().merge(mask, m_merge_mode);
|
||||||
|
|
||||||
|
m_editor->did_complete_action(tool_name());
|
||||||
}
|
}
|
||||||
|
|
||||||
void RectangleSelectTool::on_keydown(GUI::KeyEvent& key_event)
|
void RectangleSelectTool::on_keydown(GUI::KeyEvent& key_event)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue