static void gimp_filter_stack_remove (GimpContainer *container, GimpObject *object) { GimpFilterStack *stack = GIMP_FILTER_STACK (container); GimpFilter *filter = GIMP_FILTER (object); gint n_children; if (stack->graph) { gimp_filter_stack_remove_node (stack, filter); gegl_node_remove_child (stack->graph, gimp_filter_get_node (filter)); } GIMP_CONTAINER_CLASS (parent_class)->remove (container, object); gimp_filter_set_is_last_node (filter, FALSE); n_children = gimp_container_get_n_children (container); if (n_children > 0) { GimpFilter *last_node = (GimpFilter *) gimp_container_get_child_by_index (container, n_children - 1); gimp_filter_set_is_last_node (last_node, TRUE); } }
static void gimp_filter_stack_reorder (GimpContainer *container, GimpObject *object, gint new_index) { GimpFilterStack *stack = GIMP_FILTER_STACK (container); GimpFilter *filter = GIMP_FILTER (object); gint n_children; gint old_index; n_children = gimp_container_get_n_children (container); old_index = gimp_container_get_child_index (container, object); if (stack->graph) gimp_filter_stack_remove_node (stack, filter); if (old_index == n_children -1) { gimp_filter_set_is_last_node (filter, FALSE); } else if (new_index == n_children - 1) { GimpFilter *last_node = (GimpFilter *) gimp_container_get_child_by_index (container, n_children - 1); gimp_filter_set_is_last_node (last_node, FALSE); } GIMP_CONTAINER_CLASS (parent_class)->reorder (container, object, new_index); if (new_index == n_children - 1) { gimp_filter_set_is_last_node (filter, TRUE); } else if (old_index == n_children - 1) { GimpFilter *last_node = (GimpFilter *) gimp_container_get_child_by_index (container, n_children - 1); gimp_filter_set_is_last_node (last_node, TRUE); } if (stack->graph) gimp_filter_stack_add_node (stack, filter); }
static void gimp_filter_stack_update_last_node (GimpFilterStack *stack) { GList *list; gboolean found_last = FALSE; for (list = GIMP_LIST (stack)->queue->tail; list; list = g_list_previous (list)) { GimpFilter *filter = list->data; if (! found_last && gimp_filter_get_visible (filter)) { gimp_filter_set_is_last_node (filter, TRUE); found_last = TRUE; } else { gimp_filter_set_is_last_node (filter, FALSE); } } }
static void gimp_filter_stack_remove (GimpContainer *container, GimpObject *object) { GimpFilterStack *stack = GIMP_FILTER_STACK (container); GimpFilter *filter = GIMP_FILTER (object); if (stack->graph) { gimp_filter_stack_remove_node (stack, filter); gegl_node_remove_child (stack->graph, gimp_filter_get_node (filter)); } GIMP_CONTAINER_CLASS (parent_class)->remove (container, object); gimp_filter_set_is_last_node (filter, FALSE); gimp_filter_stack_update_last_node (stack); }
static void gimp_filter_stack_add (GimpContainer *container, GimpObject *object) { GimpFilterStack *stack = GIMP_FILTER_STACK (container); GimpFilter *filter = GIMP_FILTER (object); gint n_children; n_children = gimp_container_get_n_children (container); if (n_children == 0) gimp_filter_set_is_last_node (filter, TRUE); GIMP_CONTAINER_CLASS (parent_class)->add (container, object); if (stack->graph) { gegl_node_add_child (stack->graph, gimp_filter_get_node (filter)); gimp_filter_stack_add_node (stack, filter); } }