tools: Add NDE support for group layers

This patch allows NDE filters to be
applied to group layers as well.
The "merge down" function is disabled.
This commit is contained in:
Alx Sa 2024-02-27 20:10:50 +00:00
parent 71b41c68c2
commit 69314ba087
4 changed files with 23 additions and 18 deletions

View File

@ -911,6 +911,7 @@ filters_actions_update (GimpActionGroup *group,
gboolean gray = FALSE;
gboolean alpha = FALSE;
gboolean supports_alpha = FALSE;
gboolean is_group = FALSE;
image = action_data_get_image (data);
@ -937,7 +938,7 @@ filters_actions_update (GimpActionGroup *group,
writable = ! gimp_item_is_content_locked (item, NULL);
if (gimp_viewable_get_children (GIMP_VIEWABLE (drawable)))
writable = FALSE;
is_group = TRUE;
}
g_list_free (drawables);
@ -947,7 +948,7 @@ filters_actions_update (GimpActionGroup *group,
gimp_action_group_set_action_sensitive (group, action, (condition) != 0, NULL)
SET_SENSITIVE ("filters-alien-map", writable);
SET_SENSITIVE ("filters-antialias", writable);
SET_SENSITIVE ("filters-antialias", writable && !is_group);
SET_SENSITIVE ("filters-apply-canvas", writable);
SET_SENSITIVE ("filters-apply-lens", writable);
SET_SENSITIVE ("filters-bayer-matrix", writable);
@ -974,11 +975,11 @@ filters_actions_update (GimpActionGroup *group,
SET_SENSITIVE ("filters-desaturate", writable && !gray);
SET_SENSITIVE ("filters-difference-of-gaussians", writable);
SET_SENSITIVE ("filters-diffraction-patterns", writable);
SET_SENSITIVE ("filters-dilate", writable);
SET_SENSITIVE ("filters-dilate", writable && !is_group);
SET_SENSITIVE ("filters-displace", writable);
SET_SENSITIVE ("filters-distance-map", writable);
SET_SENSITIVE ("filters-dropshadow", writable && alpha);
SET_SENSITIVE ("filters-edge", writable);
SET_SENSITIVE ("filters-edge", writable && !is_group);
SET_SENSITIVE ("filters-edge-laplace", writable);
SET_SENSITIVE ("filters-edge-neon", writable);
SET_SENSITIVE ("filters-edge-sobel", writable);
@ -997,9 +998,9 @@ filters_actions_update (GimpActionGroup *group,
SET_SENSITIVE ("filters-hue-chroma", writable);
SET_SENSITIVE ("filters-hue-saturation", writable && !gray);
SET_SENSITIVE ("filters-illusion", writable);
SET_SENSITIVE ("filters-invert-linear", writable);
SET_SENSITIVE ("filters-invert-perceptual", writable);
SET_SENSITIVE ("filters-invert-value", writable);
SET_SENSITIVE ("filters-invert-linear", writable && !is_group);
SET_SENSITIVE ("filters-invert-perceptual", writable && !is_group);
SET_SENSITIVE ("filters-invert-value", writable && !is_group);
SET_SENSITIVE ("filters-image-gradient", writable);
SET_SENSITIVE ("filters-kaleidoscope", writable);
SET_SENSITIVE ("filters-lens-blur", writable);

View File

@ -448,6 +448,10 @@ gimp_image_merge_group_layer (GimpImage *image,
gimp_layer_set_composite_mode (GIMP_LAYER (group), composite_mode, TRUE);
}
/* Merge down filter effects */
gimp_drawable_merge_filters (GIMP_DRAWABLE (group));
gimp_drawable_clear_filters (GIMP_DRAWABLE (group));
layer = GIMP_LAYER (gimp_item_duplicate (GIMP_ITEM (group),
GIMP_TYPE_LAYER));

View File

@ -304,15 +304,6 @@ gimp_filter_tool_initialize (GimpTool *tool,
}
drawable = drawables->data;
if (gimp_viewable_get_children (GIMP_VIEWABLE (drawable)))
{
g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
_("Cannot modify the pixels of layer groups."));
g_list_free (drawables);
return FALSE;
}
if (gimp_item_is_content_locked (GIMP_ITEM (drawable), &locked_item))
{
g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,

View File

@ -2732,7 +2732,8 @@ gimp_item_tree_view_effects_merged_clicked (GtkWidget *widget,
return;
}
if (view->priv->effects_drawable)
if (view->priv->effects_drawable &&
! gimp_viewable_get_children (GIMP_VIEWABLE (view->priv->effects_drawable)))
{
GimpImage *image = view->priv->image;
GeglNode *op = gimp_drawable_filter_get_operation (view->priv->effects_filter);
@ -3239,12 +3240,20 @@ static void
gimp_item_tree_effects_set_sensitive (GimpItemTreeView *view,
gboolean is_sensitive)
{
gboolean is_group = FALSE;
/* Do not allow merging down effects on group layers */
if (view->priv->effects_drawable &&
gimp_viewable_get_children (GIMP_VIEWABLE (view->priv->effects_drawable)))
is_group = TRUE;
gtk_widget_set_sensitive (view->priv->effects_box, is_sensitive);
gtk_widget_set_sensitive (view->priv->effects_visible_button, is_sensitive);
gtk_widget_set_sensitive (view->priv->effects_edit_button, is_sensitive);
gtk_widget_set_sensitive (view->priv->effects_raise_button, is_sensitive);
gtk_widget_set_sensitive (view->priv->effects_lower_button, is_sensitive);
gtk_widget_set_sensitive (view->priv->effects_merge_button, is_sensitive);
gtk_widget_set_sensitive (view->priv->effects_merge_button,
(is_sensitive && ! is_group));
gtk_widget_set_sensitive (view->priv->effects_remove_button, is_sensitive);
}