[gimp] plug-ins: port file-fli to GimpPlugIn and libgimp objects
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] plug-ins: port file-fli to GimpPlugIn and libgimp objects
- Date: Sun, 25 Aug 2019 17:31:29 +0000 (UTC)
commit 5dd8add77a75bc6a1b0dcfe83d7801bfeb6b4ff3
Author: Michael Natterer <mitch gimp org>
Date: Sun Aug 25 16:05:41 2019 +0200
plug-ins: port file-fli to GimpPlugIn and libgimp objects
plug-ins/file-fli/Makefile.am | 3 +-
plug-ins/file-fli/fli-gimp.c | 714 +++++++++++++++++++++---------------------
2 files changed, 356 insertions(+), 361 deletions(-)
---
diff --git a/plug-ins/file-fli/Makefile.am b/plug-ins/file-fli/Makefile.am
index 3e1eed8f31..7a90d8d261 100644
--- a/plug-ins/file-fli/Makefile.am
+++ b/plug-ins/file-fli/Makefile.am
@@ -29,10 +29,9 @@ file_fli_SOURCES = \
fli-gimp.c
AM_CPPFLAGS = \
- -DGIMP_DEPRECATED_REPLACE_NEW_API \
-I$(top_srcdir) \
$(GTK_CFLAGS) \
- $(GEGL_CFLAGS) \
+ $(GEGL_CFLAGS) \
-I$(includedir)
LDADD = \
diff --git a/plug-ins/file-fli/fli-gimp.c b/plug-ins/file-fli/fli-gimp.c
index 09c6016db4..42a5713dec 100644
--- a/plug-ins/file-fli/fli-gimp.c
+++ b/plug-ins/file-fli/fli-gimp.c
@@ -71,377 +71,364 @@
#define PLUG_IN_ROLE "gimp-file-fli"
-static void query (void);
-static void run (const gchar *name,
- gint nparams,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals);
-
-/* return the image-ID of the new image, or -1 in case of an error */
-static gint32 load_image (const gchar *filename,
- gint32 from_frame,
- gint32 to_frame,
- GError **error);
-static gboolean load_dialog (const gchar *filename);
-
-static gboolean save_image (const gchar *filename,
- gint32 image_id,
- gint32 from_frame,
- gint32 to_frame,
- GError **error);
-static gboolean save_dialog (gint32 image_id);
-
-static gboolean get_info (const gchar *filename,
- gint32 *width,
- gint32 *height,
- gint32 *frames,
- GError **error);
+typedef struct _Fli Fli;
+typedef struct _FliClass FliClass;
-/*
- * GIMP interface
- */
-const GimpPlugInInfo PLUG_IN_INFO =
+struct _Fli
{
- NULL, /* init_proc */
- NULL, /* quit_proc */
- query, /* query_proc */
- run, /* run_proc */
+ GimpPlugIn parent_instance;
};
-static const GimpParamDef load_args[] =
+struct _FliClass
{
- { GIMP_PDB_INT32, "run-mode", "The run mode { RUN-INTERACTIVE (0), RUN-NONINTERACTIVE (1) }" },
- { GIMP_PDB_STRING, "filename", "The name of the file to load" },
- { GIMP_PDB_STRING, "raw-filename", "The name entered" },
- { GIMP_PDB_INT32, "from-frame", "Load beginning from this frame" },
- { GIMP_PDB_INT32, "to-frame", "End loading with this frame" }
+ GimpPlugInClass parent_class;
};
-static const GimpParamDef load_return_vals[] =
-{
- { GIMP_PDB_IMAGE, "image", "Output image" },
-};
-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", "Input drawable (unused)" },
- { GIMP_PDB_STRING, "filename", "The name of the file to export" },
- { GIMP_PDB_STRING, "raw-filename", "The name entered" },
- { GIMP_PDB_INT32, "from-frame", "Export beginning from this frame" },
- { GIMP_PDB_INT32, "to-frame", "End exporting with this frame" },
-};
+#define FLI_TYPE (fli_get_type ())
+#define FLI (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLI_TYPE, Fli))
-static const GimpParamDef info_args[] =
-{
- { GIMP_PDB_STRING, "filename", "The name of the file to get info" },
-};
-static const GimpParamDef info_return_vals[] =
-{
- { GIMP_PDB_INT32, "width", "Width of one frame" },
- { GIMP_PDB_INT32, "height", "Height of one frame" },
- { GIMP_PDB_INT32, "frames", "Number of Frames" },
-};
+GType fli_get_type (void) G_GNUC_CONST;
+
+static GList * fli_query_procedures (GimpPlugIn *plug_in);
+static GimpProcedure * fli_create_procedure (GimpPlugIn *plug_in,
+ const gchar *name);
+
+static GimpValueArray * fli_load (GimpProcedure *procedure,
+ GimpRunMode run_mode,
+ GFile *file,
+ const GimpValueArray *args,
+ gpointer run_data);
+static GimpValueArray * fli_save (GimpProcedure *procedure,
+ GimpRunMode run_mode,
+ GimpImage *image,
+ GimpDrawable *drawable,
+ GFile *file,
+ const GimpValueArray *args,
+ gpointer run_data);
+static GimpValueArray * fli_info (GimpProcedure *procedure,
+ const GimpValueArray *args,
+ gpointer run_data);
+
+static GimpImage * load_image (const gchar *filename,
+ gint32 from_frame,
+ gint32 to_frame,
+ GError **error);
+static gboolean load_dialog (const gchar *filename);
+
+static gboolean save_image (const gchar *filename,
+ GimpImage *image,
+ gint32 from_frame,
+ gint32 to_frame,
+ GError **error);
+static gboolean save_dialog (GimpImage *image);
+
+static gboolean get_info (const gchar *filename,
+ gint32 *width,
+ gint32 *height,
+ gint32 *frames,
+ GError **error);
+
+
+G_DEFINE_TYPE (Fli, fli, GIMP_TYPE_PLUG_IN)
+
+GIMP_MAIN (FLI_TYPE)
static gint32 from_frame;
static gint32 to_frame;
-MAIN ()
static void
-query (void)
+fli_class_init (FliClass *klass)
{
- /*
- * Load/export procedures
- */
- gimp_install_procedure (LOAD_PROC,
- "load FLI-movies",
- "This is an experimantal plug-in to handle FLI movies",
- "Jens Ch. Restemeier",
- "Jens Ch. Restemeier",
- "1997",
- N_("AutoDesk FLIC animation"),
- NULL,
- GIMP_PLUGIN,
- G_N_ELEMENTS (load_args) - 2,
- G_N_ELEMENTS (load_return_vals),
- load_args,
- load_return_vals);
-
- gimp_register_file_handler_mime (LOAD_PROC, "image/x-flic");
- gimp_register_magic_load_handler (LOAD_PROC,
- "fli,flc",
- "",
- "");
-
- gimp_install_procedure (SAVE_PROC,
- "export FLI-movies",
- "This is an experimantal plug-in to handle FLI movies",
- "Jens Ch. Restemeier",
- "Jens Ch. Restemeier",
- "1997",
- N_("AutoDesk FLIC animation"),
- "INDEXED,GRAY",
- GIMP_PLUGIN,
- G_N_ELEMENTS (save_args), 0,
- save_args, NULL);
-
- gimp_register_file_handler_mime (SAVE_PROC, "image/x-flic");
- gimp_register_save_handler (SAVE_PROC,
- "fli,flc",
- "");
+ GimpPlugInClass *plug_in_class = GIMP_PLUG_IN_CLASS (klass);
- /*
- * Utility functions:
- */
- gimp_install_procedure (INFO_PROC,
- "Get information about a Fli movie",
- "This is a experimantal plug-in to handle FLI movies",
- "Jens Ch. Restemeier",
- "Jens Ch. Restemeier",
- "1997",
- NULL,
- NULL,
- GIMP_PLUGIN,
- G_N_ELEMENTS (info_args),
- G_N_ELEMENTS (info_return_vals),
- info_args,
- info_return_vals);
+ plug_in_class->query_procedures = fli_query_procedures;
+ plug_in_class->create_procedure = fli_create_procedure;
}
static void
-run (const gchar *name,
- gint nparams,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals)
+fli_init (Fli *fli)
{
- static GimpParam values[5];
- GimpPDBStatusType status = GIMP_PDB_SUCCESS;
- GimpRunMode run_mode;
- gint32 pc;
- gint32 image_ID;
- gint32 drawable_ID;
- gint32 orig_image_ID;
- GFile *file;
- GimpExportReturn export = GIMP_EXPORT_CANCEL;
- GError *error = NULL;
+}
- INIT_I18N ();
- gegl_init (NULL, NULL);
+static GList *
+fli_query_procedures (GimpPlugIn *plug_in)
+{
+ GList *list = NULL;
- run_mode = param[0].data.d_int32;
+ list = g_list_append (list, g_strdup (LOAD_PROC));
+ list = g_list_append (list, g_strdup (SAVE_PROC));
+ list = g_list_append (list, g_strdup (INFO_PROC));
- *nreturn_vals = 1;
- *return_vals = values;
+ return list;
+}
- values[0].type = GIMP_PDB_STATUS;
- values[0].data.d_status = GIMP_PDB_EXECUTION_ERROR;
+static GimpProcedure *
+fli_create_procedure (GimpPlugIn *plug_in,
+ const gchar *name)
+{
+ GimpProcedure *procedure = NULL;
- if (strcmp (name, LOAD_PROC) == 0)
+ if (! strcmp (name, LOAD_PROC))
{
- file = g_file_new_for_uri (param[1].data.d_string);
-
- switch (run_mode)
- {
- case GIMP_RUN_NONINTERACTIVE:
- /*
- * check for valid parameters:
- * (Or can I trust GIMP ?)
- */
- if ((nparams < G_N_ELEMENTS (load_args) - 2) ||
- (G_N_ELEMENTS (load_args) < nparams))
- {
- status = GIMP_PDB_CALLING_ERROR;
- break;
- }
- for (pc = 0; pc < G_N_ELEMENTS (load_args) - 2; pc++)
- {
- if (load_args[pc].type != param[pc].type)
- {
- status = GIMP_PDB_CALLING_ERROR;
- break;
- }
- }
- for (pc = G_N_ELEMENTS (load_args) - 2; pc < nparams; pc++)
- {
- if (load_args[pc].type != param[pc].type)
- {
- status = GIMP_PDB_CALLING_ERROR;
- break;
- }
- }
+ procedure = gimp_load_procedure_new (plug_in, name, GIMP_PLUGIN,
+ fli_load, NULL, NULL);
+
+ gimp_procedure_set_menu_label (procedure, N_("AutoDesk FLIC animation"));
+
+ gimp_procedure_set_documentation (procedure,
+ "Load FLI-movies",
+ "This is an experimantal plug-in to "
+ "handle FLI movies",
+ name);
+ gimp_procedure_set_attribution (procedure,
+ "Jens Ch. Restemeier",
+ "Jens Ch. Restemeier",
+ "1997");
+
+ gimp_file_procedure_set_mime_types (GIMP_FILE_PROCEDURE (procedure),
+ "image/x-flic");
+ gimp_file_procedure_set_extensions (GIMP_FILE_PROCEDURE (procedure),
+ "fli,flc");
+
+ GIMP_PROC_ARG_INT (procedure, "from-frame",
+ "From frame",
+ "Load beginning from this frame",
+ -1, G_MAXINT, -1,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_INT (procedure, "to-frame",
+ "To frame",
+ "End loading with this frame",
+ -1, G_MAXINT, -1,
+ G_PARAM_READWRITE);
+ }
+ else if (! strcmp (name, SAVE_PROC))
+ {
+ procedure = gimp_save_procedure_new (plug_in, name, GIMP_PLUGIN,
+ fli_save, NULL, NULL);
+
+ gimp_procedure_set_image_types (procedure, "INDEXED, GRAY");
+
+ gimp_procedure_set_menu_label (procedure, N_("AutoDesk FLIC animation"));
+
+ gimp_procedure_set_documentation (procedure,
+ "Export FLI-movies",
+ "This is an experimantal plug-in to "
+ "handle FLI movies",
+ name);
+ gimp_procedure_set_attribution (procedure,
+ "Jens Ch. Restemeier",
+ "Jens Ch. Restemeier",
+ "1997");
+
+ gimp_file_procedure_set_mime_types (GIMP_FILE_PROCEDURE (procedure),
+ "image/x-flic");
+ gimp_file_procedure_set_extensions (GIMP_FILE_PROCEDURE (procedure),
+ "fli,flc");
+
+ GIMP_PROC_ARG_INT (procedure, "from-frame",
+ "From frame",
+ "Export beginning from this frame",
+ -1, G_MAXINT, -1,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_INT (procedure, "to-frame",
+ "To frame",
+ "End exporting with this frame",
+ -1, G_MAXINT, -1,
+ G_PARAM_READWRITE);
+ }
+ else if (! strcmp (name, INFO_PROC))
+ {
+ procedure = gimp_procedure_new (plug_in, name, GIMP_PLUGIN,
+ fli_info, NULL, NULL);
+
+ gimp_procedure_set_documentation (procedure,
+ "Get information about a Fli movie",
+ "This is an experimantal plug-in to "
+ "handle FLI movies",
+ name);
+ gimp_procedure_set_attribution (procedure,
+ "Jens Ch. Restemeier",
+ "Jens Ch. Restemeier",
+ "1997");
+
+ GIMP_PROC_ARG_STRING (procedure, "uri",
+ "URI",
+ "The local file:// URI of the file to get info",
+ NULL,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_VAL_INT (procedure, "width",
+ "Width",
+ "Width of one frame",
+ 0, GIMP_MAX_IMAGE_SIZE, 0,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_VAL_INT (procedure, "height",
+ "Height",
+ "Height of one frame",
+ 0, GIMP_MAX_IMAGE_SIZE, 0,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_VAL_INT (procedure, "frames",
+ "Frames",
+ "Number of frames",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE);
+ }
- to_frame = ((nparams < G_N_ELEMENTS (load_args) - 1) ?
- 1 : param[3].data.d_int32);
- from_frame = ((nparams < G_N_ELEMENTS (load_args)) ?
- -1 : param[4].data.d_int32);
+ return procedure;
+}
- image_ID = load_image (g_file_get_path (file),
- from_frame, to_frame, &error);
+static GimpValueArray *
+fli_load (GimpProcedure *procedure,
+ GimpRunMode run_mode,
+ GFile *file,
+ const GimpValueArray *args,
+ gpointer run_data)
+{
+ GimpValueArray *return_vals;
+ GimpImage *image;
+ GError *error = NULL;
- if (image_ID != -1)
- {
- *nreturn_vals = 2;
- values[1].type = GIMP_PDB_IMAGE;
- values[1].data.d_image = image_ID;
- }
- else
- {
- status = GIMP_PDB_EXECUTION_ERROR;
- }
- break;
+ INIT_I18N ();
+ gegl_init (NULL, NULL);
- case GIMP_RUN_INTERACTIVE:
- if (load_dialog (g_file_get_path (file)))
- {
- image_ID = load_image (g_file_get_path (file),
- from_frame, to_frame, &error);
+ switch (run_mode)
+ {
+ case GIMP_RUN_NONINTERACTIVE:
+ from_frame = GIMP_VALUES_GET_INT (args, 0);
+ to_frame = GIMP_VALUES_GET_INT (args, 1);
+ break;
- if (image_ID != -1)
- {
- *nreturn_vals = 2;
- values[1].type = GIMP_PDB_IMAGE;
- values[1].data.d_image = image_ID;
- }
- else
- {
- status = GIMP_PDB_EXECUTION_ERROR;
- }
- }
- else
- {
- status = GIMP_PDB_CANCEL;
- }
- break;
+ case GIMP_RUN_INTERACTIVE:
+ if (! load_dialog (g_file_get_path (file)))
+ return gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_CANCEL,
+ NULL);
+ break;
- case GIMP_RUN_WITH_LAST_VALS:
- status = GIMP_PDB_CALLING_ERROR;
- break;
- }
+ case GIMP_RUN_WITH_LAST_VALS:
+ return gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_CALLING_ERROR,
+ error);
+ break;
}
- else if (strcmp (name, SAVE_PROC) == 0)
- {
- GFile *file = g_file_new_for_uri (param[3].data.d_string);
- image_ID = orig_image_ID = param[1].data.d_int32;
- drawable_ID = param[2].data.d_int32;
+ image = load_image (g_file_get_path (file),
+ from_frame, to_frame, &error);
- switch (run_mode)
- {
- case GIMP_RUN_NONINTERACTIVE:
- if (nparams != G_N_ELEMENTS (save_args))
- {
- status = GIMP_PDB_CALLING_ERROR;
- break;
- }
- for (pc = 0; pc < G_N_ELEMENTS (save_args); pc++)
- {
- if (save_args[pc].type!=param[pc].type)
- {
- status = GIMP_PDB_CALLING_ERROR;
- break;
- }
- }
- if (! save_image (g_file_get_path (file), image_ID,
- param[5].data.d_int32,
- param[6].data.d_int32, &error))
- {
- status = GIMP_PDB_EXECUTION_ERROR;
- }
- break;
+ if (! image)
+ return gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_EXECUTION_ERROR,
+ error);
- case GIMP_RUN_INTERACTIVE:
- case GIMP_RUN_WITH_LAST_VALS:
- gimp_ui_init (PLUG_IN_BINARY, FALSE);
+ return_vals = gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_SUCCESS,
+ NULL);
- export = gimp_export_image (&image_ID, &drawable_ID, "FLI",
- GIMP_EXPORT_CAN_HANDLE_INDEXED |
- GIMP_EXPORT_CAN_HANDLE_GRAY |
- GIMP_EXPORT_CAN_HANDLE_ALPHA |
- GIMP_EXPORT_CAN_HANDLE_LAYERS);
+ GIMP_VALUES_SET_IMAGE (return_vals, 1, image);
- if (export == GIMP_EXPORT_CANCEL)
- {
- values[0].data.d_status = GIMP_PDB_CANCEL;
- return;
- }
+ return return_vals;
+}
- if (save_dialog (param[1].data.d_image))
- {
- if (! save_image (g_file_get_path (file),
- image_ID, from_frame, to_frame, &error))
- {
- status = GIMP_PDB_EXECUTION_ERROR;
- }
- }
- else
- {
- status = GIMP_PDB_CANCEL;
- }
- break;
- }
+static GimpValueArray *
+fli_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_CANCEL;
+ GError *error = NULL;
- if (export == GIMP_EXPORT_EXPORT)
- gimp_image_delete (image_ID);
- }
- else if (strcmp (name, INFO_PROC) == 0)
+ INIT_I18N ();
+ gegl_init (NULL, NULL);
+
+ switch (run_mode)
{
- gint32 width, height, frames;
+ case GIMP_RUN_NONINTERACTIVE:
+ from_frame = GIMP_VALUES_GET_INT (args, 0);
+ to_frame = GIMP_VALUES_GET_INT (args, 1);
+
+ if (from_frame > to_frame)
+ return gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_CALLING_ERROR,
+ NULL);
+ break;
- /*
- * check for valid parameters;
- */
- if (nparams != G_N_ELEMENTS (info_args))
- status = GIMP_PDB_CALLING_ERROR;
+ case GIMP_RUN_INTERACTIVE:
+ case GIMP_RUN_WITH_LAST_VALS:
+ gimp_ui_init (PLUG_IN_BINARY, FALSE);
- if (status == GIMP_PDB_SUCCESS)
- {
- for (pc = 0; pc < G_N_ELEMENTS (save_args); pc++)
- {
- if (info_args[pc].type != param[pc].type)
- {
- status = GIMP_PDB_CALLING_ERROR;
- break;
- }
- }
- }
+ export = gimp_export_image (&image, &drawable, "FLI",
+ GIMP_EXPORT_CAN_HANDLE_INDEXED |
+ GIMP_EXPORT_CAN_HANDLE_GRAY |
+ GIMP_EXPORT_CAN_HANDLE_ALPHA |
+ GIMP_EXPORT_CAN_HANDLE_LAYERS);
- if (status == GIMP_PDB_SUCCESS)
- {
- if (get_info (param[0].data.d_string,
- &width, &height, &frames, &error))
- {
- *nreturn_vals = 4;
- values[1].type = GIMP_PDB_INT32;
- values[1].data.d_int32 = width;
- values[2].type = GIMP_PDB_INT32;
- values[2].data.d_int32 = height;
- values[3].type = GIMP_PDB_INT32;
- values[3].data.d_int32 = frames;
- }
- else
- {
- status = GIMP_PDB_EXECUTION_ERROR;
- }
- }
+ if (export == GIMP_EXPORT_CANCEL)
+ return gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_CANCEL,
+ NULL);
+
+ if (! save_dialog (image))
+ status = GIMP_PDB_CANCEL;
}
- else
+
+ if (status == GIMP_PDB_SUCCESS)
{
- status = GIMP_PDB_CALLING_ERROR;
+ if (! save_image (g_file_get_path (file), image,
+ from_frame, to_frame, &error))
+ {
+ status = GIMP_PDB_EXECUTION_ERROR;
+ }
}
- if (status != GIMP_PDB_SUCCESS && error)
+ if (export == GIMP_EXPORT_EXPORT)
+ gimp_image_delete (image);
+
+ return gimp_procedure_new_return_values (procedure, status, error);
+}
+
+static GimpValueArray *
+fli_info (GimpProcedure *procedure,
+ const GimpValueArray *args,
+ gpointer run_data)
+{
+ GimpValueArray *return_vals;
+ GFile *file;
+ gint32 width;
+ gint32 height;
+ gint32 frames;
+ GError *error = NULL;
+
+ file = g_file_new_for_uri (GIMP_VALUES_GET_STRING (args, 0));
+
+ if (! get_info (g_file_get_path (file),
+ &width, &height, &frames, &error))
{
- *nreturn_vals = 2;
- values[1].type = GIMP_PDB_STRING;
- values[1].data.d_string = error->message;
+ return gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_EXECUTION_ERROR,
+ error);
}
- values[0].data.d_status = status;
+ return_vals = gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_SUCCESS,
+ NULL);
+
+ GIMP_VALUES_SET_INT (return_vals, 1, width);
+ GIMP_VALUES_SET_INT (return_vals, 2, height);
+ GIMP_VALUES_SET_INT (return_vals, 3, frames);
+
+ return return_vals;
}
/*
@@ -454,8 +441,8 @@ get_info (const gchar *filename,
gint32 *frames,
GError **error)
{
- FILE *file;
- s_fli_header fli_header;
+ FILE *file;
+ s_fli_header fli_header;
*width = 0; *height = 0; *frames = 0;
@@ -482,7 +469,7 @@ get_info (const gchar *filename,
/*
* load fli animation and store as framestack
*/
-static gint32
+static GimpImage *
load_image (const gchar *filename,
gint32 from_frame,
gint32 to_frame,
@@ -490,7 +477,8 @@ load_image (const gchar *filename,
{
FILE *file;
GeglBuffer *buffer;
- gint32 image_id, layer_ID;
+ GimpImage *image;
+ GimpLayer *layer;
guchar *fb, *ofb, *fb_x;
guchar cm[768], ocm[768];
s_fli_header fli_header;
@@ -500,19 +488,19 @@ load_image (const gchar *filename,
gimp_filename_to_utf8 (filename));
file = g_fopen (filename ,"rb");
- if (!file)
+ if (! file)
{
g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno),
_("Could not open '%s' for reading: %s"),
gimp_filename_to_utf8 (filename), g_strerror (errno));
- return -1;
+ return NULL;
}
fli_read_header (file, &fli_header);
if (fli_header.magic == NO_HEADER)
{
fclose (file);
- return -1;
+ return NULL;
}
else
{
@@ -527,7 +515,7 @@ load_image (const gchar *filename,
/* to make scripting easier: */
from_frame=1; to_frame=fli_header.frames;
}
- if (to_frame<from_frame)
+ if (to_frame < from_frame)
{
to_frame = fli_header.frames;
}
@@ -539,23 +527,23 @@ load_image (const gchar *filename,
{
/* nothing to do ... */
fclose (file);
- return -1;
+ return NULL;
}
if (from_frame >= fli_header.frames)
{
/* nothing to do ... */
fclose (file);
- return -1;
+ return NULL;
}
- if (to_frame>fli_header.frames)
+ if (to_frame > fli_header.frames)
{
to_frame = fli_header.frames;
}
- image_id = gimp_image_new (fli_header.width, fli_header.height, GIMP_INDEXED);
- gimp_image_set_filename (image_id, filename);
+ image = gimp_image_new (fli_header.width, fli_header.height, GIMP_INDEXED);
+ gimp_image_set_filename (image, filename);
- fb = g_malloc (fli_header.width * fli_header.height);
+ fb = g_malloc (fli_header.width * fli_header.height);
ofb = g_malloc (fli_header.width * fli_header.height);
/*
@@ -574,14 +562,14 @@ load_image (const gchar *filename,
{
gchar *name_buf = g_strdup_printf (_("Frame (%i)"), cnt);
- layer_ID = gimp_layer_new (image_id, name_buf,
- fli_header.width, fli_header.height,
- GIMP_INDEXED_IMAGE,
- 100,
- gimp_image_get_default_new_layer_mode (image_id));
+ layer = gimp_layer_new (image, name_buf,
+ fli_header.width, fli_header.height,
+ GIMP_INDEXED_IMAGE,
+ 100,
+ gimp_image_get_default_new_layer_mode (image));
g_free (name_buf);
- buffer = gimp_drawable_get_buffer (layer_ID);
+ buffer = gimp_drawable_get_buffer (GIMP_DRAWABLE (layer));
fli_read_frame (file, &fli_header, ofb, ocm, fb, cm);
@@ -593,9 +581,9 @@ load_image (const gchar *filename,
g_object_unref (buffer);
if (cnt > 0)
- gimp_layer_add_alpha (layer_ID);
+ gimp_layer_add_alpha (layer);
- gimp_image_insert_layer (image_id, layer_ID, -1, 0);
+ gimp_image_insert_layer (image, layer, NULL, 0);
if (cnt < to_frame)
{
@@ -606,7 +594,7 @@ load_image (const gchar *filename,
gimp_progress_update ((double) cnt + 1 / (double)(to_frame - from_frame));
}
- gimp_image_set_colormap (image_id, cm, 256);
+ gimp_image_set_colormap (image, cm, 256);
fclose (file);
@@ -615,7 +603,7 @@ load_image (const gchar *filename,
gimp_progress_update (1.0);
- return image_id;
+ return image;
}
@@ -627,13 +615,14 @@ load_image (const gchar *filename,
*/
static gboolean
save_image (const gchar *filename,
- gint32 image_id,
+ GimpImage *image,
gint32 from_frame,
gint32 to_frame,
GError **error)
{
FILE *file;
- gint32 *framelist;
+ GList *framelist;
+ GList *list;
gint nframes;
gint colors, i;
guchar *cmap;
@@ -649,7 +638,8 @@ save_image (const gchar *filename,
s_fli_header fli_header;
gint cnt;
- framelist = gimp_image_get_layers (image_id, &nframes);
+ framelist = gimp_image_get_layers (image);
+ nframes = g_list_length (framelist);
if ((from_frame == -1) && (to_frame == -1))
{
@@ -682,7 +672,7 @@ save_image (const gchar *filename,
gimp_context_get_background (&background);
gimp_rgb_get_uchar (&background, &red, &green, &blue);
- switch (gimp_image_base_type (image_id))
+ switch (gimp_image_base_type (image))
{
case GIMP_GRAY:
/* build grayscale palette */
@@ -696,7 +686,7 @@ save_image (const gchar *filename,
case GIMP_INDEXED:
max = MAXDIFF;
bg = 0;
- cmap = gimp_image_get_colormap (image_id, &colors);
+ cmap = gimp_image_get_colormap (image, &colors);
for (i = 0; i < MIN (colors, 256); i++)
{
cm[i*3+0] = cmap[i*3+0];
@@ -735,8 +725,8 @@ save_image (const gchar *filename,
*/
fli_header.filesize = 0; /* will be fixed when writing the header */
fli_header.frames = 0; /* will be fixed during the write */
- fli_header.width = gimp_image_width (image_id);
- fli_header.height = gimp_image_height (image_id);
+ fli_header.width = gimp_image_width (image);
+ fli_header.height = gimp_image_height (image);
if ((fli_header.width == 320) && (fli_header.height == 200))
{
@@ -774,16 +764,19 @@ save_image (const gchar *filename,
/*
* Now write all frames
*/
- for (cnt = from_frame; cnt <= to_frame; cnt++)
+ for (cnt = from_frame, list = g_list_nth (framelist, nframes - cnt);
+ cnt <= to_frame && list;
+ cnt++, list = g_list_previous (list))
{
- GeglBuffer *buffer;
- const Babl *format = NULL;
+ GimpDrawable *drawable = list->data;
+ GeglBuffer *buffer;
+ const Babl *format = NULL;
- buffer = gimp_drawable_get_buffer (framelist[nframes-cnt]);
+ buffer = gimp_drawable_get_buffer (drawable);
- if (gimp_drawable_is_gray (framelist[nframes-cnt]))
+ if (gimp_drawable_is_gray (drawable))
{
- if (gimp_drawable_has_alpha (framelist[nframes-cnt]))
+ if (gimp_drawable_has_alpha (drawable))
format = babl_format ("Y' u8");
else
format = babl_format ("Y'A u8");
@@ -796,7 +789,7 @@ save_image (const gchar *filename,
cols = gegl_buffer_get_width (buffer);
rows = gegl_buffer_get_height (buffer);
- gimp_drawable_offsets (framelist[nframes-cnt], &offset_x, &offset_y);
+ gimp_drawable_offsets (drawable, &offset_x, &offset_y);
bytes = babl_format_get_bytes_per_pixel (format);
@@ -848,7 +841,7 @@ save_image (const gchar *filename,
g_free (fb);
g_free (ofb);
- g_free (framelist);
+ g_list_free (framelist);
gimp_progress_update (1.0);
@@ -931,16 +924,19 @@ load_dialog (const gchar *filename)
}
static gboolean
-save_dialog (gint32 image_id)
+save_dialog (GimpImage *image)
{
GtkWidget *dialog;
GtkWidget *grid;
GtkWidget *spinbutton;
GtkAdjustment *adj;
+ GList *frames;
gint nframes;
gboolean run;
- g_free (gimp_image_get_layers (image_id, &nframes));
+ frames = gimp_image_get_layers (image);
+ nframes = g_list_length (frames);
+ g_list_free (frames);
from_frame = 1;
to_frame = nframes;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]