diff --git a/app/tools/gimpfiltertool.c b/app/tools/gimpfiltertool.c index ea08e81954..698ee534da 100644 --- a/app/tools/gimpfiltertool.c +++ b/app/tools/gimpfiltertool.c @@ -56,6 +56,7 @@ #include "core/gimpimage-pick-color.h" #include "core/gimpimage-undo-push.h" #include "core/gimplayer.h" +#include "core/gimplayermask.h" #include "core/gimplist.h" #include "core/gimppickable.h" #include "core/gimpprogress.h" @@ -405,8 +406,10 @@ gimp_filter_tool_initialize (GimpTool *tool, "preview", NULL); /* Only show merge filter option if we're not editing an NDE filter or - * applying to a layer group */ - if ((GIMP_IS_LAYER (drawable) && ! GIMP_IS_GROUP_LAYER (drawable)) && + * applying to a layer group or layer mask */ + if (((GIMP_IS_LAYER (drawable) || GIMP_IS_CHANNEL (drawable)) && + ! GIMP_IS_GROUP_LAYER (drawable) && + ! GIMP_IS_LAYER_MASK (drawable)) && ! filter_tool->existing_filter) { gchar *operation_name = NULL; @@ -551,8 +554,9 @@ gimp_filter_tool_control (GimpTool *tool, drawable = gimp_drawable_filter_get_drawable (filter_tool->filter); /* TODO: Expand non-destructive editing to other drawables - * besides layers */ - if (! GIMP_IS_LAYER (drawable) || + * besides layers and channels */ + if ((! GIMP_IS_LAYER (drawable) && ! GIMP_IS_CHANNEL (drawable)) || + GIMP_IS_LAYER_MASK (drawable) || (! filter_tool->existing_filter && options->merge_filter)) non_destructive = FALSE; @@ -1354,8 +1358,9 @@ gimp_filter_tool_commit (GimpFilterTool *filter_tool, gimp_filter_tool_remove_guide (filter_tool); - /* TODO: Review when we can apply NDE filters to channels/layer masks */ - if (GIMP_IS_LAYER (drawable)) + /* TODO: Review when we can apply NDE filters to layer masks */ + if (GIMP_IS_LAYER (drawable) || + (GIMP_IS_CHANNEL (drawable) && ! GIMP_IS_LAYER_MASK (drawable))) gimp_drawable_update (drawable, 0, 0, -1, -1); gimp_image_flush (gimp_display_get_image (tool->display)); diff --git a/app/widgets/gimpdrawabletreeview.c b/app/widgets/gimpdrawabletreeview.c index d29529c6fc..6ae5499db0 100644 --- a/app/widgets/gimpdrawabletreeview.c +++ b/app/widgets/gimpdrawabletreeview.c @@ -207,6 +207,7 @@ gimp_drawable_tree_view_constructed (GObject *object) GimpItemTreeView *item_view = GIMP_ITEM_TREE_VIEW (object); GimpDrawableTreeView *view = GIMP_DRAWABLE_TREE_VIEW (object); GtkIconSize button_icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR; + GtkTreeViewColumn *column; gint pixel_icon_size = 16; gint button_spacing; @@ -218,39 +219,33 @@ gimp_drawable_tree_view_constructed (GObject *object) NULL); gtk_icon_size_lookup (button_icon_size, &pixel_icon_size, NULL); - /* TODO: Expand layer effects to other drawable types */ - if (GIMP_IS_LAYER_TREE_VIEW (object)) - { - GtkTreeViewColumn *column; + column = gtk_tree_view_column_new (); + view->priv->filters_header_image = + gtk_image_new_from_icon_name (GIMP_ICON_EFFECT, button_icon_size); + gimp_widget_set_identifier (view->priv->filters_header_image, + "item-effect-header-icon"); + gtk_tree_view_column_set_widget (column, view->priv->filters_header_image); + gtk_widget_show (view->priv->filters_header_image); + gtk_tree_view_insert_column (tree_view->view, column, 2); - column = gtk_tree_view_column_new (); - view->priv->filters_header_image = - gtk_image_new_from_icon_name (GIMP_ICON_EFFECT, button_icon_size); - gimp_widget_set_identifier (view->priv->filters_header_image, - "item-effect-header-icon"); - gtk_tree_view_column_set_widget (column, view->priv->filters_header_image); - gtk_widget_show (view->priv->filters_header_image); - gtk_tree_view_insert_column (tree_view->view, column, 2); + view->priv->filters_cell = gimp_cell_renderer_toggle_new (GIMP_ICON_EFFECT); + g_object_set (view->priv->filters_cell, + "xpad", 0, + "ypad", 0, + "icon-size", pixel_icon_size, + NULL); + gtk_tree_view_column_pack_start (column, view->priv->filters_cell, FALSE); + gtk_tree_view_column_set_attributes (column, view->priv->filters_cell, + "active", + view->priv->model_column_filters, + NULL); - view->priv->filters_cell = gimp_cell_renderer_toggle_new (GIMP_ICON_EFFECT); - g_object_set (view->priv->filters_cell, - "xpad", 0, - "ypad", 0, - "icon-size", pixel_icon_size, - NULL); - gtk_tree_view_column_pack_start (column, view->priv->filters_cell, FALSE); - gtk_tree_view_column_set_attributes (column, view->priv->filters_cell, - "active", - view->priv->model_column_filters, - NULL); + gimp_container_tree_view_add_toggle_cell (tree_view, + view->priv->filters_cell); - gimp_container_tree_view_add_toggle_cell (tree_view, - view->priv->filters_cell); - - g_signal_connect (view->priv->filters_cell, "clicked", - G_CALLBACK (gimp_drawable_tree_view_filters_cell_clicked), - item_view); - } + g_signal_connect (view->priv->filters_cell, "clicked", + G_CALLBACK (gimp_drawable_tree_view_filters_cell_clicked), + item_view); gimp_dnd_viewable_dest_add (gimp_item_tree_view_get_new_button (item_view), GIMP_TYPE_PATTERN, @@ -297,26 +292,23 @@ gimp_drawable_tree_view_style_updated (GtkWidget *widget) gtk_icon_size_lookup (button_icon_size, &pixel_icon_size, NULL); - if (GIMP_IS_LAYER_TREE_VIEW (view)) + gtk_image_get_icon_name (GTK_IMAGE (view->priv->filters_header_image), + &old_icon_name, &old_size); + + if (button_icon_size != old_size) { - gtk_image_get_icon_name (GTK_IMAGE (view->priv->filters_header_image), - &old_icon_name, &old_size); + gchar *icon_name = g_strdup (old_icon_name); - if (button_icon_size != old_size) - { - gchar *icon_name = g_strdup (old_icon_name); - - gtk_image_set_from_icon_name (GTK_IMAGE (view->priv->filters_header_image), - icon_name, button_icon_size); - g_free (icon_name); - } - - g_object_set (view->priv->filters_cell, - "icon-name", GIMP_ICON_EFFECT, - "icon-size", pixel_icon_size, - NULL); + gtk_image_set_from_icon_name (GTK_IMAGE (view->priv->filters_header_image), + icon_name, button_icon_size); + g_free (icon_name); } + g_object_set (view->priv->filters_cell, + "icon-name", GIMP_ICON_EFFECT, + "icon-size", pixel_icon_size, + NULL); + GTK_WIDGET_CLASS (parent_class)->style_updated (widget); } @@ -333,26 +325,16 @@ gimp_drawable_tree_view_set_container (GimpContainerView *view, old_container = gimp_container_view_get_container (view); if (old_container) - { - if (GIMP_IS_LAYER_TREE_VIEW (drawable_view)) - { - g_clear_pointer (&drawable_view->priv->filters_changed_handler, - gimp_tree_handler_disconnect); - } - } + g_clear_pointer (&drawable_view->priv->filters_changed_handler, + gimp_tree_handler_disconnect); parent_view_iface->set_container (view, container); if (container) - { - if (GIMP_IS_LAYER_TREE_VIEW (drawable_view)) - { - drawable_view->priv->filters_changed_handler = - gimp_tree_handler_connect (container, "filters-changed", - G_CALLBACK (gimp_drawable_tree_view_filters_changed), - view); - } - } + drawable_view->priv->filters_changed_handler = + gimp_tree_handler_connect (container, "filters-changed", + G_CALLBACK (gimp_drawable_tree_view_filters_changed), + view); } static gpointer @@ -363,24 +345,20 @@ gimp_drawable_tree_view_insert_item (GimpContainerView *view, { GimpContainerTreeView *tree_view = GIMP_CONTAINER_TREE_VIEW (view); GimpDrawableTreeView *drawable_view = GIMP_DRAWABLE_TREE_VIEW (view); + GimpContainer *filters; GtkTreeIter *iter; + gint n_filters; iter = parent_view_iface->insert_item (view, viewable, parent_insert_data, index); - if (GIMP_IS_LAYER_TREE_VIEW (view)) - { - GimpContainer *filters; - gint n_filters; + filters = gimp_drawable_get_filters (GIMP_DRAWABLE (viewable)); + n_filters = gimp_container_get_n_children (filters); - filters = gimp_drawable_get_filters (GIMP_DRAWABLE (viewable)); - n_filters = gimp_container_get_n_children (filters); - - gtk_tree_store_set (GTK_TREE_STORE (tree_view->model), iter, - drawable_view->priv->model_column_filters, - n_filters > 0, - -1); - } + gtk_tree_store_set (GTK_TREE_STORE (tree_view->model), iter, + drawable_view->priv->model_column_filters, + n_filters > 0, + -1); return iter; }