widgets, tools: Allow NDE filters on channels
This patch removes restrictions on applying
NDE filters to channels in the GUI. Note
that layer masks are still restricted, not for
technical reasons but because UX/UI needs
to be considered further.
(cherry picked from commit 54c95577df)
This commit is contained in:
parent
ee555b9e0c
commit
bc1f8cfd17
2 changed files with 63 additions and 80 deletions
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue