[gimp] pdb, libgimp, app: add gimp_drawable_get_thumbnail_format()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] pdb, libgimp, app: add gimp_drawable_get_thumbnail_format()
- Date: Wed, 10 Jul 2019 13:11:36 +0000 (UTC)
commit fc89dfb09beed19620dc168d5c8855510841e23f
Author: Michael Natterer <mitch gimp org>
Date: Wed Jul 10 15:10:03 2019 +0200
pdb, libgimp, app: add gimp_drawable_get_thumbnail_format()
so plug-ins can allocate buffers and stuff before getting the actual
thumbnail data.
app/pdb/drawable-cmds.c | 61 ++++++++++++++++++++
app/pdb/internal-procs.c | 2 +-
libgimp/gimp.def | 1 +
libgimp/gimpdrawable.c | 21 +++++++
libgimp/gimpdrawable.h | 1 +
libgimp/gimpdrawable_pdb.c | 34 +++++++++++
libgimp/gimpdrawable_pdb.h | 141 +++++++++++++++++++++++----------------------
pdb/groups/drawable.pdb | 33 +++++++++++
8 files changed, 223 insertions(+), 71 deletions(-)
---
diff --git a/app/pdb/drawable-cmds.c b/app/pdb/drawable-cmds.c
index 861f3bcbdd..aacea52332 100644
--- a/app/pdb/drawable-cmds.c
+++ b/app/pdb/drawable-cmds.c
@@ -90,6 +90,36 @@ drawable_get_format_invoker (GimpProcedure *procedure,
return return_vals;
}
+static GimpValueArray *
+drawable_get_thumbnail_format_invoker (GimpProcedure *procedure,
+ Gimp *gimp,
+ GimpContext *context,
+ GimpProgress *progress,
+ const GimpValueArray *args,
+ GError **error)
+{
+ gboolean success = TRUE;
+ GimpValueArray *return_vals;
+ GimpDrawable *drawable;
+ gchar *format = NULL;
+
+ drawable = gimp_value_get_drawable (gimp_value_array_index (args, 0), gimp);
+
+ if (success)
+ {
+ format = g_strdup (babl_format_get_encoding (gimp_drawable_get_preview_format (drawable)));
+
+ }
+
+ return_vals = gimp_procedure_get_return_values (procedure, success,
+ error ? *error : NULL);
+
+ if (success)
+ g_value_take_string (gimp_value_array_index (return_vals, 1), format);
+
+ return return_vals;
+}
+
static GimpValueArray *
drawable_type_invoker (GimpProcedure *procedure,
Gimp *gimp,
@@ -994,6 +1024,37 @@ register_drawable_procs (GimpPDB *pdb)
gimp_pdb_register_procedure (pdb, procedure);
g_object_unref (procedure);
+ /*
+ * gimp-drawable-get-thumbnail-format
+ */
+ procedure = gimp_procedure_new (drawable_get_thumbnail_format_invoker);
+ gimp_object_set_static_name (GIMP_OBJECT (procedure),
+ "gimp-drawable-get-thumbnail-format");
+ gimp_procedure_set_static_strings (procedure,
+ "gimp-drawable-get-thumbnail-format",
+ "Returns the drawable's thumbnail Babl format",
+ "This procedure returns the drawable's thumbnail Babl format.\n"
+ "Thumbnails are always 8-bit images, see 'gimp-drawable-thumbnail' and
'gimp-drawable-sub-thmbnail'.",
+ "Michael Natterer <mitch gimp org>",
+ "Michael Natterer",
+ "2019",
+ NULL);
+ gimp_procedure_add_argument (procedure,
+ gimp_param_spec_drawable_id ("drawable",
+ "drawable",
+ "The drawable",
+ pdb->gimp, FALSE,
+ GIMP_PARAM_READWRITE));
+ gimp_procedure_add_return_value (procedure,
+ gimp_param_spec_string ("format",
+ "format",
+ "The drawable's thumbnail Babl format",
+ FALSE, FALSE, FALSE,
+ NULL,
+ GIMP_PARAM_READWRITE));
+ gimp_pdb_register_procedure (pdb, procedure);
+ g_object_unref (procedure);
+
/*
* gimp-drawable-type
*/
diff --git a/app/pdb/internal-procs.c b/app/pdb/internal-procs.c
index 756455f1cb..271e2f7741 100644
--- a/app/pdb/internal-procs.c
+++ b/app/pdb/internal-procs.c
@@ -28,7 +28,7 @@
#include "internal-procs.h"
-/* 734 procedures registered total */
+/* 735 procedures registered total */
void
internal_procs_init (GimpPDB *pdb)
diff --git a/libgimp/gimp.def b/libgimp/gimp.def
index 1282c91a90..bc83801eab 100644
--- a/libgimp/gimp.def
+++ b/libgimp/gimp.def
@@ -212,6 +212,7 @@ EXPORTS
gimp_drawable_get_sub_thumbnail_data
gimp_drawable_get_thumbnail
gimp_drawable_get_thumbnail_data
+ gimp_drawable_get_thumbnail_format
gimp_drawable_get_tile
gimp_drawable_has_alpha
gimp_drawable_height
diff --git a/libgimp/gimpdrawable.c b/libgimp/gimpdrawable.c
index 10758a6a92..8edcb97dd5 100644
--- a/libgimp/gimpdrawable.c
+++ b/libgimp/gimpdrawable.c
@@ -437,3 +437,24 @@ gimp_drawable_get_format (gint32 drawable_ID)
return format;
}
+/**
+ * gimp_drawable_get_thumbnail_format:
+ * @drawable_ID: the ID of the #GimpDrawable to get the thumbnail format for.
+ *
+ * Returns the #Babl thumbnail format of the drawable.
+ *
+ * Return value: The #Babl thumbnail format.
+ *
+ * Since: 2.10.14
+ */
+const Babl *
+gimp_drawable_get_thumbnail_format (gint32 drawable_ID)
+{
+ const Babl *format = NULL;
+ gchar *format_str = _gimp_drawable_get_thumbnail_format (drawable_ID);
+
+ if (format_str)
+ format = babl_format (format_str);
+
+ return format;
+}
diff --git a/libgimp/gimpdrawable.h b/libgimp/gimpdrawable.h
index 66bf24630b..41623e7627 100644
--- a/libgimp/gimpdrawable.h
+++ b/libgimp/gimpdrawable.h
@@ -46,6 +46,7 @@ GeglBuffer * gimp_drawable_get_buffer (gint32 drawable_ID)
GeglBuffer * gimp_drawable_get_shadow_buffer (gint32 drawable_ID);
const Babl * gimp_drawable_get_format (gint32 drawable_ID);
+const Babl * gimp_drawable_get_thumbnail_format (gint32 drawable_ID);
GIMP_DEPRECATED_FOR(gimp_drawable_get_buffer)
GimpDrawable * gimp_drawable_get (gint32 drawable_ID);
diff --git a/libgimp/gimpdrawable_pdb.c b/libgimp/gimpdrawable_pdb.c
index 4ebba8f7e7..1a9fd17cc4 100644
--- a/libgimp/gimpdrawable_pdb.c
+++ b/libgimp/gimpdrawable_pdb.c
@@ -71,6 +71,40 @@ _gimp_drawable_get_format (gint32 drawable_ID)
return format;
}
+/**
+ * _gimp_drawable_get_thumbnail_format:
+ * @drawable_ID: The drawable.
+ *
+ * Returns the drawable's thumbnail Babl format
+ *
+ * This procedure returns the drawable's thumbnail Babl format.
+ * Thumbnails are always 8-bit images, see gimp_drawable_thumbnail()
+ * and gimp_drawable_sub_thmbnail().
+ *
+ * Returns: The drawable's thumbnail Babl format.
+ *
+ * Since: 2.10.14
+ **/
+gchar *
+_gimp_drawable_get_thumbnail_format (gint32 drawable_ID)
+{
+ GimpParam *return_vals;
+ gint nreturn_vals;
+ gchar *format = NULL;
+
+ return_vals = gimp_run_procedure ("gimp-drawable-get-thumbnail-format",
+ &nreturn_vals,
+ GIMP_PDB_DRAWABLE, drawable_ID,
+ GIMP_PDB_END);
+
+ if (return_vals[0].data.d_status == GIMP_PDB_SUCCESS)
+ format = g_strdup (return_vals[1].data.d_string);
+
+ gimp_destroy_params (return_vals, nreturn_vals);
+
+ return format;
+}
+
/**
* gimp_drawable_type:
* @drawable_ID: The drawable.
diff --git a/libgimp/gimpdrawable_pdb.h b/libgimp/gimpdrawable_pdb.h
index 0bb6880001..9e69457d03 100644
--- a/libgimp/gimpdrawable_pdb.h
+++ b/libgimp/gimpdrawable_pdb.h
@@ -32,76 +32,77 @@ G_BEGIN_DECLS
/* For information look into the C source or the html documentation */
-G_GNUC_INTERNAL gchar* _gimp_drawable_get_format (gint32 drawable_ID);
-GimpImageType gimp_drawable_type (gint32 drawable_ID);
-GimpImageType gimp_drawable_type_with_alpha (gint32 drawable_ID);
-gboolean gimp_drawable_has_alpha (gint32 drawable_ID);
-gboolean gimp_drawable_is_rgb (gint32 drawable_ID);
-gboolean gimp_drawable_is_gray (gint32 drawable_ID);
-gboolean gimp_drawable_is_indexed (gint32 drawable_ID);
-gint gimp_drawable_bpp (gint32 drawable_ID);
-gint gimp_drawable_width (gint32 drawable_ID);
-gint gimp_drawable_height (gint32 drawable_ID);
-gboolean gimp_drawable_offsets (gint32 drawable_ID,
- gint *offset_x,
- gint *offset_y);
-gboolean gimp_drawable_mask_bounds (gint32 drawable_ID,
- gint *x1,
- gint *y1,
- gint *x2,
- gint *y2);
-gboolean gimp_drawable_mask_intersect (gint32 drawable_ID,
- gint *x,
- gint *y,
- gint *width,
- gint *height);
-gboolean gimp_drawable_merge_shadow (gint32 drawable_ID,
- gboolean undo);
-gboolean gimp_drawable_free_shadow (gint32 drawable_ID);
-gboolean gimp_drawable_update (gint32 drawable_ID,
- gint x,
- gint y,
- gint width,
- gint height);
-guint8* gimp_drawable_get_pixel (gint32 drawable_ID,
- gint x_coord,
- gint y_coord,
- gint *num_channels);
-gboolean gimp_drawable_set_pixel (gint32 drawable_ID,
- gint x_coord,
- gint y_coord,
- gint num_channels,
- const guint8 *pixel);
-gboolean gimp_drawable_fill (gint32 drawable_ID,
- GimpFillType fill_type);
-gboolean gimp_drawable_offset (gint32 drawable_ID,
- gboolean wrap_around,
- GimpOffsetType fill_type,
- gint offset_x,
- gint offset_y);
-G_GNUC_INTERNAL gboolean _gimp_drawable_thumbnail (gint32 drawable_ID,
- gint width,
- gint height,
- gint *actual_width,
- gint *actual_height,
- gint *bpp,
- gint *thumbnail_data_count,
- guint8 **thumbnail_data);
-G_GNUC_INTERNAL gboolean _gimp_drawable_sub_thumbnail (gint32 drawable_ID,
- gint src_x,
- gint src_y,
- gint src_width,
- gint src_height,
- gint dest_width,
- gint dest_height,
- gint *width,
- gint *height,
- gint *bpp,
- gint *thumbnail_data_count,
- guint8 **thumbnail_data);
-gboolean gimp_drawable_foreground_extract (gint32 drawable_ID,
- GimpForegroundExtractMode mode,
- gint32 mask_ID);
+G_GNUC_INTERNAL gchar* _gimp_drawable_get_format (gint32 drawable_ID);
+G_GNUC_INTERNAL gchar* _gimp_drawable_get_thumbnail_format (gint32 drawable_ID);
+GimpImageType gimp_drawable_type (gint32 drawable_ID);
+GimpImageType gimp_drawable_type_with_alpha (gint32 drawable_ID);
+gboolean gimp_drawable_has_alpha (gint32 drawable_ID);
+gboolean gimp_drawable_is_rgb (gint32 drawable_ID);
+gboolean gimp_drawable_is_gray (gint32 drawable_ID);
+gboolean gimp_drawable_is_indexed (gint32 drawable_ID);
+gint gimp_drawable_bpp (gint32 drawable_ID);
+gint gimp_drawable_width (gint32 drawable_ID);
+gint gimp_drawable_height (gint32 drawable_ID);
+gboolean gimp_drawable_offsets (gint32 drawable_ID,
+ gint *offset_x,
+ gint *offset_y);
+gboolean gimp_drawable_mask_bounds (gint32 drawable_ID,
+ gint *x1,
+ gint *y1,
+ gint *x2,
+ gint *y2);
+gboolean gimp_drawable_mask_intersect (gint32 drawable_ID,
+ gint *x,
+ gint *y,
+ gint *width,
+ gint *height);
+gboolean gimp_drawable_merge_shadow (gint32 drawable_ID,
+ gboolean undo);
+gboolean gimp_drawable_free_shadow (gint32 drawable_ID);
+gboolean gimp_drawable_update (gint32 drawable_ID,
+ gint x,
+ gint y,
+ gint width,
+ gint height);
+guint8* gimp_drawable_get_pixel (gint32 drawable_ID,
+ gint x_coord,
+ gint y_coord,
+ gint *num_channels);
+gboolean gimp_drawable_set_pixel (gint32 drawable_ID,
+ gint x_coord,
+ gint y_coord,
+ gint num_channels,
+ const guint8 *pixel);
+gboolean gimp_drawable_fill (gint32 drawable_ID,
+ GimpFillType fill_type);
+gboolean gimp_drawable_offset (gint32 drawable_ID,
+ gboolean wrap_around,
+ GimpOffsetType fill_type,
+ gint offset_x,
+ gint offset_y);
+G_GNUC_INTERNAL gboolean _gimp_drawable_thumbnail (gint32 drawable_ID,
+ gint width,
+ gint height,
+ gint *actual_width,
+ gint *actual_height,
+ gint *bpp,
+ gint
*thumbnail_data_count,
+ guint8 **thumbnail_data);
+G_GNUC_INTERNAL gboolean _gimp_drawable_sub_thumbnail (gint32 drawable_ID,
+ gint src_x,
+ gint src_y,
+ gint src_width,
+ gint src_height,
+ gint dest_width,
+ gint dest_height,
+ gint *width,
+ gint *height,
+ gint *bpp,
+ gint
*thumbnail_data_count,
+ guint8 **thumbnail_data);
+gboolean gimp_drawable_foreground_extract (gint32 drawable_ID,
+ GimpForegroundExtractMode mode,
+ gint32 mask_ID);
G_END_DECLS
diff --git a/pdb/groups/drawable.pdb b/pdb/groups/drawable.pdb
index a16d943c87..833e50dfb5 100644
--- a/pdb/groups/drawable.pdb
+++ b/pdb/groups/drawable.pdb
@@ -307,6 +307,38 @@ CODE
);
}
+sub drawable_get_thumbnail_format {
+ $blurb = "Returns the drawable's thumbnail Babl format";
+
+ $help = <<'HELP';
+This procedure returns the drawable's thumbnail Babl format.
+
+Thumbnails are always 8-bit images, see gimp_drawable_thumbnail() and
+gimp_drawable_sub_thmbnail().
+HELP
+
+ &mitch_pdb_misc('2019', '2.10.14');
+
+ @inargs = (
+ { name => 'drawable', type => 'drawable',
+ desc => 'The drawable' }
+ );
+
+ @outargs = (
+ { name => 'format', type => 'string', wrap => 1,
+ desc => "The drawable's thumbnail Babl format" }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ format = g_strdup (babl_format_get_encoding (gimp_drawable_get_preview_format (drawable)));
+
+}
+CODE
+ );
+}
+
sub drawable_type {
$blurb = "Returns the drawable's type.";
$help = "This procedure returns the drawable's type.";
@@ -994,6 +1026,7 @@ CODE
"gimp-intl.h");
@procs = qw(drawable_get_format
+ drawable_get_thumbnail_format
drawable_type
drawable_type_with_alpha
drawable_has_alpha
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]