[gimp] plug-ins: port nl-filter to GimpPlugIn
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] plug-ins: port nl-filter to GimpPlugIn
- Date: Fri, 30 Aug 2019 14:38:39 +0000 (UTC)
commit f4b97e740ccd2b23235e740553ab22a90fec5f3f
Author: Michael Natterer <mitch gimp org>
Date: Fri Aug 30 16:38:18 2019 +0200
plug-ins: port nl-filter to GimpPlugIn
plug-ins/common/nl-filter.c | 243 +++++++++++++++++++++++++-------------------
1 file changed, 140 insertions(+), 103 deletions(-)
---
diff --git a/plug-ins/common/nl-filter.c b/plug-ins/common/nl-filter.c
index 20cbceac3a..4f7ac4504b 100644
--- a/plug-ins/common/nl-filter.c
+++ b/plug-ins/common/nl-filter.c
@@ -57,109 +57,154 @@ typedef enum
filter_edge_enhance
} FilterType;
-static NLFilterValues nlfvals =
+
+typedef struct _Nlfilter Nlfilter;
+typedef struct _NlfilterClass NlfilterClass;
+
+struct _Nlfilter
{
- 0.3,
- 0.3,
- 0
+ GimpPlugIn parent_instance;
};
-/* function protos */
+struct _NlfilterClass
+{
+ GimpPlugInClass parent_class;
+};
+
+
+#define NLFILTER_TYPE (nlfilter_get_type ())
+#define NLFILTER (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NLFILTER_TYPE, Nlfilter))
+
+GType nlfilter_get_type (void) G_GNUC_CONST;
-static void query (void);
-static void run (const gchar *name,
- gint nparam,
- const GimpParam *param,
- gint *nretvals,
- GimpParam **retvals);
+static GList * nlfilter_query_procedures (GimpPlugIn *plug_in);
+static GimpProcedure * nlfilter_create_procedure (GimpPlugIn *plug_in,
+ const gchar *name);
-static void nlfilter (GimpDrawable *drawable,
- GimpPreview *preview);
-static void nlfilter_preview (GimpDrawable *drawable,
- GimpPreview *preview);
+static GimpValueArray * nlfilter_run (GimpProcedure *procedure,
+ GimpRunMode run_mode,
+ GimpImage *image,
+ GimpDrawable *drawable,
+ const GimpValueArray *args,
+ gpointer run_data);
-static gboolean nlfilter_dialog (GimpDrawable *drawable);
+static void nlfilter (GimpDrawable *drawable,
+ GimpPreview *preview);
+static void nlfilter_preview (GimpDrawable *drawable,
+ GimpPreview *preview);
-static gint nlfiltInit (gdouble alpha,
- gdouble radius,
- FilterType filter);
+static gboolean nlfilter_dialog (GimpDrawable *drawable);
-static void nlfiltRow (guchar *srclast,
- guchar *srcthis,
- guchar *srcnext,
- guchar *dst,
- gint width,
- gint bpp,
- gint filtno);
+static gint nlfiltInit (gdouble alpha,
+ gdouble radius,
+ FilterType filter);
+static void nlfiltRow (guchar *srclast,
+ guchar *srcthis,
+ guchar *srcnext,
+ guchar *dst,
+ gint width,
+ gint bpp,
+ gint filtno);
-const GimpPlugInInfo PLUG_IN_INFO =
+
+G_DEFINE_TYPE (Nlfilter, nlfilter, GIMP_TYPE_PLUG_IN)
+
+GIMP_MAIN (NLFILTER_TYPE)
+
+
+static NLFilterValues nlfvals =
{
- NULL, /* init_proc */
- NULL, /* quit_proc */
- query, /* query_proc */
- run, /* run_proc */
+ 0.3,
+ 1.0 / 3.0,
+ 0
};
-MAIN ()
static void
-query (void)
+nlfilter_class_init (NlfilterClass *klass)
{
- static const GimpParamDef args[] =
- {
- { GIMP_PDB_INT32, "run-mode", "The run mode { RUN-INTERACTIVE (0), RUN-NONINTERACTIVE (1) }" },
- { GIMP_PDB_IMAGE, "img", "The Image to Filter" },
- { GIMP_PDB_DRAWABLE, "drw", "The Drawable" },
- { GIMP_PDB_FLOAT, "alpha", "The amount of the filter to apply" },
- { GIMP_PDB_FLOAT, "radius", "The filter radius" },
- { GIMP_PDB_INT32, "filter", "The Filter to Run, "
- "0 - alpha trimmed mean; "
- "1 - optimal estimation (alpha controls noise variance); "
- "2 - edge enhancement" }
- };
-
- gimp_install_procedure (PLUG_IN_PROC,
- N_("Nonlinear swiss army knife filter"),
- "This is the pnmnlfilt, in gimp's clothing. "
- "See the pnmnlfilt manpage for details.",
- "Graeme W. Gill, gimp 0.99 plug-in by Eric L. Hernes",
- "Graeme W. Gill, Eric L. Hernes",
- "1997",
- N_("_NL Filter..."),
- "RGB,GRAY",
- GIMP_PDB_PROC_TYPE_PLUGIN,
- G_N_ELEMENTS (args), 0,
- args, NULL);
-
- gimp_plugin_menu_register (PLUG_IN_PROC, "<Image>/Filters/Enhance");
+ GimpPlugInClass *plug_in_class = GIMP_PLUG_IN_CLASS (klass);
+
+ plug_in_class->query_procedures = nlfilter_query_procedures;
+ plug_in_class->create_procedure = nlfilter_create_procedure;
}
static void
-run (const gchar *name,
- gint nparams,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals)
+nlfilter_init (Nlfilter *nlfilter)
{
- static GimpParam values[1];
- GimpRunMode run_mode;
- GimpDrawable *drawable;
- gint32 drawable_id;
- GimpPDBStatusType status = GIMP_PDB_SUCCESS;
+}
- INIT_I18N ();
- gegl_init (NULL, NULL);
+static GList *
+nlfilter_query_procedures (GimpPlugIn *plug_in)
+{
+ return g_list_append (NULL, g_strdup (PLUG_IN_PROC));
+}
- run_mode = param[0].data.d_int32;
- drawable_id = param[2].data.d_drawable;
- drawable = GIMP_DRAWABLE (gimp_item_get_by_id (drawable_id));
+static GimpProcedure *
+nlfilter_create_procedure (GimpPlugIn *plug_in,
+ const gchar *name)
+{
+ GimpProcedure *procedure = NULL;
- *nreturn_vals = 1;
- *return_vals = values;
+ if (! strcmp (name, PLUG_IN_PROC))
+ {
+ procedure = gimp_image_procedure_new (plug_in, name,
+ GIMP_PDB_PROC_TYPE_PLUGIN,
+ nlfilter_run, NULL, NULL);
+
+ gimp_procedure_set_image_types (procedure, "RGB, GRAY");
+
+ gimp_procedure_set_menu_label (procedure, N_("_NL Filter..."));
+ gimp_procedure_add_menu_path (procedure,"<Image>/Filters/Enhance");
+
+ gimp_procedure_set_documentation (procedure,
+ N_("Nonlinear swiss army knife filter"),
+ "This is the pnmnlfilt, in gimp's "
+ "clothing. See the pnmnlfilt manpage "
+ "for details.",
+ name);
+ gimp_procedure_set_attribution (procedure,
+ "Graeme W. Gill, gimp 0.99 plug-in "
+ "by Eric L. Hernes",
+ "Graeme W. Gill, Eric L. Hernes",
+ "1997");
+
+ GIMP_PROC_ARG_DOUBLE (procedure, "alpha",
+ "Alpha",
+ "The amount of the filter to apply",
+ 0, 1, 0.3,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_DOUBLE (procedure, "radius",
+ "Radius",
+ "The filter radius",
+ 1.0 / 3.0, 1, 1.0 / 3.0,
+ G_PARAM_READWRITE);
+
+ GIMP_PROC_ARG_INT (procedure, "filter",
+ "Filter",
+ "The Filter to Run, "
+ "0 - alpha trimmed mean; "
+ "1 - optimal estimation (alpha controls noise variance); "
+ "2 - edge enhancement",
+ 0, 2, 0,
+ G_PARAM_READWRITE);
+ }
- values[0].type = GIMP_PDB_STATUS;
- values[0].data.d_status = status;
+ return procedure;
+}
+
+static GimpValueArray *
+nlfilter_run (GimpProcedure *procedure,
+ GimpRunMode run_mode,
+ GimpImage *image,
+ GimpDrawable *drawable,
+ const GimpValueArray *args,
+ gpointer run_data)
+{
+ INIT_I18N ();
+ gegl_init (NULL, NULL);
switch (run_mode)
{
@@ -167,41 +212,33 @@ run (const gchar *name,
gimp_get_data (PLUG_IN_PROC, &nlfvals);
if (! nlfilter_dialog (drawable))
- return;
- break;
-
- case GIMP_RUN_NONINTERACTIVE:
- if (nparams != 6)
- {
- status = GIMP_PDB_CALLING_ERROR;
- }
- else
{
- nlfvals.alpha = param[3].data.d_float;
- nlfvals.radius = param[4].data.d_float;
- nlfvals.filter = param[5].data.d_int32;
+ return gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_CANCEL,
+ NULL);
}
+ break;
+ case GIMP_RUN_NONINTERACTIVE:
+ nlfvals.alpha = GIMP_VALUES_GET_DOUBLE (args, 0);
+ nlfvals.radius = GIMP_VALUES_GET_DOUBLE (args, 1);
+ nlfvals.filter = GIMP_VALUES_GET_INT (args, 2);
break;
- case GIMP_RUN_WITH_LAST_VALS:
+ case GIMP_RUN_WITH_LAST_VALS :
gimp_get_data (PLUG_IN_PROC, &nlfvals);
break;
+ };
- default:
- break;
- }
+ nlfilter (drawable, NULL);
- if (status == GIMP_PDB_SUCCESS)
- {
- nlfilter (drawable, NULL);
+ if (run_mode != GIMP_RUN_NONINTERACTIVE)
+ gimp_displays_flush ();
- /* Store data */
- if (run_mode == GIMP_RUN_INTERACTIVE)
- gimp_set_data (PLUG_IN_PROC, &nlfvals, sizeof (NLFilterValues));
- }
+ if (run_mode == GIMP_RUN_INTERACTIVE)
+ gimp_set_data (PLUG_IN_PROC, &nlfvals, sizeof (NLFilterValues));
- values[0].data.d_status = status;
+ return gimp_procedure_new_return_values (procedure, GIMP_PDB_SUCCESS, NULL);
}
/* pnmnlfilt.c - 4 in 1 (2 non-linear) filter
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]