PixelPaint: Add action to invert selection

This commit is contained in:
snooze6214 2022-10-18 20:24:00 +05:30 committed by Linus Groh
parent 295fcd639f
commit d3353ee0e7
6 changed files with 16 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

View file

@ -18,6 +18,7 @@ ErrorOr<IconBag> IconBag::try_create()
icon_bag.close_image = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/close-tab.png"sv));
icon_bag.edit_copy = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png"sv));
icon_bag.clear_selection = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/clear-selection.png"sv));
icon_bag.invert_selection = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/invert-selection.png"sv));
icon_bag.swap_colors = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/swap-colors.png"sv));
icon_bag.default_colors = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/default-colors.png"sv));
icon_bag.load_color_palette = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/load-color-palette.png"sv));

View file

@ -19,6 +19,7 @@ struct IconBag final {
RefPtr<Gfx::Bitmap> close_image { nullptr };
RefPtr<Gfx::Bitmap> edit_copy { nullptr };
RefPtr<Gfx::Bitmap> clear_selection { nullptr };
RefPtr<Gfx::Bitmap> invert_selection { nullptr };
RefPtr<Gfx::Bitmap> swap_colors { nullptr };
RefPtr<Gfx::Bitmap> default_colors { nullptr };
RefPtr<Gfx::Bitmap> load_color_palette { nullptr };

View file

@ -365,6 +365,12 @@ void MainWidget::initialize_menubar(GUI::Window& window)
VERIFY(editor);
editor->image().selection().clear();
}));
m_edit_menu->add_action(GUI::Action::create(
"&Invert Selection", g_icon_bag.invert_selection, [&](auto&) {
auto* editor = current_image_editor();
VERIFY(editor);
editor->image().selection().invert();
}));
m_edit_menu->add_separator();
m_edit_menu->add_action(GUI::Action::create(

View file

@ -22,6 +22,13 @@ void Selection::clear()
client->selection_did_change();
}
void Selection::invert()
{
auto new_mask = Mask::full(m_image.rect());
new_mask.subtract(m_mask);
m_mask = new_mask;
}
void Selection::merge(Mask const& mask, MergeMode mode)
{
switch (mode) {

View file

@ -38,6 +38,7 @@ public:
bool is_empty() const { return m_mask.is_null(); }
void clear();
void invert();
void merge(Mask const&, MergeMode);
void merge(Gfx::IntRect const& rect, MergeMode mode) { merge(Mask::full(rect), mode); }
Gfx::IntRect bounding_rect() const { return m_mask.bounding_rect(); }