[gimp] plug-ins: port file-mng to GimpPlugIn and libgmp objects
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] plug-ins: port file-mng to GimpPlugIn and libgmp objects
- Date: Tue, 27 Aug 2019 13:23:34 +0000 (UTC)
commit c940ca8f8a7214f593f72ea393ff88d1faf574a1
Author: Michael Natterer <mitch gimp org>
Date: Tue Aug 27 15:22:15 2019 +0200
plug-ins: port file-mng to GimpPlugIn and libgmp objects
All file plug-ins ported \o/
plug-ins/common/Makefile.am | 2 -
plug-ins/common/file-mng.c | 606 +++++++++++++++++++++--------------------
plug-ins/common/plugin-defs.pl | 2 +-
3 files changed, 319 insertions(+), 291 deletions(-)
---
diff --git a/plug-ins/common/Makefile.am b/plug-ins/common/Makefile.am
index 192d308f26..44e0afdc82 100644
--- a/plug-ins/common/Makefile.am
+++ b/plug-ins/common/Makefile.am
@@ -841,8 +841,6 @@ file_jp2_load_LDADD = \
file_mng_CFLAGS = $(MNG_CFLAGS)
-file_mng_CPPFLAGS = $(AM_CPPFLAGS) -DGIMP_DEPRECATED_REPLACE_NEW_API
-
file_mng_SOURCES = \
file-mng.c
diff --git a/plug-ins/common/file-mng.c b/plug-ins/common/file-mng.c
index 8cf35c91aa..ede8aec82a 100644
--- a/plug-ins/common/file-mng.c
+++ b/plug-ins/common/file-mng.c
@@ -136,29 +136,6 @@ struct mng_data_t
gint32 default_dispose;
};
-/* Values of the instance of the above struct when the plug-in is
- * first invoked. */
-
-static struct mng_data_t mng_data =
-{
- FALSE, /* interlaced */
- FALSE, /* bkgd */
- FALSE, /* gama */
- TRUE, /* phys */
- TRUE, /* time */
- CHUNKS_PNG_D, /* default_chunks */
-
- 0.75, /* quality */
- 0.0, /* smoothing */
-
- 9, /* compression_level */
-
- TRUE, /* loop */
- 100, /* default_delay */
- DISPOSE_COMBINE /* default_dispose */
-};
-
-
/* These are not saved or restored. */
struct mng_globals_t
@@ -171,9 +148,6 @@ struct mng_globals_t
int num_palette;
};
-static struct mng_globals_t mngg;
-
-
/* The output FILE pointer which is used by libmng;
* passed around as user data. */
struct mnglib_userdata_t
@@ -182,9 +156,36 @@ struct mnglib_userdata_t
};
-/*
- * Function prototypes
- */
+typedef struct _Mng Mng;
+typedef struct _MngClass MngClass;
+
+struct _Mng
+{
+ GimpPlugIn parent_instance;
+};
+
+struct _MngClass
+{
+ GimpPlugInClass parent_class;
+};
+
+
+#define MNG_TYPE (mng_get_type ())
+#define MNG (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MNG_TYPE, Mng))
+
+GType mng_get_type (void) G_GNUC_CONST;
+
+static GList * mng_query_procedures (GimpPlugIn *plug_in);
+static GimpProcedure * mng_create_procedure (GimpPlugIn *plug_in,
+ const gchar *name);
+
+static GimpValueArray * mng_save (GimpProcedure *procedure,
+ GimpRunMode run_mode,
+ GimpImage *image,
+ GimpDrawable *drawable,
+ GFile *file,
+ const GimpValueArray *args,
+ gpointer run_data);
static mng_ptr MNG_DECL myalloc (mng_size_t size);
static void MNG_DECL myfree (mng_ptr ptr,
@@ -209,23 +210,263 @@ static gboolean ia_has_transparent_pixels (guchar *pixels,
static gboolean respin_cmap (png_structp png_ptr,
png_infop png_info_ptr,
guchar *remap,
- gint32 image_id,
+ GimpImage *image,
GeglBuffer *buffer,
int *bit_depth);
static gboolean mng_save_image (const gchar *filename,
- gint32 image_id,
- gint32 drawable_id,
- gint32 original_image_id,
+ GimpImage *image,
+ GimpDrawable *drawabl,
+ GimpImage *original_image,
GError **error);
-static gboolean mng_save_dialog (gint32 image_id);
+static gboolean mng_save_dialog (GimpImage *image);
+
+
+G_DEFINE_TYPE (Mng, mng, GIMP_TYPE_PLUG_IN)
+
+GIMP_MAIN (MNG_TYPE)
+
+
+/* Values of the instance of the above struct when the plug-in is
+ * first invoked. */
+
+static struct mng_data_t mng_data =
+{
+ FALSE, /* interlaced */
+ FALSE, /* bkgd */
+ FALSE, /* gama */
+ TRUE, /* phys */
+ TRUE, /* time */
+ CHUNKS_PNG_D, /* default_chunks */
+
+ 0.75, /* quality */
+ 0.0, /* smoothing */
+
+ 9, /* compression_level */
+
+ TRUE, /* loop */
+ 100, /* default_delay */
+ DISPOSE_COMBINE /* default_dispose */
+};
+
+static struct mng_globals_t mngg;
+
+
+static void
+mng_class_init (MngClass *klass)
+{
+ GimpPlugInClass *plug_in_class = GIMP_PLUG_IN_CLASS (klass);
+
+ plug_in_class->query_procedures = mng_query_procedures;
+ plug_in_class->create_procedure = mng_create_procedure;
+}
+
+static void
+mng_init (Mng *mng)
+{
+}
+
+static GList *
+mng_query_procedures (GimpPlugIn *plug_in)
+{
+ return g_list_append (NULL, g_strdup (SAVE_PROC));
+}
+
+static GimpProcedure *
+mng_create_procedure (GimpPlugIn *plug_in,
+ const gchar *name)
+{
+ GimpProcedure *procedure = NULL;
+
+ if (! strcmp (name, SAVE_PROC))
+ {
+ procedure = gimp_save_procedure_new (plug_in, name, GIMP_PLUGIN,
+ mng_save, NULL, NULL);
+
+ gimp_procedure_set_image_types (procedure, "*");
+
+ gimp_procedure_set_menu_label (procedure, N_("MNG animation"));
+
+ gimp_procedure_set_documentation (procedure,
+ "Saves images in the MNG file format",
+ "This plug-in saves images in the "
+ "Multiple-image Network Graphics (MNG) "
+ "format which can be used as a "
+ "replacement for animated GIFs, and "
+ "more.",
+ name);
+ gimp_procedure_set_attribution (procedure,
+ "Mukund Sivaraman <muks mukund org>",
+ "Mukund Sivaraman <muks mukund org>",
+ "November 19, 2002");
+
+ gimp_file_procedure_set_mime_types (GIMP_FILE_PROCEDURE (procedure),
+ "image/x-mng");
+ gimp_file_procedure_set_extensions (GIMP_FILE_PROCEDURE (procedure),
+ "mng");
+
+ GIMP_PROC_ARG_BOOLEAN (procedure, "interlace",
+ "Interlace",
+ "Use interlacing",
+ FALSE,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_INT (procedure, "compression",
+ "Compression",
+ "PNG deflate compression level",
+ 0, 9, 9,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_DOUBLE (procedure, "quality",
+ "Quality",
+ "JPEG quality factor",
+ 0, 1, 0.75,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_DOUBLE (procedure, "smoothing",
+ "Smoothing",
+ "JPEG smoothing factor",
+ 0, 1, 0,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_BOOLEAN (procedure, "loop",
+ "Loop",
+ "(ANIMATED MNG) Loop infinitely",
+ TRUE,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_INT (procedure, "default-delay",
+ "Default delay",
+ "(ANIMATED MNG) Default delay between frames in "
+ "milliseconds",
+ 1, G_MAXINT, 100,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_INT (procedure, "default-chunks",
+ "Default chunks",
+ "(ANIMATED MNG) Default chunks type "
+ "(0 = PNG + Delta PNG; 1 = JNG + Delta PNG; "
+ "2 = All PNG; 3 = All JNG)",
+ 0, 3, CHUNKS_PNG_D,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_INT (procedure, "default-dispose",
+ "Default dispose",
+ "(ANIMATED MNG) Default dispose type "
+ "(0 = combine; 1 = replace)",
+ 0, 1, DISPOSE_COMBINE,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_BOOLEAN (procedure, "bkgd",
+ "bKGD",
+ "Write bKGD (background color) chunk",
+ FALSE,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_BOOLEAN (procedure, "gama",
+ "gAMA",
+ "Write gAMA (gamma) chunk",
+ FALSE,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_BOOLEAN (procedure, "pHYs",
+ "gHYs",
+ "Write pHYs (image resolution) chunk",
+ TRUE,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_BOOLEAN (procedure, "time",
+ "tIME",
+ "Write tIME (creation time) chunk",
+ TRUE,
+ G_PARAM_READWRITE);
+ }
+
+ return procedure;
+}
+
+static GimpValueArray *
+mng_save (GimpProcedure *procedure,
+ GimpRunMode run_mode,
+ GimpImage *image,
+ GimpDrawable *drawable,
+ GFile *file,
+ const GimpValueArray *args,
+ gpointer run_data)
+{
+ GimpPDBStatusType status = GIMP_PDB_SUCCESS;
+ GimpExportReturn export = GIMP_EXPORT_IGNORE;
+ GimpImage *original_image;
+ GError *error = NULL;
+
+ INIT_I18N ();
+ gegl_init (NULL, NULL);
+
+ original_image = image;
+
+ if (run_mode == GIMP_RUN_INTERACTIVE ||
+ run_mode == GIMP_RUN_WITH_LAST_VALS)
+ {
+ gimp_get_data (SAVE_PROC, &mng_data);
+
+ gimp_ui_init (PLUG_IN_BINARY, FALSE);
+
+ export = gimp_export_image (&image, &drawable, "MNG",
+ GIMP_EXPORT_CAN_HANDLE_RGB |
+ GIMP_EXPORT_CAN_HANDLE_GRAY |
+ GIMP_EXPORT_CAN_HANDLE_INDEXED |
+ GIMP_EXPORT_CAN_HANDLE_ALPHA |
+ GIMP_EXPORT_CAN_HANDLE_LAYERS);
+
+ if (export == GIMP_EXPORT_CANCEL)
+ {
+ return gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_CANCEL,
+ NULL);
+ }
+ }
-static void query (void);
-static void run (const gchar *name,
- gint nparams,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals);
+ if (run_mode == GIMP_RUN_INTERACTIVE)
+ {
+ if (! mng_save_dialog (image))
+ {
+ return gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_CANCEL,
+ NULL);
+ }
+ }
+ else if (run_mode == GIMP_RUN_NONINTERACTIVE)
+ {
+ mng_data.interlaced = GIMP_VALUES_GET_BOOLEAN (args, 0);
+ mng_data.compression_level = GIMP_VALUES_GET_INT (args, 1);
+ mng_data.quality = GIMP_VALUES_GET_DOUBLE (args, 2);
+ mng_data.smoothing = GIMP_VALUES_GET_DOUBLE (args, 3);
+ mng_data.loop = GIMP_VALUES_GET_BOOLEAN (args, 4);
+ mng_data.default_delay = GIMP_VALUES_GET_INT (args, 5);
+ mng_data.default_chunks = GIMP_VALUES_GET_INT (args, 6);
+ mng_data.default_dispose = GIMP_VALUES_GET_INT (args, 7);
+ mng_data.bkgd = GIMP_VALUES_GET_BOOLEAN (args, 8);
+ mng_data.gama = GIMP_VALUES_GET_BOOLEAN (args, 9);
+ mng_data.phys = GIMP_VALUES_GET_BOOLEAN (args, 10);
+ mng_data.time = GIMP_VALUES_GET_BOOLEAN (args, 11);
+ }
+
+ if (mng_save_image (g_file_get_path (file),
+ image, drawable,
+ original_image, &error))
+ {
+ gimp_set_data (SAVE_PROC, &mng_data, sizeof (mng_data));
+ }
+ else
+ {
+ status = GIMP_PDB_EXECUTION_ERROR;
+ }
+
+ if (export == GIMP_EXPORT_EXPORT)
+ gimp_image_delete (image);
+
+ return gimp_procedure_new_return_values (procedure, status, error);
+}
/*
@@ -452,7 +693,7 @@ static gboolean
respin_cmap (png_structp pp,
png_infop info,
guchar *remap,
- gint32 image_id,
+ GimpImage *image,
GeglBuffer *buffer,
int *bit_depth)
{
@@ -464,7 +705,7 @@ respin_cmap (png_structp pp,
gint transparent;
gint cols, rows;
- before = gimp_image_get_colormap (image_id, &colors);
+ before = gimp_image_get_colormap (image, &colors);
/* Make sure there is something in the colormap */
if (colors == 0)
@@ -581,9 +822,9 @@ mng_putchunk_trns_wrapper (mng_handle handle,
static gboolean
mng_save_image (const gchar *filename,
- gint32 image_id,
- gint32 drawable_id,
- gint32 original_image_id,
+ GimpImage *image,
+ GimpDrawable *drawable,
+ GimpImage *original_image,
GError **error)
{
gboolean ret = FALSE;
@@ -593,14 +834,14 @@ mng_save_image (const gchar *filename,
struct tm *gmt;
gint num_layers;
- gint32 *layers;
+ GimpLayer **layers;
struct mnglib_userdata_t *userdata;
mng_handle handle;
guint32 mng_ticks_per_second;
guint32 mng_simplicity_profile;
- layers = gimp_image_get_layers (image_id, &num_layers);
+ layers = gimp_image_get_layers (image, &num_layers);
if (num_layers < 1)
return FALSE;
@@ -610,8 +851,8 @@ mng_save_image (const gchar *filename,
else
mng_ticks_per_second = 0;
- rows = gimp_image_height (image_id);
- cols = gimp_image_width (image_id);
+ rows = gimp_image_height (image);
+ cols = gimp_image_width (image);
mng_simplicity_profile = (MNG_SIMPLICITY_VALID |
MNG_SIMPLICITY_SIMPLEFEATURES |
@@ -622,22 +863,24 @@ mng_save_image (const gchar *filename,
MNG_SIMPLICITY_DELTAPNG);
for (i = 0; i < num_layers; i++)
- if (gimp_drawable_has_alpha (layers[i]))
- {
- /* internal transparency exists */
- mng_simplicity_profile |= MNG_SIMPLICITY_TRANSPARENCY;
+ {
+ if (gimp_drawable_has_alpha (GIMP_DRAWABLE (layers[i])))
+ {
+ /* internal transparency exists */
+ mng_simplicity_profile |= MNG_SIMPLICITY_TRANSPARENCY;
- /* validity of following flags */
- mng_simplicity_profile |= 0x00000040;
+ /* validity of following flags */
+ mng_simplicity_profile |= 0x00000040;
- /* semi-transparency exists */
- mng_simplicity_profile |= 0x00000100;
+ /* semi-transparency exists */
+ mng_simplicity_profile |= 0x00000100;
- /* background transparency should happen */
- mng_simplicity_profile |= 0x00000080;
+ /* background transparency should happen */
+ mng_simplicity_profile |= 0x00000080;
- break;
- }
+ break;
+ }
+ }
userdata = g_new0 (struct mnglib_userdata_t, 1);
userdata->fp = g_fopen (filename, "wb");
@@ -682,7 +925,7 @@ mng_save_image (const gchar *filename,
if ((num_layers > 1) && (mng_data.loop))
{
gint32 ms =
- parse_ms_tag_from_layer_name (gimp_item_get_name (layers[0]));
+ parse_ms_tag_from_layer_name (gimp_item_get_name (GIMP_ITEM (layers[0])));
if (mng_putchunk_term (handle, MNG_TERMACTION_REPEAT,
MNG_ITERACTION_LASTFRAME,
@@ -695,7 +938,7 @@ mng_save_image (const gchar *filename,
else
{
gint32 ms =
- parse_ms_tag_from_layer_name (gimp_item_get_name (layers[0]));
+ parse_ms_tag_from_layer_name (gimp_item_get_name (GIMP_ITEM (layers[0])));
if (mng_putchunk_term (handle, MNG_TERMACTION_LASTFRAME,
MNG_ITERACTION_LASTFRAME,
@@ -762,7 +1005,7 @@ mng_save_image (const gchar *filename,
/* how do we get this to work? */
if (mng_data.phys)
{
- gimp_image_get_resolution(original_image_id, &xres, &yres);
+ gimp_image_get_resolution (original_image, &xres, &yres);
if (mng_putchunk_phyg (handle, MNG_FALSE,
(mng_uint32) (xres * 39.37),
@@ -797,12 +1040,12 @@ mng_save_image (const gchar *filename,
}
}
- if (gimp_image_base_type (image_id) == GIMP_INDEXED)
+ if (gimp_image_base_type (image) == GIMP_INDEXED)
{
guchar *palette;
gint numcolors;
- palette = gimp_image_get_colormap (image_id, &numcolors);
+ palette = gimp_image_get_colormap (image, &numcolors);
if ((numcolors != 0) &&
(mng_putchunk_plte_wrapper (handle, numcolors,
@@ -844,15 +1087,16 @@ mng_save_image (const gchar *filename,
int color_type;
int bit_depth;
- layer_name = gimp_item_get_name (layers[i]);
+ layer_name = gimp_item_get_name (GIMP_ITEM (layers[i]));
layer_chunks_type = parse_chunks_type_from_layer_name (layer_name);
- layer_drawable_type = gimp_drawable_type (layers[i]);
+ layer_drawable_type = gimp_drawable_type (GIMP_DRAWABLE (layers[i]));
- layer_buffer = gimp_drawable_get_buffer (layers[i]);
+ layer_buffer = gimp_drawable_get_buffer (GIMP_DRAWABLE (layers[i]));
layer_cols = gegl_buffer_get_width (layer_buffer);
layer_rows = gegl_buffer_get_height (layer_buffer);
- gimp_drawable_offsets (layers[i], &layer_offset_x, &layer_offset_y);
+ gimp_drawable_offsets (GIMP_DRAWABLE (layers[i]),
+ &layer_offset_x, &layer_offset_y);
layer_has_unique_palette = TRUE;
for (j = 0; j < 256; j++)
@@ -1041,14 +1285,14 @@ mng_save_image (const gchar *filename,
color_type = PNG_COLOR_TYPE_PALETTE;
mngg.has_plte = TRUE;
mngg.palette = (png_colorp)
- gimp_image_get_colormap (image_id, &mngg.num_palette);
+ gimp_image_get_colormap (image, &mngg.num_palette);
bit_depth = get_bit_depth_for_palette (mngg.num_palette);
break;
case GIMP_INDEXEDA_IMAGE:
color_type = PNG_COLOR_TYPE_PALETTE;
layer_has_unique_palette =
respin_cmap (pp, info, layer_remap,
- image_id, layer_buffer,
+ image, layer_buffer,
&bit_depth);
break;
default:
@@ -1316,7 +1560,7 @@ mng_save_image (const gchar *filename,
/* The interactive dialog. */
static gboolean
-mng_save_dialog (gint32 image_id)
+mng_save_dialog (GimpImage *image)
{
GtkWidget *dialog;
GtkWidget *main_vbox;
@@ -1407,7 +1651,7 @@ mng_save_dialog (gint32 image_id)
gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0);
gtk_widget_show (grid);
- gimp_image_get_layers (image_id, &num_layers);
+ g_free (gimp_image_get_layers (image, &num_layers));
if (num_layers == 1)
combo = gimp_int_combo_box_new (_("PNG"), CHUNKS_PNG_D,
@@ -1568,217 +1812,3 @@ mng_save_dialog (gint32 image_id)
return run;
}
-
-
-/* GIMP calls these methods. */
-
-const GimpPlugInInfo PLUG_IN_INFO =
-{
- NULL,
- NULL,
- query,
- run
-};
-
-MAIN ()
-
-static void
-query (void)
-{
- static const GimpParamDef save_args[] =
- {
- { GIMP_PDB_INT32, "run-mode", "The run mode { RUN-INTERACTIVE (0), RUN-NONINTERACTIVE (1) }" },
- { GIMP_PDB_IMAGE, "image", "Input image" },
- { GIMP_PDB_DRAWABLE, "drawable", "Drawable to save" },
- { GIMP_PDB_STRING, "filename", "The name of the file to save the image in" },
- { GIMP_PDB_STRING, "raw-filename", "The name of the file to save the image in" },
-
- { GIMP_PDB_INT32, "interlace", "Use interlacing" },
- { GIMP_PDB_INT32, "compression", "PNG deflate compression level (0 - 9)" },
- { GIMP_PDB_FLOAT, "quality", "JPEG quality factor (0.00 - 1.00)" },
- { GIMP_PDB_FLOAT, "smoothing", "JPEG smoothing factor (0.00 - 1.00)" },
- { GIMP_PDB_INT32, "loop", "(ANIMATED MNG) Loop infinitely" },
- { GIMP_PDB_INT32, "default-delay", "(ANIMATED MNG) Default delay between frames in milliseconds" },
- { GIMP_PDB_INT32, "default-chunks", "(ANIMATED MNG) Default chunks type (0 = PNG + Delta PNG; 1 =
JNG + Delta PNG; 2 = All PNG; 3 = All JNG)" },
- { GIMP_PDB_INT32, "default-dispose", "(ANIMATED MNG) Default dispose type (0 = combine; 1 = replace)"
},
- { GIMP_PDB_INT32, "bkgd", "Write bKGD (background color) chunk" },
- { GIMP_PDB_INT32, "gama", "Write gAMA (gamma) chunk"},
- { GIMP_PDB_INT32, "phys", "Write pHYs (image resolution) chunk" },
- { GIMP_PDB_INT32, "time", "Write tIME (creation time) chunk" }
- };
-
- gimp_install_procedure (SAVE_PROC,
- "Saves images in the MNG file format",
- "This plug-in saves images in the Multiple-image "
- "Network Graphics (MNG) format which can be used as "
- "a replacement for animated GIFs, and more.",
- "Mukund Sivaraman <muks mukund org>",
- "Mukund Sivaraman <muks mukund org>",
- "November 19, 2002",
- N_("MNG animation"),
- "RGB*,GRAY*,INDEXED*",
- GIMP_PLUGIN,
- G_N_ELEMENTS (save_args), 0,
- save_args, NULL);
-
- gimp_register_file_handler_mime (SAVE_PROC, "image/x-mng");
- gimp_register_save_handler (SAVE_PROC, "mng", "");
-}
-
-static void
-run (const gchar *name,
- gint nparams,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals)
-{
- static GimpParam values[2];
-
- INIT_I18N ();
- gegl_init (NULL, NULL);
-
- *nreturn_vals = 1;
- *return_vals = values;
-
- values[0].type = GIMP_PDB_STATUS;
- values[0].data.d_status = GIMP_PDB_SUCCESS;
-
- if (strcmp (name, SAVE_PROC) == 0)
- {
- GimpRunMode run_mode = param[0].data.d_int32;
- gint32 image_id = param[1].data.d_int32;
- gint32 original_image_id = image_id;
- gint32 drawable_id = param[2].data.d_int32;
- GimpExportReturn export = GIMP_EXPORT_IGNORE;
-
- if (run_mode == GIMP_RUN_INTERACTIVE ||
- run_mode == GIMP_RUN_WITH_LAST_VALS)
- {
- gimp_get_data (SAVE_PROC, &mng_data);
-
- gimp_ui_init (PLUG_IN_BINARY, FALSE);
-
- export = gimp_export_image (&image_id, &drawable_id, "MNG",
- GIMP_EXPORT_CAN_HANDLE_RGB |
- GIMP_EXPORT_CAN_HANDLE_GRAY |
- GIMP_EXPORT_CAN_HANDLE_INDEXED |
- GIMP_EXPORT_CAN_HANDLE_ALPHA |
- GIMP_EXPORT_CAN_HANDLE_LAYERS);
- }
-
- if (export == GIMP_EXPORT_CANCEL)
- {
- values[0].data.d_status = GIMP_PDB_CANCEL;
- }
- else if (export == GIMP_EXPORT_IGNORE || export == GIMP_EXPORT_EXPORT)
- {
- if (run_mode == GIMP_RUN_INTERACTIVE)
- {
- if (mng_save_dialog (image_id) == 0)
- values[0].data.d_status = GIMP_PDB_CANCEL;
- }
- else if (run_mode == GIMP_RUN_NONINTERACTIVE)
- {
- if (nparams != 17)
- {
- g_message ("Incorrect number of parameters "
- "passed to file-mng-save()");
- values[0].data.d_status = GIMP_PDB_CALLING_ERROR;
- }
- else
- {
- mng_data.interlaced = param[5].data.d_int32;
- mng_data.compression_level = param[6].data.d_int32;
- mng_data.quality = param[7].data.d_float;
- mng_data.smoothing = param[8].data.d_float;
- mng_data.loop = param[9].data.d_int32;
- mng_data.default_delay = param[10].data.d_int32;
- mng_data.default_chunks = param[11].data.d_int32;
- mng_data.default_dispose = param[12].data.d_int32;
- mng_data.bkgd = param[13].data.d_int32;
- mng_data.gama = param[14].data.d_int32;
- mng_data.phys = param[15].data.d_int32;
- mng_data.time = param[16].data.d_int32;
-
- if ((mng_data.compression_level < 0)
- || (mng_data.compression_level > 9))
- {
- g_warning ("Parameter 'compression_level' passed to "
- "file-mng-save() must be in the range 0 - 9; "
- "Clamping it to the default value of 6.");
- mng_data.compression_level = 6;
- }
-
- if ((mng_data.quality < ((float) 0))
- || (mng_data.quality > ((float) 1)))
- {
- g_warning ("Parameter 'quality' passed to "
- "file-mng-save() must be in the range "
- "0.00 - 1.00; Clamping it to the "
- "default value of 0.75.");
- mng_data.quality = 0.75;
- }
-
- if ((mng_data.smoothing < ((float) 0))
- || (mng_data.smoothing > ((float) 1)))
- {
- g_warning ("Parameter 'smoothing' passed to "
- "file-mng-save() must be in the "
- "range 0.00 - 1.00; Clamping it to "
- "the default value of 0.00.");
- mng_data.smoothing = 0.0;
- }
-
- if ((mng_data.default_chunks < 0)
- || (mng_data.default_chunks > 3))
- {
- g_warning ("Parameter 'default_chunks' passed to "
- "file-mng-save() must be in the range 0 - 2.");
- values[0].data.d_status = GIMP_PDB_CALLING_ERROR;
- }
-
- if ((mng_data.default_dispose < 0)
- || (mng_data.default_dispose > 1))
- {
- g_warning ("Parameter 'default_dispose' passed to "
- "file-mng-save() must be in the range 0 - 1.");
- values[0].data.d_status = GIMP_PDB_CALLING_ERROR;
- }
- }
- }
-
- if (values[0].data.d_status == GIMP_PDB_SUCCESS)
- {
- GFile *file = g_file_new_for_uri (param[3].data.d_string);
-
- GError *error = NULL;
-
- if (mng_save_image (g_file_get_path (file),
- image_id, drawable_id,
- original_image_id, &error))
- {
- gimp_set_data (SAVE_PROC, &mng_data, sizeof (mng_data));
- }
- else
- {
- values[0].data.d_status = GIMP_PDB_EXECUTION_ERROR;
-
- if (error)
- {
- *nreturn_vals = 2;
- values[1].type = GIMP_PDB_STRING;
- values[1].data.d_string = error->message;
- }
- }
- }
-
- if (export == GIMP_EXPORT_EXPORT)
- gimp_image_delete (image_id);
- }
-
- }
- else
- {
- values[0].data.d_status = GIMP_PDB_CALLING_ERROR;
- }
-}
diff --git a/plug-ins/common/plugin-defs.pl b/plug-ins/common/plugin-defs.pl
index 5d6923f192..9d2878dfef 100644
--- a/plug-ins/common/plugin-defs.pl
+++ b/plug-ins/common/plugin-defs.pl
@@ -32,7 +32,7 @@
'file-heif' => { ui => 1, optional => 1, gegl => 1, libs => 'LIBHEIF_LIBS', cflags => 'LIBHEIF_CFLAGS' },
'file-html-table' => { ui => 1, gegl => 1 },
'file-jp2-load' => { ui => 1, optional => 1, gegl => 1, libs => 'OPENJPEG_LIBS', cflags =>
'OPENJPEG_CFLAGS' },
- 'file-mng' => { ui => 1, gegl => 1, optional => 1, libs => 'MNG_LIBS', cflags => 'MNG_CFLAGS', old_api
=> 1 },
+ 'file-mng' => { ui => 1, gegl => 1, optional => 1, libs => 'MNG_LIBS', cflags => 'MNG_CFLAGS' },
'file-pat' => { ui => 1, gegl => 1 },
'file-pcx' => { ui => 1, gegl => 1 },
'file-pix' => { ui => 1, gegl => 1 },
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]