plug-ins, libgimp: GimpRunThumbnailFunc now uses a GimpProcedureConfig rather…

… than a GimpValueArray.

Similar to other GimpProcedure, move to using a config object. A difference is
that thumbnail procedures are always run non-interactively.

Also fixing WMF load thumbnail procedure: the dimension computation was wrong
when the image was wider than tall.
This commit is contained in:
Jehan 2023-08-11 02:01:05 +02:00
parent 601437addd
commit ed98b990c5
14 changed files with 103 additions and 92 deletions

View File

@ -141,8 +141,10 @@ gimp_thumbnail_procedure_run (GimpProcedure *procedure,
GimpThumbnailProcedure *thumbnail_proc = GIMP_THUMBNAIL_PROCEDURE (procedure);
GimpValueArray *remaining;
GimpValueArray *return_values;
GimpProcedureConfig *config;
GFile *file;
gint size;
GimpPDBStatusType status = GIMP_PDB_EXECUTION_ERROR;
gint i;
file = GIMP_VALUES_GET_FILE (args, 0);
@ -157,13 +159,30 @@ gimp_thumbnail_procedure_run (GimpProcedure *procedure,
gimp_value_array_append (remaining, value);
}
config = gimp_procedure_create_config (procedure);
gimp_procedure_config_begin_run (config, NULL, GIMP_RUN_NONINTERACTIVE, remaining);
gimp_value_array_unref (remaining);
return_values = thumbnail_proc->priv->run_func (procedure,
file,
size,
remaining,
config,
thumbnail_proc->priv->run_data);
gimp_value_array_unref (remaining);
if (return_values != NULL &&
gimp_value_array_length (return_values) > 0 &&
G_VALUE_HOLDS_ENUM (gimp_value_array_index (return_values, 0)))
status = GIMP_VALUES_GET_ENUM (return_values, 0);
gimp_procedure_config_end_run (config, status);
/* This is debug printing to help plug-in developers figure out best
* practices.
*/
if (G_OBJECT (config)->ref_count > 1)
g_printerr ("%s: ERROR: the GimpThumbnailProcedure config object was refed "
"by plug-in, it MUST NOT do that!\n", G_STRFUNC);
g_object_unref (config);
return return_values;
}

View File

@ -34,7 +34,7 @@ G_BEGIN_DECLS
* @procedure: the #GimpProcedure that runs.
* @file: the #GFile to load the thumbnail from.
* @size: the requested thumbnail size.
* @args: the @procedure's remaining arguments.
* @config: the @procedure's remaining arguments.
* @run_data: (closure): the run_data given in gimp_thumbnail_procedure_new().
*
* The thumbnail function is run during the lifetime of the GIMP session,
@ -47,7 +47,7 @@ G_BEGIN_DECLS
typedef GimpValueArray * (* GimpRunThumbnailFunc) (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);

View File

@ -116,7 +116,7 @@ static GimpValueArray * gif_load (GimpProcedure *procedure,
static GimpValueArray * gif_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);
static GimpImage * load_image (GFile *file,
@ -271,11 +271,11 @@ gif_load (GimpProcedure *procedure,
}
static GimpValueArray *
gif_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
gpointer run_data)
gif_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
GimpProcedureConfig *config,
gpointer run_data)
{
GimpValueArray *return_vals;
GimpImage *image;

View File

@ -231,7 +231,7 @@ static GimpValueArray * pdf_load (GimpProcedure *procedure,
static GimpValueArray * pdf_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);
static GimpImage * load_image (PopplerDocument *doc,
@ -575,11 +575,11 @@ pdf_load (GimpProcedure *procedure,
}
static GimpValueArray *
pdf_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
gpointer run_data)
pdf_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
GimpProcedureConfig *config,
gpointer run_data)
{
GimpValueArray *return_vals;
gdouble width = 0;

View File

@ -141,7 +141,7 @@ static GimpValueArray * ps_load (GimpProcedure *procedure,
static GimpValueArray * ps_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);
static GimpValueArray * ps_save (GimpProcedure *procedure,
GimpRunMode run_mode,
@ -618,23 +618,18 @@ ps_load (GimpProcedure *procedure,
}
static GimpValueArray *
ps_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
gpointer run_data)
ps_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
GimpProcedureConfig *config,
gpointer run_data)
{
GimpProcedureConfig *config;
GimpValueArray *return_vals;
GimpImage *image = NULL;
GError *error = NULL;
GimpValueArray *return_vals;
GimpImage *image = NULL;
GError *error = NULL;
gegl_init (NULL, NULL);
config = gimp_procedure_create_config (procedure);
gimp_procedure_config_begin_run (config, image,
GIMP_RUN_NONINTERACTIVE, args);
/* We should look for an embedded preview but for now we
* just load the document at a small resolution and the
* first page only.
@ -643,9 +638,6 @@ ps_load_thumb (GimpProcedure *procedure,
image = load_image (file, NULL, &error);
gimp_procedure_config_end_run (config, GIMP_PDB_SUCCESS);
g_object_unref (config);
if (! image)
return gimp_procedure_new_return_values (procedure,
GIMP_PDB_EXECUTION_ERROR,

View File

@ -85,7 +85,7 @@ static GimpValueArray * svg_load (GimpProcedure *procedure,
static GimpValueArray * svg_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);
static GimpImage * load_image (GFile *file,
@ -294,11 +294,11 @@ svg_load (GimpProcedure *procedure,
}
static GimpValueArray *
svg_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
gpointer run_data)
svg_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
GimpProcedureConfig *config,
gpointer run_data)
{
GimpValueArray *return_vals;
gint width = 0;

View File

@ -83,7 +83,7 @@ static GimpValueArray * wmf_load (GimpProcedure *procedure,
static GimpValueArray * wmf_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);
static GimpImage * load_image (GFile *file,
@ -258,16 +258,16 @@ wmf_load (GimpProcedure *procedure,
}
static GimpValueArray *
wmf_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
gpointer run_data)
wmf_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
GimpProcedureConfig *config,
gpointer run_data)
{
GimpValueArray *return_vals;
GimpImage *image;
gint width;
gint height;
gint width = 0;
gint height = 0;
GError *error = NULL;
WmfLoadVals load_vals = { WMF_DEFAULT_RESOLUTION, 0, 0, };
@ -282,8 +282,8 @@ wmf_load_thumb (GimpProcedure *procedure,
if ((gdouble) load_vals.width > (gdouble) load_vals.height)
{
load_vals.height *= (size / (gdouble) load_vals.width);
load_vals.width = size;
load_vals.height *= size / (gdouble) load_vals.width;
}
else
{

View File

@ -167,7 +167,7 @@ static GimpValueArray * xmc_load (GimpProcedure *pro
static GimpValueArray * xmc_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);
static GimpValueArray * xmc_save (GimpProcedure *procedure,
GimpRunMode run_mode,
@ -471,11 +471,11 @@ xmc_load (GimpProcedure *procedure,
}
static GimpValueArray *
xmc_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
gpointer run_data)
xmc_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
GimpProcedureConfig *config,
gpointer run_data)
{
GimpValueArray *return_vals;
gint width;

View File

@ -74,7 +74,7 @@ static GimpValueArray * icns_load (GimpProcedure *procedure,
static GimpValueArray * icns_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);
static GimpValueArray * icns_save (GimpProcedure *procedure,
GimpRunMode run_mode,
@ -228,11 +228,11 @@ icns_load (GimpProcedure *procedure,
}
static GimpValueArray *
icns_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
gpointer run_data)
icns_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
GimpProcedureConfig *config,
gpointer run_data)
{
GimpValueArray *return_vals;
gint width;

View File

@ -86,12 +86,12 @@ static GimpValueArray * ani_load (GimpProcedure *procedure,
static GimpValueArray * ico_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);
static GimpValueArray * ani_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);
static GimpValueArray * ico_save (GimpProcedure *procedure,
GimpRunMode run_mode,
@ -493,11 +493,11 @@ ani_load (GimpProcedure *procedure,
}
static GimpValueArray *
ico_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
gpointer run_data)
ico_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
GimpProcedureConfig *config,
gpointer run_data)
{
GimpValueArray *return_vals;
gint width;
@ -535,7 +535,7 @@ static GimpValueArray *
ani_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data)
{
GimpValueArray *return_vals;

View File

@ -68,7 +68,7 @@ static GimpValueArray * jpeg_load (GimpProcedure *procedure,
static GimpValueArray * jpeg_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);
static GimpValueArray * jpeg_save (GimpProcedure *procedure,
GimpRunMode run_mode,
@ -371,11 +371,11 @@ jpeg_load (GimpProcedure *procedure,
}
static GimpValueArray *
jpeg_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
gpointer run_data)
jpeg_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
GimpProcedureConfig *config,
gpointer run_data)
{
GimpValueArray *return_vals;
GimpImage *image;

View File

@ -66,7 +66,7 @@ static GimpValueArray * psd_load (GimpProcedure *procedure,
static GimpValueArray * psd_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);
static GimpValueArray * psd_save (GimpProcedure *procedure,
GimpRunMode run_mode,
@ -386,11 +386,11 @@ psd_load (GimpProcedure *procedure,
}
static GimpValueArray *
psd_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
gpointer run_data)
psd_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
GimpProcedureConfig *config,
gpointer run_data)
{
GimpValueArray *return_vals;
gint width = 0;

View File

@ -68,7 +68,7 @@ static GimpValueArray * darktable_load (GimpProcedure *proce
static GimpValueArray * darktable_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);
static GimpImage * load_image (GFile *file,
@ -333,11 +333,11 @@ darktable_load (GimpProcedure *procedure,
}
static GimpValueArray *
darktable_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
gpointer run_data)
darktable_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
GimpProcedureConfig *config,
gpointer run_data)
{
GimpValueArray *return_vals;
gint width;

View File

@ -69,7 +69,7 @@ static GimpValueArray * rawtherapee_load (GimpProcedure *pro
static GimpValueArray * rawtherapee_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
GimpProcedureConfig *config,
gpointer run_data);
static GimpImage * load_image (GFile *file,
@ -284,11 +284,11 @@ rawtherapee_load (GimpProcedure *procedure,
}
static GimpValueArray *
rawtherapee_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
const GimpValueArray *args,
gpointer run_data)
rawtherapee_load_thumb (GimpProcedure *procedure,
GFile *file,
gint size,
GimpProcedureConfig *config,
gpointer run_data)
{
GimpValueArray *return_vals;
GimpImage *image;