app: add gimp_drawable_raise,lower_filter()

and move code there from gimpitemtreeview.c
This commit is contained in:
Michael Natterer 2025-05-29 13:18:40 +02:00
parent fb199fba34
commit a790dc3253
3 changed files with 108 additions and 61 deletions

View file

@ -143,6 +143,81 @@ gimp_drawable_has_filter (GimpDrawable *drawable,
return filter_exists;
}
gboolean
gimp_drawable_raise_filter (GimpDrawable *drawable,
GimpFilter *filter)
{
gint index;
g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), FALSE);
g_return_val_if_fail (GIMP_IS_DRAWABLE_FILTER (filter), FALSE);
g_return_val_if_fail (gimp_drawable_has_filter (drawable, filter), FALSE);
if (gimp_drawable_filter_get_mask (GIMP_DRAWABLE_FILTER (filter)) == NULL)
return FALSE;
index = gimp_container_get_child_index (drawable->private->filter_stack,
GIMP_OBJECT (filter));
index--;
if (index >= 0)
{
gimp_image_undo_push_filter_reorder (gimp_item_get_image (GIMP_ITEM (drawable)),
_("Reorder filter"),
drawable,
GIMP_DRAWABLE_FILTER (filter));
gimp_container_reorder (drawable->private->filter_stack,
GIMP_OBJECT (filter), index);
gimp_item_refresh_filters (GIMP_ITEM (drawable));
return TRUE;
}
return FALSE;
}
gboolean
gimp_drawable_lower_filter (GimpDrawable *drawable,
GimpFilter *filter)
{
gint index;
g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), FALSE);
g_return_val_if_fail (GIMP_IS_DRAWABLE_FILTER (filter), FALSE);
g_return_val_if_fail (gimp_drawable_has_filter (drawable, filter), FALSE);
if (gimp_drawable_filter_get_mask (GIMP_DRAWABLE_FILTER (filter)) == NULL)
return FALSE;
index = gimp_container_get_child_index (drawable->private->filter_stack,
GIMP_OBJECT (filter));
index++;
if (index < gimp_container_get_n_children (drawable->private->filter_stack))
{
/* Don't rearrange filters with floating selection */
if (! GIMP_IS_DRAWABLE_FILTER (gimp_container_get_child_by_index (drawable->private->filter_stack,
index)))
return FALSE;
gimp_image_undo_push_filter_reorder (gimp_item_get_image (GIMP_ITEM (drawable)),
_("Reorder filter"),
drawable,
GIMP_DRAWABLE_FILTER (filter));
gimp_container_reorder (drawable->private->filter_stack,
GIMP_OBJECT (filter), index);
gimp_item_refresh_filters (GIMP_ITEM (drawable));
return TRUE;
}
return FALSE;
}
void
gimp_drawable_merge_filters (GimpDrawable *drawable)
{

View file

@ -42,6 +42,11 @@ void gimp_drawable_clear_filters (GimpDrawable *drawable);
gboolean gimp_drawable_has_filter (GimpDrawable *drawable,
GimpFilter *filter);
gboolean gimp_drawable_raise_filter (GimpDrawable *drawable,
GimpFilter *filter);
gboolean gimp_drawable_lower_filter (GimpDrawable *drawable,
GimpFilter *filter);
void gimp_drawable_merge_filters (GimpDrawable *drawable);
gboolean gimp_drawable_merge_filter (GimpDrawable *drawable,
GimpFilter *filter,

View file

@ -2710,10 +2710,8 @@ gimp_item_tree_view_effects_raise_clicked (GtkWidget *widget,
GimpItemTreeView *view)
{
GimpImage *image = view->priv->image;
GimpDrawable *drawable = NULL;
if (! view->priv->effects_filter ||
! GIMP_IS_DRAWABLE_FILTER (view->priv->effects_filter))
if (! GIMP_IS_DRAWABLE_FILTER (view->priv->effects_filter))
return;
if (gimp_drawable_filter_get_mask (view->priv->effects_filter) == NULL)
@ -2723,36 +2721,24 @@ gimp_item_tree_view_effects_raise_clicked (GtkWidget *widget,
return;
}
drawable = gimp_drawable_filter_get_drawable (view->priv->effects_filter);
if (drawable)
if (gimp_drawable_raise_filter (view->priv->effects_drawable,
GIMP_FILTER (view->priv->effects_filter)))
{
GimpContainer *filters;
gint index;
filters = gimp_drawable_get_filters (drawable);
index = gimp_container_get_child_index (filters,
GIMP_OBJECT (view->priv->effects_filter));
index--;
if (index >= 0)
{
gimp_image_undo_push_filter_reorder (image, _("Reorder filter"),
drawable,
view->priv->effects_filter);
gimp_container_reorder (filters, GIMP_OBJECT (view->priv->effects_filter),
index);
if (gtk_widget_get_sensitive (view->priv->effects_edit_button))
{
GimpContainer *container;
gint index;
container =
gimp_drawable_get_filters (GIMP_DRAWABLE (view->priv->effects_drawable));
index = gimp_container_get_child_index (container,
GIMP_OBJECT (view->priv->effects_filter));
gtk_widget_set_sensitive (view->priv->effects_lower_button, TRUE);
if (index == 0)
gtk_widget_set_sensitive (view->priv->effects_raise_button, FALSE);
}
gimp_item_refresh_filters (GIMP_ITEM (view->priv->effects_drawable));
}
}
}
@ -2761,10 +2747,8 @@ gimp_item_tree_view_effects_lower_clicked (GtkWidget *widget,
GimpItemTreeView *view)
{
GimpImage *image = view->priv->image;
GimpDrawable *drawable = NULL;
if (! view->priv->effects_filter ||
! GIMP_IS_DRAWABLE_FILTER (view->priv->effects_filter))
if (! GIMP_IS_DRAWABLE_FILTER (view->priv->effects_filter))
return;
if (gimp_drawable_filter_get_mask (view->priv->effects_filter) == NULL)
@ -2774,40 +2758,23 @@ gimp_item_tree_view_effects_lower_clicked (GtkWidget *widget,
return;
}
drawable = gimp_drawable_filter_get_drawable (view->priv->effects_filter);
if (drawable)
if (gimp_drawable_lower_filter (view->priv->effects_drawable,
GIMP_FILTER (view->priv->effects_filter)))
{
GimpContainer *filters;
gint index;
filters = gimp_drawable_get_filters (drawable);
index = gimp_container_get_child_index (filters,
GIMP_OBJECT (view->priv->effects_filter));
index++;
if (index < gimp_container_get_n_children (filters))
{
/* Don't rearrange filters with floating selection */
if (! GIMP_IS_DRAWABLE_FILTER (
gimp_container_get_child_by_index (filters, index)))
return;
gimp_image_undo_push_filter_reorder (image, _("Reorder filter"),
drawable,
view->priv->effects_filter);
gimp_container_reorder (filters, GIMP_OBJECT (view->priv->effects_filter),
index);
if (gtk_widget_get_sensitive (view->priv->effects_edit_button))
{
gtk_widget_set_sensitive (view->priv->effects_raise_button, TRUE);
if (index == gimp_container_get_n_children (filters) - 1)
gtk_widget_set_sensitive (view->priv->effects_lower_button, FALSE);
}
GimpContainer *container;
gint index;
gimp_item_refresh_filters (GIMP_ITEM (drawable));
container =
gimp_drawable_get_filters (GIMP_DRAWABLE (view->priv->effects_drawable));
index = gimp_container_get_child_index (container,
GIMP_OBJECT (view->priv->effects_filter));
gtk_widget_set_sensitive (view->priv->effects_raise_button, TRUE);
if (index == gimp_container_get_n_children (container) - 1)
gtk_widget_set_sensitive (view->priv->effects_lower_button, FALSE);
}
}
}