[gimp] pdb: add gimp-image-merge-layer-group procedure
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] pdb: add gimp-image-merge-layer-group procedure
- Date: Sat, 7 Sep 2019 07:44:40 +0000 (UTC)
commit 62a6023b27e741c35f4a3d9afc9df0356d18f19c
Author: Ell <ell_se yahoo com>
Date: Sat Sep 7 10:20:03 2019 +0300
pdb: add gimp-image-merge-layer-group procedure
Oddly, we didn't have this one yet :P
app/pdb/image-cmds.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++
app/pdb/internal-procs.c | 2 +-
libgimp/gimp.def | 1 +
libgimp/gimpimage_pdb.c | 38 ++++++++++++++++++++++++
libgimp/gimpimage_pdb.h | 2 ++
pdb/groups/image.pdb | 43 +++++++++++++++++++++++++++
6 files changed, 161 insertions(+), 1 deletion(-)
---
diff --git a/app/pdb/image-cmds.c b/app/pdb/image-cmds.c
index c7ed26fda6..5e795f6501 100644
--- a/app/pdb/image-cmds.c
+++ b/app/pdb/image-cmds.c
@@ -37,6 +37,7 @@
#include "core/gimpchannel.h"
#include "core/gimpcontainer.h"
#include "core/gimpdrawable.h"
+#include "core/gimpgrouplayer.h"
#include "core/gimpimage-colormap.h"
#include "core/gimpimage-duplicate.h"
#include "core/gimpimage-merge.h"
@@ -1461,6 +1462,47 @@ image_merge_down_invoker (GimpProcedure *procedure,
return return_vals;
}
+static GimpValueArray *
+image_merge_layer_group_invoker (GimpProcedure *procedure,
+ Gimp *gimp,
+ GimpContext *context,
+ GimpProgress *progress,
+ const GimpValueArray *args,
+ GError **error)
+{
+ gboolean success = TRUE;
+ GimpValueArray *return_vals;
+ GimpImage *image;
+ GimpLayer *layer_group;
+ GimpLayer *layer = NULL;
+
+ image = g_value_get_object (gimp_value_array_index (args, 0));
+ layer_group = g_value_get_object (gimp_value_array_index (args, 1));
+
+ if (success)
+ {
+ if (gimp_pdb_item_is_attached (GIMP_ITEM (layer_group), image, 0, error) &&
+ gimp_pdb_item_is_group (GIMP_ITEM (layer_group), error))
+ {
+ layer = gimp_image_merge_group_layer (image,
+ GIMP_GROUP_LAYER (layer_group));
+
+ if (! layer)
+ success = FALSE;
+ }
+ else
+ success = FALSE;
+ }
+
+ return_vals = gimp_procedure_get_return_values (procedure, success,
+ error ? *error : NULL);
+
+ if (success)
+ g_value_set_object (gimp_value_array_index (return_vals, 1), layer);
+
+ return return_vals;
+}
+
static GimpValueArray *
image_get_colormap_invoker (GimpProcedure *procedure,
Gimp *gimp,
@@ -4066,6 +4108,40 @@ register_image_procs (GimpPDB *pdb)
gimp_pdb_register_procedure (pdb, procedure);
g_object_unref (procedure);
+ /*
+ * gimp-image-merge-layer-group
+ */
+ procedure = gimp_procedure_new (image_merge_layer_group_invoker);
+ gimp_object_set_static_name (GIMP_OBJECT (procedure),
+ "gimp-image-merge-layer-group");
+ gimp_procedure_set_static_strings (procedure,
+ "Merge the passed layer group's layers into one normal layer.",
+ "This procedure combines the layers of the passed layer group into a
single normal layer, replacing the group.",
+ "Ell",
+ "Ell",
+ "2019",
+ NULL);
+ gimp_procedure_add_argument (procedure,
+ gimp_param_spec_image ("image",
+ "image",
+ "The image",
+ FALSE,
+ GIMP_PARAM_READWRITE));
+ gimp_procedure_add_argument (procedure,
+ gimp_param_spec_layer ("layer-group",
+ "layer group",
+ "The layer group to merge",
+ FALSE,
+ GIMP_PARAM_READWRITE));
+ gimp_procedure_add_return_value (procedure,
+ gimp_param_spec_layer ("layer",
+ "layer",
+ "The resulting layer",
+ FALSE,
+ GIMP_PARAM_READWRITE));
+ gimp_pdb_register_procedure (pdb, procedure);
+ g_object_unref (procedure);
+
/*
* gimp-image-get-colormap
*/
diff --git a/app/pdb/internal-procs.c b/app/pdb/internal-procs.c
index 9a1782134e..3f904c5ada 100644
--- a/app/pdb/internal-procs.c
+++ b/app/pdb/internal-procs.c
@@ -28,7 +28,7 @@
#include "internal-procs.h"
-/* 745 procedures registered total */
+/* 746 procedures registered total */
void
internal_procs_init (GimpPDB *pdb)
diff --git a/libgimp/gimp.def b/libgimp/gimp.def
index 1ef5ce5ce3..ddef7dd9a5 100644
--- a/libgimp/gimp.def
+++ b/libgimp/gimp.def
@@ -437,6 +437,7 @@ EXPORTS
gimp_image_lower_item
gimp_image_lower_item_to_bottom
gimp_image_merge_down
+ gimp_image_merge_layer_group
gimp_image_merge_visible_layers
gimp_image_new
gimp_image_new_with_precision
diff --git a/libgimp/gimpimage_pdb.c b/libgimp/gimpimage_pdb.c
index 85fb087d3d..fb4f23a945 100644
--- a/libgimp/gimpimage_pdb.c
+++ b/libgimp/gimpimage_pdb.c
@@ -1726,6 +1726,44 @@ gimp_image_merge_down (GimpImage *image,
return layer;
}
+/**
+ * gimp_image_merge_layer_group:
+ * @image: The image.
+ * @layer_group: The layer group to merge.
+ *
+ * Merge the passed layer group's layers into one normal layer.
+ *
+ * This procedure combines the layers of the passed layer group into a
+ * single normal layer, replacing the group.
+ *
+ * Returns: (transfer none): The resulting layer.
+ **/
+GimpLayer *
+gimp_image_merge_layer_group (GimpImage *image,
+ GimpLayer *layer_group)
+{
+ GimpValueArray *args;
+ GimpValueArray *return_vals;
+ GimpLayer *layer = NULL;
+
+ args = gimp_value_array_new_from_types (NULL,
+ GIMP_TYPE_IMAGE, image,
+ GIMP_TYPE_LAYER, layer_group,
+ G_TYPE_NONE);
+
+ return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
+ "gimp-image-merge-layer-group",
+ args);
+ gimp_value_array_unref (args);
+
+ if (GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS)
+ layer = GIMP_VALUES_GET_LAYER (return_vals, 1);
+
+ gimp_value_array_unref (return_vals);
+
+ return layer;
+}
+
/**
* _gimp_image_get_colormap:
* @image: The image.
diff --git a/libgimp/gimpimage_pdb.h b/libgimp/gimpimage_pdb.h
index 4f3a128ff2..3cb3a0ede2 100644
--- a/libgimp/gimpimage_pdb.h
+++ b/libgimp/gimpimage_pdb.h
@@ -113,6 +113,8 @@ GimpLayer* gimp_image_merge_visible_layers (GimpImage
GimpLayer* gimp_image_merge_down (GimpImage *image,
GimpLayer *merge_layer,
GimpMergeType merge_type);
+GimpLayer* gimp_image_merge_layer_group (GimpImage *image,
+ GimpLayer *layer_group);
G_GNUC_INTERNAL guint8* _gimp_image_get_colormap (GimpImage *image,
gint *num_bytes);
G_GNUC_INTERNAL gboolean _gimp_image_set_colormap (GimpImage *image,
diff --git a/pdb/groups/image.pdb b/pdb/groups/image.pdb
index a4eccc13d8..d4cc31f499 100644
--- a/pdb/groups/image.pdb
+++ b/pdb/groups/image.pdb
@@ -797,6 +797,48 @@ CODE
);
}
+sub image_merge_layer_group {
+ $blurb = 'Merge the passed layer group\'s layers into one normal layer.';
+
+ $help = <<'HELP';
+This procedure combines the layers of the passed layer group into
+a single normal layer, replacing the group.
+HELP
+
+ &ell_pdb_misc('2019');
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' },
+ { name => 'layer_group', type => 'layer',
+ desc => 'The layer group to merge' },
+ );
+
+ @outargs = (
+ { name => 'layer', type => 'layer',
+ desc => 'The resulting layer' }
+ );
+
+ %invoke = (
+ headers => [ qw("core/gimpgrouplayer.h" "core/gimpimage-merge.h") ],
+ code => <<'CODE'
+{
+ if (gimp_pdb_item_is_attached (GIMP_ITEM (layer_group), image, 0, error) &&
+ gimp_pdb_item_is_group (GIMP_ITEM (layer_group), error))
+ {
+ layer = gimp_image_merge_group_layer (image,
+ GIMP_GROUP_LAYER (layer_group));
+
+ if (! layer)
+ success = FALSE;
+ }
+ else
+ success = FALSE;
+}
+CODE
+ );
+}
+
sub image_flatten {
$blurb = <<'BLURB';
Flatten all visible layers into a single layer. Discard all invisible layers.
@@ -2972,6 +3014,7 @@ CODE
image_raise_item_to_top image_lower_item_to_bottom
image_reorder_item
image_flatten image_merge_visible_layers image_merge_down
+ image_merge_layer_group
image_get_colormap image_set_colormap
image_get_metadata image_set_metadata
image_clean_all image_is_dirty
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]