mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-03 09:23:24 +00:00
Merge branch 'wip/Jehan/mask-edit-option' into 'master'
app, pdb: "Add Layer Mask" dialog asks whether to edit mask immediately. See merge request GNOME/gimp!1326
This commit is contained in:
commit
0dccac60c2
16 changed files with 82 additions and 16 deletions
|
@ -141,6 +141,7 @@ static void layers_add_mask_callback (GtkWidget *dialog,
|
|||
GimpAddMaskType add_mask_type,
|
||||
GimpChannel *channel,
|
||||
gboolean invert,
|
||||
gboolean edit_mask,
|
||||
gpointer user_data);
|
||||
static void layers_scale_callback (GtkWidget *dialog,
|
||||
GimpViewable *viewable,
|
||||
|
@ -1473,6 +1474,7 @@ layers_mask_add_cmd_callback (GimpAction *action,
|
|||
widget,
|
||||
config->layer_add_mask_type,
|
||||
config->layer_add_mask_invert,
|
||||
config->layer_add_mask_edit_mask,
|
||||
layers_add_mask_callback,
|
||||
NULL);
|
||||
|
||||
|
@ -1548,7 +1550,9 @@ layers_mask_add_last_vals_cmd_callback (GimpAction *action,
|
|||
if (config->layer_add_mask_invert)
|
||||
gimp_channel_invert (GIMP_CHANNEL (mask), FALSE);
|
||||
|
||||
gimp_layer_add_mask (iter->data, mask, TRUE, NULL);
|
||||
gimp_layer_add_mask (iter->data, mask,
|
||||
config->layer_add_mask_edit_mask,
|
||||
TRUE, NULL);
|
||||
}
|
||||
|
||||
gimp_image_undo_group_end (image);
|
||||
|
@ -2488,6 +2492,7 @@ layers_add_mask_callback (GtkWidget *dialog,
|
|||
GimpAddMaskType add_mask_type,
|
||||
GimpChannel *channel,
|
||||
gboolean invert,
|
||||
gboolean edit_mask,
|
||||
gpointer user_data)
|
||||
{
|
||||
GimpImage *image = gimp_item_get_image (GIMP_ITEM (layers->data));
|
||||
|
@ -2497,8 +2502,9 @@ layers_add_mask_callback (GtkWidget *dialog,
|
|||
GError *error = NULL;
|
||||
|
||||
g_object_set (config,
|
||||
"layer-add-mask-type", add_mask_type,
|
||||
"layer-add-mask-invert", invert,
|
||||
"layer-add-mask-type", add_mask_type,
|
||||
"layer-add-mask-invert", invert,
|
||||
"layer-add-mask-edit-mask", edit_mask,
|
||||
NULL);
|
||||
|
||||
gimp_image_undo_group_start (image,
|
||||
|
@ -2514,7 +2520,7 @@ layers_add_mask_callback (GtkWidget *dialog,
|
|||
if (config->layer_add_mask_invert)
|
||||
gimp_channel_invert (GIMP_CHANNEL (mask), FALSE);
|
||||
|
||||
if (! gimp_layer_add_mask (iter->data, mask, TRUE, &error))
|
||||
if (! gimp_layer_add_mask (iter->data, mask, edit_mask, TRUE, &error))
|
||||
{
|
||||
gimp_message_literal (image->gimp,
|
||||
G_OBJECT (dialog), GIMP_MESSAGE_WARNING,
|
||||
|
|
|
@ -81,6 +81,7 @@ enum
|
|||
|
||||
PROP_LAYER_ADD_MASK_TYPE,
|
||||
PROP_LAYER_ADD_MASK_INVERT,
|
||||
PROP_LAYER_ADD_MASK_EDIT_MASK,
|
||||
|
||||
PROP_LAYER_MERGE_TYPE,
|
||||
PROP_LAYER_MERGE_ACTIVE_GROUP_ONLY,
|
||||
|
@ -389,6 +390,13 @@ gimp_dialog_config_class_init (GimpDialogConfigClass *klass)
|
|||
FALSE,
|
||||
GIMP_PARAM_STATIC_STRINGS);
|
||||
|
||||
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_LAYER_ADD_MASK_EDIT_MASK,
|
||||
"layer-add-mask-edit-mask",
|
||||
"Default layer mask: edit mask immediately",
|
||||
LAYER_ADD_MASK_EDIT_MASK,
|
||||
TRUE,
|
||||
GIMP_PARAM_STATIC_STRINGS);
|
||||
|
||||
GIMP_CONFIG_PROP_ENUM (object_class, PROP_LAYER_MERGE_TYPE,
|
||||
"layer-merge-type",
|
||||
"Default layer merge type",
|
||||
|
@ -720,6 +728,9 @@ gimp_dialog_config_set_property (GObject *object,
|
|||
case PROP_LAYER_ADD_MASK_INVERT:
|
||||
config->layer_add_mask_invert = g_value_get_boolean (value);
|
||||
break;
|
||||
case PROP_LAYER_ADD_MASK_EDIT_MASK:
|
||||
config->layer_add_mask_edit_mask = g_value_get_boolean (value);
|
||||
break;
|
||||
|
||||
case PROP_LAYER_MERGE_TYPE:
|
||||
config->layer_merge_type = g_value_get_enum (value);
|
||||
|
@ -920,6 +931,9 @@ gimp_dialog_config_get_property (GObject *object,
|
|||
case PROP_LAYER_ADD_MASK_INVERT:
|
||||
g_value_set_boolean (value, config->layer_add_mask_invert);
|
||||
break;
|
||||
case PROP_LAYER_ADD_MASK_EDIT_MASK:
|
||||
g_value_set_boolean (value, config->layer_add_mask_edit_mask);
|
||||
break;
|
||||
|
||||
case PROP_LAYER_MERGE_TYPE:
|
||||
g_value_set_enum (value, config->layer_merge_type);
|
||||
|
|
|
@ -79,6 +79,7 @@ struct _GimpDialogConfig
|
|||
|
||||
GimpAddMaskType layer_add_mask_type;
|
||||
gboolean layer_add_mask_invert;
|
||||
gboolean layer_add_mask_edit_mask;
|
||||
|
||||
GimpMergeType layer_merge_type;
|
||||
gboolean layer_merge_active_group_only;
|
||||
|
|
|
@ -649,6 +649,9 @@ _("Sets the default mask for the 'Add Layer Mask' dialog.")
|
|||
#define LAYER_ADD_MASK_INVERT_BLURB \
|
||||
_("Sets the default 'invert mask' state for the 'Add Layer Mask' dialog.")
|
||||
|
||||
#define LAYER_ADD_MASK_EDIT_MASK \
|
||||
_("Sets the default 'edit mask' state for the 'Add Layer Mask' dialog.")
|
||||
|
||||
#define LAYER_MERGE_TYPE_BLURB \
|
||||
_("Sets the default merge type for the 'Merge Visible Layers' dialog.")
|
||||
|
||||
|
|
|
@ -898,6 +898,7 @@ gimp_image_undo_push_layer_mask_add (GimpImage *image,
|
|||
GIMP_DIRTY_IMAGE_STRUCTURE,
|
||||
"item", layer,
|
||||
"layer-mask", mask,
|
||||
"edit-mask", FALSE,
|
||||
NULL);
|
||||
}
|
||||
|
||||
|
@ -920,6 +921,7 @@ gimp_image_undo_push_layer_mask_remove (GimpImage *image,
|
|||
GIMP_DIRTY_IMAGE_STRUCTURE,
|
||||
"item", layer,
|
||||
"layer-mask", mask,
|
||||
"edit-mask", gimp_layer_get_edit_mask (layer),
|
||||
NULL);
|
||||
}
|
||||
|
||||
|
|
|
@ -989,10 +989,10 @@ gimp_layer_duplicate (GimpItem *item,
|
|||
|
||||
mask = gimp_item_duplicate (GIMP_ITEM (layer->mask),
|
||||
G_TYPE_FROM_INSTANCE (layer->mask));
|
||||
gimp_layer_add_mask (new_layer, GIMP_LAYER_MASK (mask), FALSE, NULL);
|
||||
gimp_layer_add_mask (new_layer, GIMP_LAYER_MASK (mask),
|
||||
layer->edit_mask, FALSE, NULL);
|
||||
|
||||
new_layer->apply_mask = layer->apply_mask;
|
||||
new_layer->edit_mask = layer->edit_mask;
|
||||
new_layer->show_mask = layer->show_mask;
|
||||
}
|
||||
}
|
||||
|
@ -1913,6 +1913,7 @@ gimp_layer_get_mask (GimpLayer *layer)
|
|||
GimpLayerMask *
|
||||
gimp_layer_add_mask (GimpLayer *layer,
|
||||
GimpLayerMask *mask,
|
||||
gboolean edit_mask,
|
||||
gboolean push_undo,
|
||||
GError **error)
|
||||
{
|
||||
|
@ -1954,7 +1955,7 @@ gimp_layer_add_mask (GimpLayer *layer,
|
|||
|
||||
layer->mask = g_object_ref_sink (mask);
|
||||
layer->apply_mask = TRUE;
|
||||
layer->edit_mask = TRUE;
|
||||
layer->edit_mask = edit_mask;
|
||||
layer->show_mask = FALSE;
|
||||
|
||||
gimp_layer_mask_set_layer (mask, layer);
|
||||
|
|
|
@ -160,6 +160,7 @@ GimpLayerMask * gimp_layer_create_mask (GimpLayer *layer,
|
|||
GimpChannel *channel);
|
||||
GimpLayerMask * gimp_layer_add_mask (GimpLayer *layer,
|
||||
GimpLayerMask *mask,
|
||||
gboolean edit_mask,
|
||||
gboolean push_undo,
|
||||
GError **error);
|
||||
void gimp_layer_apply_mask (GimpLayer *layer,
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_LAYER_MASK
|
||||
PROP_LAYER_MASK,
|
||||
PROP_EDIT_MASK
|
||||
};
|
||||
|
||||
|
||||
|
@ -83,6 +84,11 @@ gimp_layer_mask_undo_class_init (GimpLayerMaskUndoClass *klass)
|
|||
GIMP_TYPE_LAYER_MASK,
|
||||
GIMP_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (object_class, PROP_EDIT_MASK,
|
||||
g_param_spec_boolean ("edit-mask", NULL, NULL,
|
||||
FALSE,
|
||||
GIMP_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -114,6 +120,9 @@ gimp_layer_mask_undo_set_property (GObject *object,
|
|||
case PROP_LAYER_MASK:
|
||||
layer_mask_undo->layer_mask = g_value_dup_object (value);
|
||||
break;
|
||||
case PROP_EDIT_MASK:
|
||||
layer_mask_undo->edit_mask = g_value_get_boolean (value);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
|
@ -134,6 +143,9 @@ gimp_layer_mask_undo_get_property (GObject *object,
|
|||
case PROP_LAYER_MASK:
|
||||
g_value_set_object (value, layer_mask_undo->layer_mask);
|
||||
break;
|
||||
case PROP_EDIT_MASK:
|
||||
g_value_set_boolean (value, layer_mask_undo->edit_mask);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
|
@ -175,13 +187,15 @@ gimp_layer_mask_undo_pop (GimpUndo *undo,
|
|||
{
|
||||
/* remove layer mask */
|
||||
|
||||
layer_mask_undo->edit_mask = gimp_layer_get_edit_mask (layer);
|
||||
gimp_layer_apply_mask (layer, GIMP_MASK_DISCARD, FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* restore layer mask */
|
||||
|
||||
gimp_layer_add_mask (layer, layer_mask_undo->layer_mask, FALSE, NULL);
|
||||
gimp_layer_add_mask (layer, layer_mask_undo->layer_mask,
|
||||
layer_mask_undo->edit_mask, FALSE, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ struct _GimpLayerMaskUndo
|
|||
GimpItemUndo parent_instance;
|
||||
|
||||
GimpLayerMask *layer_mask;
|
||||
gboolean edit_mask;
|
||||
};
|
||||
|
||||
struct _GimpLayerMaskUndoClass
|
||||
|
|
|
@ -50,6 +50,7 @@ struct _LayerAddMaskDialog
|
|||
GimpAddMaskType add_mask_type;
|
||||
GimpChannel *channel;
|
||||
gboolean invert;
|
||||
gboolean edit_mask;
|
||||
GimpAddMaskCallback callback;
|
||||
gpointer user_data;
|
||||
};
|
||||
|
@ -75,12 +76,14 @@ layer_add_mask_dialog_new (GList *layers,
|
|||
GtkWidget *parent,
|
||||
GimpAddMaskType add_mask_type,
|
||||
gboolean invert,
|
||||
gboolean edit_mask,
|
||||
GimpAddMaskCallback callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
LayerAddMaskDialog *private;
|
||||
GtkWidget *dialog;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *combo;
|
||||
GtkWidget *button;
|
||||
|
@ -100,6 +103,7 @@ layer_add_mask_dialog_new (GList *layers,
|
|||
private->layers = layers;
|
||||
private->add_mask_type = add_mask_type;
|
||||
private->invert = invert;
|
||||
private->edit_mask = edit_mask;
|
||||
private->callback = callback;
|
||||
private->user_data = user_data;
|
||||
|
||||
|
@ -182,15 +186,28 @@ layer_add_mask_dialog_new (GList *layers,
|
|||
gimp_container_view_select_item (GIMP_CONTAINER_VIEW (combo),
|
||||
GIMP_VIEWABLE (channel));
|
||||
|
||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
|
||||
gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
|
||||
gtk_widget_show (hbox);
|
||||
|
||||
button = gtk_check_button_new_with_mnemonic (_("In_vert mask"));
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), private->invert);
|
||||
gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
||||
gtk_widget_show (button);
|
||||
|
||||
g_signal_connect (button, "toggled",
|
||||
G_CALLBACK (gimp_toggle_button_update),
|
||||
&private->invert);
|
||||
|
||||
button = gtk_check_button_new_with_mnemonic (_("_Edit mask immediately"));
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), private->edit_mask);
|
||||
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
||||
gtk_widget_show (button);
|
||||
|
||||
g_signal_connect (button, "toggled",
|
||||
G_CALLBACK (gimp_toggle_button_update),
|
||||
&private->edit_mask);
|
||||
|
||||
return dialog;
|
||||
}
|
||||
|
||||
|
@ -226,6 +243,7 @@ layer_add_mask_dialog_response (GtkWidget *dialog,
|
|||
private->add_mask_type,
|
||||
private->channel,
|
||||
private->invert,
|
||||
private->edit_mask,
|
||||
private->user_data);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -24,6 +24,7 @@ typedef void (* GimpAddMaskCallback) (GtkWidget *dialog,
|
|||
GimpAddMaskType add_mask_type,
|
||||
GimpChannel *channel,
|
||||
gboolean invert,
|
||||
gboolean edit_mask,
|
||||
gpointer user_data);
|
||||
|
||||
|
||||
|
@ -32,6 +33,7 @@ GtkWidget * layer_add_mask_dialog_new (GList *layers,
|
|||
GtkWidget *parent,
|
||||
GimpAddMaskType add_mask_type,
|
||||
gboolean invert,
|
||||
gboolean edit_mask,
|
||||
GimpAddMaskCallback callback,
|
||||
gpointer user_data);
|
||||
|
||||
|
|
|
@ -2477,6 +2477,9 @@ prefs_dialog_new (Gimp *gimp,
|
|||
prefs_check_button_add (object, "layer-add-mask-invert",
|
||||
_("Invert mask"),
|
||||
GTK_BOX (vbox2));
|
||||
prefs_check_button_add (object, "layer-add-mask-edit-mask",
|
||||
_("Edit mask immediately"),
|
||||
GTK_BOX (vbox2));
|
||||
|
||||
/* Merge Layers Dialog */
|
||||
vbox2 = prefs_frame_new (_("Merge Layers Dialog"),
|
||||
|
|
|
@ -622,7 +622,7 @@ layer_add_mask_invoker (GimpProcedure *procedure,
|
|||
if (gimp_pdb_item_is_floating (GIMP_ITEM (mask),
|
||||
gimp_item_get_image (GIMP_ITEM (layer)),
|
||||
error))
|
||||
success = (gimp_layer_add_mask (layer, mask, TRUE, error) == mask);
|
||||
success = (gimp_layer_add_mask (layer, mask, TRUE, TRUE, error) == mask);
|
||||
else
|
||||
success = FALSE;
|
||||
}
|
||||
|
|
|
@ -428,8 +428,9 @@ gimp_create_mainimage (Gimp *gimp,
|
|||
NULL /*channel*/);
|
||||
gimp_layer_add_mask (layer,
|
||||
layer_mask,
|
||||
FALSE /*push_undo*/,
|
||||
NULL /*error*/);
|
||||
TRUE /* edit_mask */,
|
||||
FALSE /* push_undo */,
|
||||
NULL /* error */);
|
||||
|
||||
/* Image compression type
|
||||
*
|
||||
|
|
|
@ -1058,10 +1058,9 @@ xcf_load_add_masks (GimpImage *image)
|
|||
show_mask = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (layer),
|
||||
"gimp-layer-mask-show"));
|
||||
|
||||
gimp_layer_add_mask (layer, mask, FALSE, NULL);
|
||||
gimp_layer_add_mask (layer, mask, edit_mask, FALSE, NULL);
|
||||
|
||||
gimp_layer_set_apply_mask (layer, apply_mask, FALSE);
|
||||
gimp_layer_set_edit_mask (layer, edit_mask);
|
||||
gimp_layer_set_show_mask (layer, show_mask, FALSE);
|
||||
|
||||
g_object_set_data (G_OBJECT (layer), "gimp-layer-mask", NULL);
|
||||
|
|
|
@ -364,7 +364,7 @@ HELP
|
|||
if (gimp_pdb_item_is_floating (GIMP_ITEM (mask),
|
||||
gimp_item_get_image (GIMP_ITEM (layer)),
|
||||
error))
|
||||
success = (gimp_layer_add_mask (layer, mask, TRUE, error) == mask);
|
||||
success = (gimp_layer_add_mask (layer, mask, TRUE, TRUE, error) == mask);
|
||||
else
|
||||
success = FALSE;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue