[gimp] plug-ins: port animation-play to GimpPlugIn
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] plug-ins: port animation-play to GimpPlugIn
- Date: Wed, 14 Aug 2019 18:03:26 +0000 (UTC)
commit ff5dd3f3cf4b6f236e3413dc52a6c57867520676
Author: Michael Natterer <mitch gimp org>
Date: Wed Aug 14 20:03:06 2019 +0200
plug-ins: port animation-play to GimpPlugIn
plug-ins/common/animation-play.c | 180 +++++++++++++++++++++++++--------------
1 file changed, 114 insertions(+), 66 deletions(-)
---
diff --git a/plug-ins/common/animation-play.c b/plug-ins/common/animation-play.c
index fd9d33e436..2e0ee71baa 100644
--- a/plug-ins/common/animation-play.c
+++ b/plug-ins/common/animation-play.c
@@ -67,13 +67,36 @@ typedef struct
gint x, y;
} CursorOffset;
-/* Declare local functions. */
-static void query (void);
-static void run (const gchar *name,
- gint nparams,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals);
+
+typedef struct _Play Play;
+typedef struct _PlayClass PlayClass;
+
+struct _Play
+{
+ GimpPlugIn parent_instance;
+};
+
+struct _PlayClass
+{
+ GimpPlugInClass parent_class;
+};
+
+
+/* Declare local functions.
+ */
+
+#define PLAY_TYPE (play_get_type ())
+#define PLAY (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PLAY_TYPE, Play))
+
+GType play_get_type (void) G_GNUC_CONST;
+
+static GList * play_query_procedures (GimpPlugIn *plug_in);
+static GimpProcedure * play_create_procedure (GimpPlugIn *plug_in,
+ const gchar *name);
+
+static GimpValueArray * play_run (GimpProcedure *procedure,
+ const GimpValueArray *args,
+ gpointer run_data);
static void initialize (void);
static void build_dialog (gchar *imagename);
@@ -136,13 +159,9 @@ static gboolean is_ms_tag (const gchar *str,
gint *taglength);
-const GimpPlugInInfo PLUG_IN_INFO =
-{
- NULL, /* init_proc */
- NULL, /* quit_proc */
- query, /* query_proc */
- run, /* run_proc */
-};
+G_DEFINE_TYPE (Play, play, GIMP_TYPE_PLUG_IN)
+
+GIMP_MAIN (PLAY_TYPE)
/* Global widgets'n'stuff */
@@ -191,77 +210,106 @@ static AnimationSettings settings =
static gint32 frames_image_id = 0;
-MAIN ()
static void
-query (void)
+play_class_init (PlayClass *klass)
{
- static const GimpParamDef 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)" }
- };
+ GimpPlugInClass *plug_in_class = GIMP_PLUG_IN_CLASS (klass);
- gimp_install_procedure (PLUG_IN_PROC,
- N_("Preview a GIMP layer-based animation"),
- "",
- "Adam D. Moss <adam gimp org>",
- "Adam D. Moss <adam gimp org>",
- "1997, 1998...",
- N_("_Playback..."),
- "RGB*, INDEXED*, GRAY*",
- GIMP_PLUGIN,
- G_N_ELEMENTS (args), 0,
- args, NULL);
-
- gimp_plugin_menu_register (PLUG_IN_PROC, "<Image>/Filters/Animation");
- gimp_plugin_icon_register (PLUG_IN_PROC, GIMP_ICON_TYPE_ICON_NAME,
- (const guint8 *) "media-playback-start");
+ plug_in_class->query_procedures = play_query_procedures;
+ plug_in_class->create_procedure = play_create_procedure;
}
static void
-run (const gchar *name,
- gint n_params,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals)
+play_init (Play *play)
{
- static GimpParam values[1];
- GimpRunMode run_mode;
- GimpPDBStatusType status = GIMP_PDB_SUCCESS;
+}
- INIT_I18N ();
- gegl_init (NULL, NULL);
+static GList *
+play_query_procedures (GimpPlugIn *plug_in)
+{
+ return g_list_append (NULL, g_strdup (PLUG_IN_PROC));
+}
- *nreturn_vals = 1;
- *return_vals = values;
+static GimpProcedure *
+play_create_procedure (GimpPlugIn *plug_in,
+ const gchar *name)
+{
+ GimpProcedure *procedure = NULL;
- run_mode = param[0].data.d_int32;
+ if (! strcmp (name, PLUG_IN_PROC))
+ {
+ procedure = gimp_procedure_new (plug_in, name, GIMP_PLUGIN,
+ play_run, NULL, NULL);
+
+ gimp_procedure_set_image_types (procedure, "*");
+
+ gimp_procedure_set_menu_label (procedure, N_("_Playback..."));
+ gimp_procedure_add_menu_path (procedure, "<Image>/Filters/Animation/");
+
+ gimp_procedure_set_documentation (procedure,
+ N_("Preview a GIMP layer-based "
+ "animation"),
+ "",
+ name);
+ gimp_procedure_set_attribution (procedure,
+ "Adam D. Moss <adam gimp org>",
+ "Adam D. Moss <adam gimp org>",
+ "1997, 1998...");
+
+ gimp_procedure_set_icon_name (procedure, "media-playback-start");
+
+ gimp_procedure_add_argument (procedure,
+ g_param_spec_enum ("run-mode",
+ "Run mode",
+ "The run mode",
+ GIMP_TYPE_RUN_MODE,
+ GIMP_RUN_NONINTERACTIVE,
+ G_PARAM_READWRITE));
+ gimp_procedure_add_argument (procedure,
+ gimp_param_spec_image_id ("image",
+ "Image",
+ "The input image",
+ FALSE,
+ G_PARAM_READWRITE));
+ gimp_procedure_add_argument (procedure,
+ gimp_param_spec_drawable_id ("drawable",
+ "Drawable",
+ "The input drawable",
+ FALSE,
+ G_PARAM_READWRITE));
+ }
- if (run_mode == GIMP_RUN_NONINTERACTIVE && n_params != 3)
- {
- status = GIMP_PDB_CALLING_ERROR;
- }
+ return procedure;
+}
- if (status == GIMP_PDB_SUCCESS)
- {
- gimp_get_data (PLUG_IN_PROC, &settings);
- image_id = param[1].data.d_image;
+static GimpValueArray *
+play_run (GimpProcedure *procedure,
+ const GimpValueArray *args,
+ gpointer run_data)
+{
+ GimpRunMode run_mode;
- initialize ();
- gtk_main ();
- gimp_set_data (PLUG_IN_PROC, &settings, sizeof (settings));
+ INIT_I18N ();
+ gegl_init (NULL, NULL);
- if (run_mode != GIMP_RUN_NONINTERACTIVE)
- gimp_displays_flush ();
- }
+ run_mode = g_value_get_enum (gimp_value_array_index (args, 0));
+ image_id = gimp_value_get_image_id (gimp_value_array_index (args, 1));
- values[0].type = GIMP_PDB_STATUS;
- values[0].data.d_status = status;
+ gimp_get_data (PLUG_IN_PROC, &settings);
+
+ initialize ();
+ gtk_main ();
+
+ gimp_set_data (PLUG_IN_PROC, &settings, sizeof (settings));
+
+ if (run_mode != GIMP_RUN_NONINTERACTIVE)
+ gimp_displays_flush ();
gimp_image_delete (frames_image_id);
gegl_exit ();
+
+ return gimp_procedure_new_return_values (procedure, GIMP_PDB_SUCCESS, NULL);
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]