Example #1
0
void
view_use_gegl_cmd_callback (GtkAction *action,
                            gpointer   data)
{
  GimpImage        *image;
  GimpDisplayShell *shell;
  GList            *layers;
  GList            *list;
  gboolean          active;
  return_if_no_image (image, data);
  return_if_no_shell (shell, data);

  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_image_get_projection (image)->use_gegl = active;

  layers = gimp_image_get_layer_list (image);

  for (list = layers; list; list = g_list_next (list))
    {
      GimpLayer *layer = list->data;

      if (GIMP_IS_GROUP_LAYER (layer))
        gimp_group_layer_get_projection (GIMP_GROUP_LAYER (layer))->use_gegl = active;
    }

  g_list_free (layers);

  gimp_image_invalidate (image, 0, 0,
                         gimp_image_get_width  (image),
                         gimp_image_get_height (image));
  gimp_image_flush (image);
}
Example #2
0
static void
gimp_group_layer_undo_constructed (GObject *object)
{
    GimpGroupLayerUndo *group_layer_undo = GIMP_GROUP_LAYER_UNDO (object);
    GimpGroupLayer     *group;

    G_OBJECT_CLASS (parent_class)->constructed (object);

    g_assert (GIMP_IS_GROUP_LAYER (GIMP_ITEM_UNDO (object)->item));

    group = GIMP_GROUP_LAYER (GIMP_ITEM_UNDO (object)->item);

    switch (GIMP_UNDO (object)->undo_type)
    {
    case GIMP_UNDO_GROUP_LAYER_SUSPEND:
    case GIMP_UNDO_GROUP_LAYER_RESUME:
        break;

    case GIMP_UNDO_GROUP_LAYER_CONVERT:
        group_layer_undo->prev_type = gimp_drawable_get_base_type (GIMP_DRAWABLE (group));
        group_layer_undo->prev_precision = gimp_drawable_get_precision (GIMP_DRAWABLE (group));
        break;

    default:
        g_assert_not_reached ();
    }
}
Example #3
0
GimpLayer *
gimp_image_merge_group_layer (GimpImage      *image,
                              GimpGroupLayer *group)
{
  GimpLayer *parent;
  GimpLayer *layer;
  gint       index;

  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
  g_return_val_if_fail (GIMP_IS_GROUP_LAYER (group), NULL);
  g_return_val_if_fail (gimp_item_is_attached (GIMP_ITEM (group)), NULL);
  g_return_val_if_fail (gimp_item_get_image (GIMP_ITEM (group)) == image, NULL);

  gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_IMAGE_LAYERS_MERGE,
                               C_("undo-type", "Merge Layer Group"));

  parent = gimp_layer_get_parent (GIMP_LAYER (group));
  index  = gimp_item_get_index (GIMP_ITEM (group));

  layer = GIMP_LAYER (gimp_item_duplicate (GIMP_ITEM (group),
                                           GIMP_TYPE_LAYER));

  gimp_object_set_name (GIMP_OBJECT (layer), gimp_object_get_name (group));

  gimp_image_remove_layer (image, GIMP_LAYER (group), TRUE, NULL);
  gimp_image_add_layer (image, layer, parent, index, TRUE);

  gimp_image_undo_group_end (image);

  return layer;
}
Example #4
0
GimpUndo *
gimp_image_undo_push_group_layer_convert (GimpImage      *image,
                                          const gchar    *undo_desc,
                                          GimpGroupLayer *group)
{
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
  g_return_val_if_fail (GIMP_IS_GROUP_LAYER (group), NULL);
  g_return_val_if_fail (gimp_item_is_attached (GIMP_ITEM (group)), NULL);

  return gimp_image_undo_push (image, GIMP_TYPE_GROUP_LAYER_UNDO,
                               GIMP_UNDO_GROUP_LAYER_CONVERT, undo_desc,
                               GIMP_DIRTY_ITEM | GIMP_DIRTY_DRAWABLE,
                               "item", group,
                               NULL);
}