Esempio n. 1
0
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);
    }
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
        }
    }
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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);
    }
}