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:
parent
df4904f61d
commit
8c681a1603
6 changed files with 520 additions and 84 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue