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

PixelPaint: Add color-masking for editing masks

This patch adds the ability to refine a editing mask by a color-range
based on the pixels of the content image. This is useful for image
editing where mask restirction via luminosity might not fit or just
certain color ranges should be edited.
This commit is contained in:
Torstennator 2023-06-23 12:43:59 +02:00 committed by Jelle Raaijmakers
parent df4904f61d
commit 8c681a1603
6 changed files with 520 additions and 84 deletions

View file

@ -869,18 +869,33 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window)
TRY(m_layer_menu->try_add_action(*m_toggle_mask_visibility_action));
m_open_luminosity_masking_action = GUI::Action::create(
"Luminosity Masking", create_layer_mask_callback("Luminosity Masking", [&](Layer* active_layer) {
VERIFY(active_layer->mask_type() == Layer::MaskType::EditingMask);
"Luminosity Masking", [&](auto&) {
auto* editor = current_image_editor();
VERIFY(editor);
auto dialog = PixelPaint::ImageMasking::construct(&window, editor);
if (dialog->exec() != GUI::Dialog::ExecResult::OK)
dialog->revert_possible_changes();
}));
if (!editor->active_layer())
return;
VERIFY(editor->active_layer()->mask_type() == Layer::MaskType::EditingMask);
PixelPaint::ImageMasking::construct(&window, editor, ImageMasking::MaskingType::Luminosity)->exec();
m_layer_list_widget->repaint();
});
TRY(m_layer_menu->try_add_action(*m_open_luminosity_masking_action));
m_open_color_masking_action = GUI::Action::create(
"Color Masking", [&](auto&) {
auto* editor = current_image_editor();
VERIFY(editor);
if (!editor->active_layer())
return;
VERIFY(editor->active_layer()->mask_type() == Layer::MaskType::EditingMask);
PixelPaint::ImageMasking::construct(&window, editor, ImageMasking::MaskingType::Color)->exec();
m_layer_list_widget->repaint();
});
TRY(m_layer_menu->try_add_action(*m_open_color_masking_action));
TRY(m_layer_menu->try_add_separator());
TRY(m_layer_menu->try_add_action(GUI::Action::create(
@ -1263,6 +1278,7 @@ void MainWidget::set_mask_actions_for_layer(Layer* layer)
m_toggle_mask_visibility_action->set_visible(layer->mask_type() == Layer::MaskType::EditingMask);
m_toggle_mask_visibility_action->set_checked(layer->mask_visibility());
m_open_luminosity_masking_action->set_visible(layer->mask_type() == Layer::MaskType::EditingMask);
m_open_color_masking_action->set_visible(layer->mask_type() == Layer::MaskType::EditingMask);
}
void MainWidget::open_image(FileSystemAccessClient::File file)