[gimp] plug-ins: port file-dds-load to GimpProcedureConfig
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] plug-ins: port file-dds-load to GimpProcedureConfig
- Date: Tue, 1 Oct 2019 21:31:49 +0000 (UTC)
commit 75396106d176236468fea32b98731dc0bc5ed978
Author: Michael Natterer <mitch gimp org>
Date: Tue Oct 1 23:31:06 2019 +0200
plug-ins: port file-dds-load to GimpProcedureConfig
plug-ins/file-dds/dds.c | 45 ++++---------
plug-ins/file-dds/ddsplugin.h | 11 +--
plug-ins/file-dds/ddsread.c | 151 ++++++++++++++++++++++++------------------
plug-ins/file-dds/ddswrite.c | 10 +--
4 files changed, 108 insertions(+), 109 deletions(-)
---
diff --git a/plug-ins/file-dds/dds.c b/plug-ins/file-dds/dds.c
index 8ed71e62ff..0300a341a1 100644
--- a/plug-ins/file-dds/dds.c
+++ b/plug-ins/file-dds/dds.c
@@ -106,12 +106,6 @@ DDSWriteVals dds_write_vals =
0.5
};
-DDSReadVals dds_read_vals =
-{
- TRUE,
- TRUE
-};
-
static void
dds_class_init (DdsClass *klass)
@@ -379,40 +373,25 @@ dds_load (GimpProcedure *procedure,
const GimpValueArray *args,
gpointer run_data)
{
- GimpValueArray *return_vals;
- GimpPDBStatusType status;
- GimpImage *image;
- GError *error = NULL;
+ GimpProcedureConfig *config;
+ GimpValueArray *return_vals;
+ GimpPDBStatusType status;
+ GimpImage *image;
+ GError *error = NULL;
INIT_I18N ();
gegl_init (NULL, NULL);
- switch (run_mode)
- {
- case GIMP_RUN_INTERACTIVE:
- gimp_ui_init ("dds");
- gimp_get_data (LOAD_PROC, &dds_read_vals);
- break;
-
- case GIMP_RUN_NONINTERACTIVE:
- dds_read_vals.mipmaps = GIMP_VALUES_GET_BOOLEAN (args, 0);
- dds_read_vals.decode_images = GIMP_VALUES_GET_BOOLEAN (args, 1);
- break;
+ config = gimp_procedure_create_config (procedure);
+ gimp_procedure_config_begin_run (config, NULL, run_mode, args);
- default:
- break;
- }
-
- status = read_dds (file, &image,
- run_mode == GIMP_RUN_INTERACTIVE);
+ status = read_dds (file, &image, run_mode == GIMP_RUN_INTERACTIVE,
+ procedure, G_OBJECT (config));
- if (status == GIMP_PDB_SUCCESS &&
- run_mode != GIMP_RUN_NONINTERACTIVE)
- {
- gimp_set_data (LOAD_PROC, &dds_read_vals, sizeof (dds_read_vals));
- }
+ gimp_procedure_config_end_run (config, status);
+ g_object_unref (config);
- if (! image)
+ if (status != GIMP_PDB_SUCCESS)
return gimp_procedure_new_return_values (procedure, status, error);
return_vals = gimp_procedure_new_return_values (procedure,
diff --git a/plug-ins/file-dds/ddsplugin.h b/plug-ins/file-dds/ddsplugin.h
index 92c5f99309..70882c3a40 100644
--- a/plug-ins/file-dds/ddsplugin.h
+++ b/plug-ins/file-dds/ddsplugin.h
@@ -47,18 +47,13 @@ typedef struct
gdouble alpha_test_threshold;
} DDSWriteVals;
-typedef struct
-{
- gboolean mipmaps;
- gboolean decode_images;
-} DDSReadVals;
-
extern DDSWriteVals dds_write_vals;
-extern DDSReadVals dds_read_vals;
extern GimpPDBStatusType read_dds (GFile *file,
GimpImage **image,
- gboolean interactive);
+ gboolean interactive,
+ GimpProcedure *procedure,
+ GObject *config);
extern GimpPDBStatusType write_dds (GFile *file,
GimpImage *image,
GimpDrawable *drawable,
diff --git a/plug-ins/file-dds/ddsread.c b/plug-ins/file-dds/ddsread.c
index 6d4cba05e6..e03dd5f6fe 100644
--- a/plug-ins/file-dds/ddsread.c
+++ b/plug-ins/file-dds/ddsread.c
@@ -76,7 +76,8 @@ static gboolean load_layer (FILE *fp,
gchar *prefix,
guint *l,
guchar *pixels,
- guchar *buf);
+ guchar *buf,
+ gboolean decode_images);
static gboolean load_mipmaps (FILE *fp,
dds_header_t *hdr,
dds_load_info_t *d,
@@ -84,7 +85,9 @@ static gboolean load_mipmaps (FILE *fp,
gchar *prefix,
guint *l,
guchar *pixels,
- guchar *buf);
+ guchar *buf,
+ gboolean read_mipmaps,
+ gboolean decode_images);
static gboolean load_face (FILE *fp,
dds_header_t *hdr,
dds_load_info_t *d,
@@ -92,36 +95,50 @@ static gboolean load_face (FILE *fp,
char *prefix,
guint *l,
guchar *pixels,
- guchar *buf);
+ guchar *buf,
+ gboolean read_mipmaps,
+ gboolean decode_images);
static guchar color_bits (guint mask);
static guchar color_shift (guint mask);
-static gboolean load_dialog (void);
+static gboolean load_dialog (GimpProcedure *procedure,
+ GObject *config);
GimpPDBStatusType
-read_dds (GFile *file,
- GimpImage **ret_image,
- gboolean interactive)
+read_dds (GFile *file,
+ GimpImage **ret_image,
+ gboolean interactive,
+ GimpProcedure *procedure,
+ GObject *config)
{
- GimpImage *image = NULL;
- guchar *buf;
- guint l = 0;
- guchar *pixels;
- gchar *filename;
- FILE *fp;
- dds_header_t hdr;
- dds_header_dx10_t dx10hdr;
- dds_load_info_t d;
+ GimpImage *image = NULL;
+ guchar *buf;
+ guint l = 0;
+ guchar *pixels;
+ gchar *filename;
+ FILE *fp;
+ dds_header_t hdr;
+ dds_header_dx10_t dx10hdr;
+ dds_load_info_t d;
GList *layers;
GimpImageBaseType type;
+ gboolean read_mipmaps;
+ gboolean decode_images;
gint i, j;
if (interactive)
{
- if (! load_dialog ())
+ gimp_ui_init ("dds");
+
+ if (! load_dialog (procedure, config))
return GIMP_PDB_CANCEL;
}
+ g_object_get (config,
+ "load-mipmaps", &read_mipmaps,
+ "decode-images", &decode_images,
+ NULL);
+
filename = g_file_get_path (file);
fp = g_fopen (filename, "rb");
g_free (filename);
@@ -324,14 +341,16 @@ read_dds (GFile *file,
! (hdr.caps.caps2 & DDSCAPS2_VOLUME) &&
dx10hdr.arraySize == 0)
{
- if (! load_layer (fp, &hdr, &d, image, 0, "", &l, pixels, buf))
+ if (! load_layer (fp, &hdr, &d, image, 0, "", &l, pixels, buf,
+ decode_images))
{
fclose (fp);
gimp_image_delete (image);
return GIMP_PDB_EXECUTION_ERROR;
}
- if (! load_mipmaps (fp, &hdr, &d, image, "", &l, pixels, buf))
+ if (! load_mipmaps (fp, &hdr, &d, image, "", &l, pixels, buf,
+ read_mipmaps, decode_images))
{
fclose (fp);
gimp_image_delete (image);
@@ -341,7 +360,8 @@ read_dds (GFile *file,
else if (hdr.caps.caps2 & DDSCAPS2_CUBEMAP)
{
if ((hdr.caps.caps2 & DDSCAPS2_CUBEMAP_POSITIVEX) &&
- ! load_face (fp, &hdr, &d, image, "(positive x)", &l, pixels, buf))
+ ! load_face (fp, &hdr, &d, image, "(positive x)", &l, pixels, buf,
+ read_mipmaps, decode_images))
{
fclose (fp);
gimp_image_delete (image);
@@ -349,7 +369,8 @@ read_dds (GFile *file,
}
if ((hdr.caps.caps2 & DDSCAPS2_CUBEMAP_NEGATIVEX) &&
- ! load_face (fp, &hdr, &d, image, "(negative x)", &l, pixels, buf))
+ ! load_face (fp, &hdr, &d, image, "(negative x)", &l, pixels, buf,
+ read_mipmaps, decode_images))
{
fclose (fp);
gimp_image_delete (image);
@@ -357,7 +378,8 @@ read_dds (GFile *file,
}
if ((hdr.caps.caps2 & DDSCAPS2_CUBEMAP_POSITIVEY) &&
- ! load_face (fp, &hdr, &d, image, "(positive y)", &l, pixels, buf))
+ ! load_face (fp, &hdr, &d, image, "(positive y)", &l, pixels, buf,
+ read_mipmaps, decode_images))
{
fclose (fp);
gimp_image_delete (image);
@@ -365,7 +387,8 @@ read_dds (GFile *file,
}
if ((hdr.caps.caps2 & DDSCAPS2_CUBEMAP_NEGATIVEY) &&
- ! load_face (fp, &hdr, &d, image, "(negative y)", &l, pixels, buf))
+ ! load_face (fp, &hdr, &d, image, "(negative y)", &l, pixels, buf,
+ read_mipmaps, decode_images))
{
fclose (fp);
gimp_image_delete (image);
@@ -373,7 +396,8 @@ read_dds (GFile *file,
}
if ((hdr.caps.caps2 & DDSCAPS2_CUBEMAP_POSITIVEZ) &&
- ! load_face (fp, &hdr, &d, image, "(positive z)", &l, pixels, buf))
+ ! load_face (fp, &hdr, &d, image, "(positive z)", &l, pixels, buf,
+ read_mipmaps, decode_images))
{
fclose (fp);
gimp_image_delete (image);
@@ -381,7 +405,8 @@ read_dds (GFile *file,
}
if ((hdr.caps.caps2 & DDSCAPS2_CUBEMAP_NEGATIVEZ) &&
- ! load_face (fp, &hdr, &d, image, "(negative z)", &l, pixels, buf))
+ ! load_face (fp, &hdr, &d, image, "(negative z)", &l, pixels, buf,
+ read_mipmaps, decode_images))
{
fclose (fp);
gimp_image_delete (image);
@@ -397,7 +422,8 @@ read_dds (GFile *file,
for (i = 0; i < hdr.depth; ++i)
{
plane = g_strdup_printf ("(z = %d)", i);
- if (! load_layer (fp, &hdr, &d, image, 0, plane, &l, pixels, buf))
+ if (! load_layer (fp, &hdr, &d, image, 0, plane, &l, pixels, buf,
+ decode_images))
{
g_free (plane);
fclose (fp);
@@ -409,7 +435,7 @@ read_dds (GFile *file,
if ((hdr.flags & DDSD_MIPMAPCOUNT) &&
(hdr.caps.caps1 & DDSCAPS_MIPMAP) &&
- (dds_read_vals.mipmaps != 0))
+ read_mipmaps)
{
for (level = 1; level < hdr.num_mipmaps; ++level)
{
@@ -423,7 +449,8 @@ read_dds (GFile *file,
plane = g_strdup_printf ("(z = %d)", i);
if (! load_layer (fp, &hdr, &d, image, level, plane, &l,
- pixels, buf))
+ pixels, buf,
+ decode_images))
{
g_free (plane);
fclose (fp);
@@ -445,14 +472,16 @@ read_dds (GFile *file,
{
elem = g_strdup_printf ("(array element %d)", i);
- if (! load_layer (fp, &hdr, &d, image, 0, elem, &l, pixels, buf))
+ if (! load_layer (fp, &hdr, &d, image, 0, elem, &l, pixels, buf,
+ decode_images))
{
fclose (fp);
gimp_image_delete (image);
return GIMP_PDB_EXECUTION_ERROR;
}
- if (! load_mipmaps (fp, &hdr, &d, image, elem, &l, pixels, buf))
+ if (! load_mipmaps (fp, &hdr, &d, image, elem, &l, pixels, buf,
+ read_mipmaps, decode_images))
{
fclose (fp);
gimp_image_delete (image);
@@ -870,7 +899,8 @@ load_layer (FILE *fp,
char *prefix,
guint *l,
guchar *pixels,
- guchar *buf)
+ guchar *buf,
+ gboolean decode_images)
{
GeglBuffer *buffer;
const Babl *bablfmt = NULL;
@@ -1164,7 +1194,7 @@ load_layer (FILE *fp,
g_object_unref (buffer);
/* gimp dds specific. decode encoded images */
- if (dds_read_vals.decode_images &&
+ if (decode_images &&
hdr->reserved.gimp_dds_special.magic1 == FOURCC ('G','I','M','P') &&
hdr->reserved.gimp_dds_special.magic2 == FOURCC ('-','D','D','S'))
{
@@ -1195,17 +1225,20 @@ load_mipmaps (FILE *fp,
char *prefix,
unsigned int *l,
guchar *pixels,
- unsigned char *buf)
+ guchar *buf,
+ gboolean read_mipmaps,
+ gboolean decode_images)
{
guint level;
if ((hdr->flags & DDSD_MIPMAPCOUNT) &&
(hdr->caps.caps1 & DDSCAPS_MIPMAP) &&
- (dds_read_vals.mipmaps != 0))
+ read_mipmaps)
{
for (level = 1; level < hdr->num_mipmaps; ++level)
{
- if (! load_layer (fp, hdr, d, image, level, prefix, l, pixels, buf))
+ if (! load_layer (fp, hdr, d, image, level, prefix, l, pixels, buf,
+ decode_images))
return FALSE;
}
}
@@ -1221,12 +1254,16 @@ load_face (FILE *fp,
gchar *prefix,
guint *l,
guchar *pixels,
- guchar *buf)
+ guchar *buf,
+ gboolean read_mipmaps,
+ gboolean decode_images)
{
- if (! load_layer (fp, hdr, d, image, 0, prefix, l, pixels, buf))
+ if (! load_layer (fp, hdr, d, image, 0, prefix, l, pixels, buf,
+ decode_images))
return FALSE;
- return load_mipmaps (fp, hdr, d, image, prefix, l, pixels, buf);
+ return load_mipmaps (fp, hdr, d, image, prefix, l, pixels, buf,
+ read_mipmaps, decode_images);
}
static guchar
@@ -1258,18 +1295,17 @@ color_shift (guint mask)
}
static gboolean
-load_dialog (void)
+load_dialog (GimpProcedure *procedure,
+ GObject *config)
{
GtkWidget *dialog;
GtkWidget *vbox;
GtkWidget *check;
gboolean run;
- dialog = gimp_dialog_new (_("Load DDS"), "dds", NULL, GTK_WIN_POS_MOUSE,
- gimp_standard_help_func, LOAD_PROC,
- _("_Cancel"), GTK_RESPONSE_CANCEL,
- _("_OK"), GTK_RESPONSE_OK,
- NULL);
+ dialog = gimp_procedure_dialog_new (procedure,
+ GIMP_PROCEDURE_CONFIG (config),
+ _("Open DDS"));
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
@@ -1277,29 +1313,18 @@ load_dialog (void)
vbox, 1, 1, 0);
gtk_widget_show (vbox);
- check = gtk_check_button_new_with_mnemonic (_("_Load mipmaps"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check),
- dds_read_vals.mipmaps);
- gtk_box_pack_start (GTK_BOX (vbox), check, 1, 1, 0);
- gtk_widget_show (check);
-
- g_signal_connect (check, "toggled",
- G_CALLBACK (gimp_toggle_button_update),
- &dds_read_vals.mipmaps);
-
- check = gtk_check_button_new_with_mnemonic (_("_Automatically decode YCoCg/AExp images when detected"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check),
- dds_read_vals.decode_images);
- gtk_box_pack_start (GTK_BOX (vbox), check, 1, 1, 0);
- gtk_widget_show (check);
+ check = gimp_prop_check_button_new (config, "load-mipmaps",
+ _("_Load mipmaps"));
+ gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, FALSE, 0);
- g_signal_connect (check, "toggled",
- G_CALLBACK (gimp_toggle_button_update),
- &dds_read_vals.decode_images);
+ check = gimp_prop_check_button_new (config, "decode-images",
+ _("_Automatically decode YCoCg/AExp "
+ "images when detected"));
+ gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, FALSE, 0);
gtk_widget_show (dialog);
- run = (gimp_dialog_run (GIMP_DIALOG (dialog)) == GTK_RESPONSE_OK);
+ run = gimp_procedure_dialog_run (GIMP_PROCEDURE_DIALOG (dialog));
gtk_widget_destroy (dialog);
diff --git a/plug-ins/file-dds/ddswrite.c b/plug-ins/file-dds/ddswrite.c
index 009079ab9f..4958fbfb14 100644
--- a/plug-ins/file-dds/ddswrite.c
+++ b/plug-ins/file-dds/ddswrite.c
@@ -44,11 +44,11 @@
#include "color.h"
-static gboolean write_image (FILE *fp,
- GimpImage *image,
- GimpDrawable *drawable);
-static gint save_dialog (GimpImage *image,
- GimpDrawable *drawable);
+static gboolean write_image (FILE *fp,
+ GimpImage *image,
+ GimpDrawable *drawable);
+static gint save_dialog (GimpImage *image,
+ GimpDrawable *drawable);
static const char *cubemap_face_names[4][6] =
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]