[gimp] app: layers-alpha-add|remove multi-layer aware.
- From: Jehan <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: layers-alpha-add|remove multi-layer aware.
- Date: Thu, 30 Jul 2020 19:03:26 +0000 (UTC)
commit 62eedd41b4098c54ebd9aca0455feed2ac45eac8
Author: Jehan <jehan girinstud io>
Date: Thu Jul 30 21:01:10 2020 +0200
app: layers-alpha-add|remove multi-layer aware.
app/actions/layers-actions.c | 20 +++++++++++---------
app/actions/layers-commands.c | 38 ++++++++++++++++++++++++--------------
app/core/core-enums.h | 2 ++
3 files changed, 37 insertions(+), 23 deletions(-)
---
diff --git a/app/actions/layers-actions.c b/app/actions/layers-actions.c
index 3fff0a0fa4..b2349ee872 100644
--- a/app/actions/layers-actions.c
+++ b/app/actions/layers-actions.c
@@ -769,14 +769,12 @@ layers_actions_update (GimpActionGroup *group,
gboolean fs = FALSE; /* floating sel */
gboolean ac = FALSE; /* active channel */
gboolean sel = FALSE;
- gboolean alpha = FALSE; /* alpha channel present */
gboolean indexed = FALSE; /* is indexed */
gboolean lock_alpha = TRUE;
gboolean can_lock_alpha = FALSE;
gboolean text_layer = FALSE;
gboolean writable = FALSE;
gboolean movable = FALSE;
- gboolean children = FALSE;
gboolean bs_mutable = FALSE; /* At least 1 selected layers' blend space is mutable. */
gboolean cs_mutable = FALSE; /* At least 1 selected layers' composite space is mutable. */
gboolean cm_mutable = FALSE; /* At least 1 selected layers' composite mode is mutable. */
@@ -792,6 +790,8 @@ layers_actions_update (GimpActionGroup *group,
gboolean have_writable = FALSE; /* At least 1 selected layer has no contents lock. */
gboolean have_prev = FALSE; /* At least 1 selected layer has a previous sibling. */
gboolean have_next = FALSE; /* At least 1 selected layer has a next sibling. */
+ gboolean have_alpha = FALSE; /* At least 1 selected layer has an alpha channel. */
+ gboolean have_no_alpha = FALSE; /* At least 1 selected layer has no alpha channel. */
gboolean all_visible = TRUE;
gboolean all_next_visible = TRUE;
@@ -918,6 +918,11 @@ layers_actions_update (GimpActionGroup *group,
if (! gimp_item_get_visible (iter->data))
all_visible = FALSE;
+ if (gimp_drawable_has_alpha (iter->data))
+ have_alpha = TRUE;
+ else
+ have_no_alpha = TRUE;
+
if (have_masks && have_no_masks &&
have_groups && have_no_groups &&
have_writable && ! all_writable &&
@@ -928,7 +933,8 @@ layers_actions_update (GimpActionGroup *group,
! prev_mode && ! next_mode &&
have_prev && have_next &&
bs_mutable && cs_mutable && cm_mutable &&
- ! all_visible && ! all_next_visible)
+ ! all_visible && ! all_next_visible &&
+ have_alpha && have_no_alpha)
break;
}
@@ -985,13 +991,9 @@ layers_actions_update (GimpActionGroup *group,
gimp_action_group_set_action_active (group, action, TRUE);
mask = gimp_layer_get_mask (layer);
- alpha = gimp_drawable_has_alpha (GIMP_DRAWABLE (layer));
writable = ! gimp_item_is_content_locked (GIMP_ITEM (layer));
movable = ! gimp_item_is_position_locked (GIMP_ITEM (layer));
- if (gimp_viewable_get_children (GIMP_VIEWABLE (layer)))
- children = TRUE;
-
text_layer = gimp_item_is_text_layer (GIMP_ITEM (layer));
}
}
@@ -1064,8 +1066,8 @@ layers_actions_update (GimpActionGroup *group,
SET_SENSITIVE ("layers-crop-to-selection", all_writable && all_movable && sel);
SET_SENSITIVE ("layers-crop-to-content", all_writable && all_movable);
- SET_SENSITIVE ("layers-alpha-add", writable && !children && !fs && !alpha);
- SET_SENSITIVE ("layers-alpha-remove", writable && !children && !fs && alpha);
+ SET_SENSITIVE ("layers-alpha-add", all_writable && have_no_groups && !fs && have_no_alpha);
+ SET_SENSITIVE ("layers-alpha-remove", all_writable && have_no_groups && !fs && have_alpha);
SET_SENSITIVE ("layers-lock-alpha", can_lock_alpha);
SET_ACTIVE ("layers-lock-alpha", lock_alpha);
diff --git a/app/actions/layers-commands.c b/app/actions/layers-commands.c
index 831c67d45b..926e85447c 100644
--- a/app/actions/layers-commands.c
+++ b/app/actions/layers-commands.c
@@ -1651,14 +1651,19 @@ layers_alpha_add_cmd_callback (GimpAction *action,
gpointer data)
{
GimpImage *image;
- GimpLayer *layer;
- return_if_no_layer (image, layer, data);
+ GList *layers;
+ GList *iter;
+ return_if_no_layers (image, layers, data);
- if (! gimp_drawable_has_alpha (GIMP_DRAWABLE (layer)))
- {
- gimp_layer_add_alpha (layer);
- gimp_image_flush (image);
- }
+ gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_LAYER_ADD_ALPHA,
+ _("Add Alpha Channel"));
+
+ for (iter = layers; iter; iter = iter->next)
+ if (! gimp_drawable_has_alpha (iter->data))
+ gimp_layer_add_alpha (iter->data);
+
+ gimp_image_undo_group_end (image);
+ gimp_image_flush (image);
}
void
@@ -1667,14 +1672,19 @@ layers_alpha_remove_cmd_callback (GimpAction *action,
gpointer data)
{
GimpImage *image;
- GimpLayer *layer;
- return_if_no_layer (image, layer, data);
+ GList *layers;
+ GList *iter;
+ return_if_no_layers (image, layers, data);
- if (gimp_drawable_has_alpha (GIMP_DRAWABLE (layer)))
- {
- gimp_layer_remove_alpha (layer, action_data_get_context (data));
- gimp_image_flush (image);
- }
+ gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_LAYER_ADD_ALPHA,
+ _("Remove Alpha Channel"));
+
+ for (iter = layers; iter; iter = iter->next)
+ if (gimp_drawable_has_alpha (iter->data))
+ gimp_layer_remove_alpha (iter->data, action_data_get_context (data));
+
+ gimp_image_undo_group_end (image);
+ gimp_image_flush (image);
}
void
diff --git a/app/core/core-enums.h b/app/core/core-enums.h
index 01226bd5d9..2b988c1ed7 100644
--- a/app/core/core-enums.h
+++ b/app/core/core-enums.h
@@ -526,8 +526,10 @@ typedef enum /*< pdb-skip >*/
GIMP_UNDO_GROUP_ITEM_SCALE, /*< desc="Scale item" >*/
GIMP_UNDO_GROUP_ITEM_RESIZE, /*< desc="Resize item" >*/
GIMP_UNDO_GROUP_LAYER_ADD, /*< desc="Add layer" >*/
+ GIMP_UNDO_GROUP_LAYER_ADD_ALPHA, /*< desc="Add alpha channel" >*/
GIMP_UNDO_GROUP_LAYER_ADD_MASK, /*< desc="Add layer mask" >*/
GIMP_UNDO_GROUP_LAYER_APPLY_MASK, /*< desc="Apply layer mask" >*/
+ GIMP_UNDO_GROUP_LAYER_REMOVE_ALPHA, /*< desc="Remove alpha channel" >*/
GIMP_UNDO_GROUP_LAYER_LOCK_ALPHA, /*< desc="Lock/Unlock alpha channels" >*/
GIMP_UNDO_GROUP_LAYER_OPACITY, /*< desc="Set layers opacity" >*/
GIMP_UNDO_GROUP_LAYER_MODE, /*< desc="Set layers mode" >*/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]