[gimp] plug-ins: port gfig to GimpPlugIn
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] plug-ins: port gfig to GimpPlugIn
- Date: Wed, 14 Aug 2019 10:58:49 +0000 (UTC)
commit 0b5f5bf70a60d962abb2a04da260e0d01f38b642
Author: Michael Natterer <mitch gimp org>
Date: Wed Aug 14 12:58:27 2019 +0200
plug-ins: port gfig to GimpPlugIn
plug-ins/gfig/gfig.c | 196 ++++++++++++++++++++++++++++++++-------------------
1 file changed, 122 insertions(+), 74 deletions(-)
---
diff --git a/plug-ins/gfig/gfig.c b/plug-ins/gfig/gfig.c
index 2ea3ab98a4..3ba11e4c14 100644
--- a/plug-ins/gfig/gfig.c
+++ b/plug-ins/gfig/gfig.c
@@ -57,23 +57,43 @@
#define GFIG_HEADER "GFIG Version 0.2\n"
-static void query (void);
-static void run (const gchar *name,
- gint nparams,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals);
+typedef struct _Gfig Gfig;
+typedef struct _GfigClass GfigClass;
+struct _Gfig
+{
+ GimpPlugIn parent_instance;
+};
-const GimpPlugInInfo PLUG_IN_INFO =
+struct _GfigClass
{
- NULL, /* init_proc */
- NULL, /* quit_proc */
- query, /* query_proc */
- run, /* run_proc */
+ GimpPlugInClass parent_class;
};
+#define GFIG_TYPE (gfig_get_type ())
+#define GFIG (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GFIG_TYPE, Gfig))
+
+GType gfig_get_type (void) G_GNUC_CONST;
+
+static GList * gfig_query_procedures (GimpPlugIn *plug_in);
+static GimpProcedure * gfig_create_procedure (GimpPlugIn *plug_in,
+ const gchar *name);
+
+static GimpValueArray * gfig_run (GimpProcedure *procedure,
+ const GimpValueArray *args,
+ gpointer run_data);
+
+static gint load_options (GFigObj *gfig,
+ FILE *fp);
+
+
+
+G_DEFINE_TYPE (Gfig, gfig, GIMP_TYPE_PLUG_IN)
+
+GIMP_MAIN (GFIG_TYPE)
+
+
gint line_no;
gint obj_show_single = -1; /* -1 all >= 0 object number */
@@ -86,8 +106,6 @@ GfigObject *tmp_line; /* Needed when drawing lines */
gboolean need_to_scale;
-static gint load_options (GFigObj *gfig,
- FILE *fp);
/* globals */
GfigObjectClass dobj_class[10];
@@ -104,72 +122,111 @@ gint preview_width, preview_height;
gdouble scale_x_factor, scale_y_factor;
GdkPixbuf *back_pixbuf = NULL;
-MAIN ()
static void
-query (void)
+gfig_class_init (GfigClass *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 (unused)" },
- { GIMP_PDB_DRAWABLE, "drawable", "Input drawable" },
- { GIMP_PDB_INT32, "dummy", "dummy" }
- };
-
- gimp_install_procedure (PLUG_IN_PROC,
- N_("Create geometric shapes"),
- "Draw Vector Graphics and paint them onto your images. "
- "Gfig allows you to draw many types of objects "
- "including Lines, Circles, Ellipses, Curves, Polygons, "
- "pointed stars, Bezier curves, and Spirals. "
- "Objects can be painted using Brushes or other tools"
- "or filled using colors or patterns. "
- "Gfig objects can also be used to create selections. ",
- "Andy Thomas",
- "Andy Thomas",
- "1997",
- N_("_Gfig..."),
- "RGB*, GRAY*",
- GIMP_PLUGIN,
- G_N_ELEMENTS (args), 0,
- args, NULL);
-
- gimp_plugin_menu_register (PLUG_IN_PROC, "<Image>/Filters/Render");
+ GimpPlugInClass *plug_in_class = GIMP_PLUG_IN_CLASS (klass);
+
+ plug_in_class->query_procedures = gfig_query_procedures;
+ plug_in_class->create_procedure = gfig_create_procedure;
}
static void
-run (const gchar *name,
- gint nparams,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals)
+gfig_init (Gfig *gfig)
+{
+}
+
+static GList *
+gfig_query_procedures (GimpPlugIn *plug_in)
+{
+ return g_list_append (NULL, g_strdup (PLUG_IN_PROC));
+}
+
+static GimpProcedure *
+gfig_create_procedure (GimpPlugIn *plug_in,
+ const gchar *name)
+{
+ GimpProcedure *procedure = NULL;
+
+ if (! strcmp (name, PLUG_IN_PROC))
+ {
+ procedure = gimp_procedure_new (plug_in, name, GIMP_PLUGIN,
+ gfig_run, NULL, NULL);
+
+ gimp_procedure_set_image_types (procedure, "RGB*, GRAY*");
+
+ gimp_procedure_set_menu_label (procedure, N_("_Gfig..."));
+ gimp_procedure_add_menu_path (procedure, "<Image>/Filters/Render");
+
+ gimp_procedure_set_documentation (procedure,
+ N_("Create geometric shapes"),
+ "Draw Vector Graphics and paint them "
+ "onto your images. Gfig allows you "
+ "to draw many types of objects "
+ "including Lines, Circles, Ellipses, "
+ "Curves, Polygons, pointed stars, "
+ "Bezier curves, and Spirals. "
+ "Objects can be painted using "
+ "Brushes or other tools or filled "
+ "using colors or patterns. "
+ "Gfig objects can also be used to "
+ "create selections.",
+ name);
+ gimp_procedure_set_attribution (procedure,
+ "Andy Thomas",
+ "Andy Thomas",
+ "1997");
+
+ 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));
+ }
+
+ return procedure;
+}
+
+static GimpValueArray *
+gfig_run (GimpProcedure *procedure,
+ const GimpValueArray *args,
+ gpointer run_data)
{
- static GimpParam values[1];
- gint32 drawable_id;
GimpRunMode run_mode;
+ gint32 image_id;
+ gint32 drawable_id;
GimpPDBStatusType status = GIMP_PDB_SUCCESS;
gint pwidth, pheight;
INIT_I18N ();
gfig_context = g_new0 (GFigContext, 1);
- gfig_context->show_background = TRUE;
- gfig_context->selected_obj = NULL;
- drawable_id = param[2].data.d_drawable;
+ gfig_context->show_background = TRUE;
+ gfig_context->selected_obj = NULL;
- run_mode = param[0].data.d_int32;
+ 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));
+ drawable_id = gimp_value_get_drawable_id (gimp_value_array_index (args, 2));
- gfig_context->image_id = param[1].data.d_image;
+ gfig_context->image_id = image_id;
gfig_context->drawable_id = drawable_id;
- *nreturn_vals = 1;
- *return_vals = values;
-
- values[0].type = GIMP_PDB_STATUS;
- values[0].data.d_status = status;
-
gimp_image_undo_group_start (gfig_context->image_id);
gimp_context_push ();
@@ -184,7 +241,8 @@ run (const gchar *name,
gimp_context_pop ();
gimp_image_undo_group_end (gfig_context->image_id);
- return;
+
+ return gimp_procedure_new_return_values (procedure, status, NULL);
}
/* Calculate preview size */
@@ -200,7 +258,6 @@ run (const gchar *name,
pwidth = sel_width * pheight / sel_height;
}
-
preview_width = MAX (pwidth, 2); /* Min size is 2 */
preview_height = MAX (pheight, 2);
@@ -216,12 +273,12 @@ run (const gchar *name,
{
case GIMP_RUN_INTERACTIVE:
case GIMP_RUN_WITH_LAST_VALS:
- /*gimp_get_data (PLUG_IN_PROC, &selvals);*/
if (! gfig_dialog ())
{
gimp_image_undo_group_end (gfig_context->image_id);
- return;
+ return gimp_procedure_new_return_values (procedure, GIMP_PDB_CANCEL,
+ NULL);
}
break;
@@ -239,17 +296,8 @@ run (const gchar *name,
if (run_mode != GIMP_RUN_NONINTERACTIVE)
gimp_displays_flush ();
- else
-#if 0
- if (run_mode == GIMP_RUN_INTERACTIVE)
- gimp_set_data (PLUG_IN_PROC, &selvals, sizeof (SelectItVals));
- else
-#endif /* 0 */
- {
- status = GIMP_PDB_EXECUTION_ERROR;
- }
- values[0].data.d_status = status;
+ return gimp_procedure_new_return_values (procedure, status, NULL);
}
/*
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]