[gimp] plug-ins: port gimpressionist to GimpPlugIn
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] plug-ins: port gimpressionist to GimpPlugIn
- Date: Sun, 1 Sep 2019 08:48:44 +0000 (UTC)
commit e70137d80f9a2ea6bcaa110f1c2819a339fd883a
Author: Michael Natterer <mitch gimp org>
Date: Sun Sep 1 10:48:05 2019 +0200
plug-ins: port gimpressionist to GimpPlugIn
And some forgotten libgimp object porting.
plug-ins/gimpressionist/brush.c | 62 ++++-----
plug-ins/gimpressionist/gimp.c | 292 +++++++++++++++++++++-------------------
2 files changed, 177 insertions(+), 177 deletions(-)
---
diff --git a/plug-ins/gimpressionist/brush.c b/plug-ins/gimpressionist/brush.c
index 495fc5c5f4..7af32532b7 100644
--- a/plug-ins/gimpressionist/brush.c
+++ b/plug-ins/gimpressionist/brush.c
@@ -93,18 +93,18 @@ set_colorbrushes (const gchar *fn)
}
static const Babl *
-get_u8_format (gint32 drawable_id)
+get_u8_format (GimpDrawable *drawable)
{
- if (gimp_drawable_is_rgb (drawable_id))
+ if (gimp_drawable_is_rgb (drawable))
{
- if (gimp_drawable_has_alpha (drawable_id))
+ if (gimp_drawable_has_alpha (drawable))
return babl_format ("R'G'B'A u8");
else
return babl_format ("R'G'B' u8");
}
else
{
- if (gimp_drawable_has_alpha (drawable_id))
+ if (gimp_drawable_has_alpha (drawable))
return babl_format ("Y'A u8");
else
return babl_format ("Y' u8");
@@ -115,21 +115,24 @@ static void
brushdmenuselect (GtkWidget *widget,
gpointer data)
{
- GeglBuffer *src_buffer;
- const Babl *format;
- guchar *src_row;
- guchar *src;
- gint bpp;
- gint x, y;
- ppm_t *p;
- gint x1, y1, w, h;
- gint row;
- gint32 drawable_id;
- gint rowstride;
+ GeglBuffer *src_buffer;
+ const Babl *format;
+ guchar *src_row;
+ guchar *src;
+ gint bpp;
+ gint x, y;
+ ppm_t *p;
+ gint x1, y1, w, h;
+ gint row;
+ gint32 drawable_id = -1;
+ GimpDrawable *drawable;
+ gint rowstride;
gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (widget), &drawable_id);
- if (drawable_id == -1)
+ drawable = GIMP_DRAWABLE (gimp_item_get_by_id (drawable_id));
+
+ if (! drawable)
return;
if (brush_from_file == 2)
@@ -146,10 +149,10 @@ brushdmenuselect (GtkWidget *widget,
gtk_adjustment_set_value (brush_gamma_adjust, 1.0);
gtk_adjustment_set_value (brush_aspect_adjust, 0.0);
- if (! gimp_drawable_mask_intersect (drawable_id, &x1, &y1, &w, &h))
+ if (! gimp_drawable_mask_intersect (drawable, &x1, &y1, &w, &h))
return;
- format = get_u8_format (drawable_id);
+ format = get_u8_format (drawable);
bpp = babl_format_get_bytes_per_pixel (format);
ppm_kill (&brushppm);
@@ -160,7 +163,7 @@ brushdmenuselect (GtkWidget *widget,
src_row = g_new (guchar, w * bpp);
- src_buffer = gimp_drawable_get_buffer (drawable_id);
+ src_buffer = gimp_drawable_get_buffer (drawable);
if (bpp == 3)
{ /* RGB */
@@ -220,17 +223,6 @@ brushdmenuselect (GtkWidget *widget,
update_brush_preview (NULL);
}
-#if 0
-void
-dummybrushdmenuselect (GtkWidget *w, gpointer data)
-{
- ppm_kill (&brushppm);
- ppm_new (&brushppm, 10,10);
- brush_from_file = 0;
- update_brush_preview (NULL);
-}
-#endif
-
static void
brushlistrefresh (void)
{
@@ -306,12 +298,12 @@ savebrush (GtkWidget *wg,
}
static gboolean
-validdrawable (gint32 imageid,
- gint32 drawableid,
- gpointer data)
+validdrawable (GimpImage *image,
+ GimpItem *item,
+ gpointer data)
{
- return (gimp_drawable_is_rgb (drawableid) ||
- gimp_drawable_is_gray (drawableid));
+ return (gimp_drawable_is_rgb (GIMP_DRAWABLE (item)) ||
+ gimp_drawable_is_gray (GIMP_DRAWABLE (item)));
}
/*
diff --git a/plug-ins/gimpressionist/gimp.c b/plug-ins/gimpressionist/gimp.c
index 97bf3d8129..0b66bb3f2e 100644
--- a/plug-ins/gimpressionist/gimp.c
+++ b/plug-ins/gimpressionist/gimp.c
@@ -33,206 +33,214 @@
#include "orientmap.h"
#include "size.h"
-
#include "libgimp/stdplugins-intl.h"
-static void query (void);
-static void run (const gchar *name,
- gint nparams,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals);
-static void gimpressionist_main (void);
+typedef struct _Gimpressionist Gimpressionist;
+typedef struct _GimpressionistClass GimpressionistClass;
+
+struct _Gimpressionist
+{
+ GimpPlugIn parent_instance;
+};
+
+struct _GimpressionistClass
+{
+ GimpPlugInClass parent_class;
+};
+
+
+#define GIMPRESSIONIST_TYPE (gimpressionist_get_type ())
+#define GIMPRESSIONIST (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMPRESSIONIST_TYPE, Gimpressionist))
+
+GType gimpressionist_get_type (void) G_GNUC_CONST;
+
+static GList * gimpressionist_query_procedures (GimpPlugIn *plug_in);
+static GimpProcedure * gimpressionist_create_procedure (GimpPlugIn *plug_in,
+ const gchar *name);
+
+static GimpValueArray * gimpressionist_run (GimpProcedure *procedure,
+ GimpRunMode run_mode,
+ GimpImage *image,
+ GimpDrawable *drawable,
+ const GimpValueArray *args,
+ gpointer run_data);
+
+static void gimpressionist_main (void);
+
+
+G_DEFINE_TYPE (Gimpressionist, gimpressionist, GIMP_TYPE_PLUG_IN)
+
+GIMP_MAIN (GIMPRESSIONIST_TYPE)
-const GimpPlugInInfo PLUG_IN_INFO = {
- NULL, /* init_proc */
- NULL, /* quit_proc */
- query, /* query_proc */
- run /* run_proc */
-}; /* PLUG_IN_INFO */
static GimpDrawable *drawable;
static ppm_t infile = { 0, 0, NULL };
static ppm_t inalpha = { 0, 0, NULL };
-void
-infile_copy_to_ppm (ppm_t * p)
+static void
+gimpressionist_class_init (GimpressionistClass *klass)
{
- if (!PPM_IS_INITED (&infile))
- grabarea ();
+ GimpPlugInClass *plug_in_class = GIMP_PLUG_IN_CLASS (klass);
- ppm_copy (&infile, p);
+ plug_in_class->query_procedures = gimpressionist_query_procedures;
+ plug_in_class->create_procedure = gimpressionist_create_procedure;
}
-void
-infile_copy_alpha_to_ppm (ppm_t * p)
-{
- ppm_copy (&inalpha, p);
-}
-
-MAIN ()
-
static void
-query (void)
+gimpressionist_init (Gimpressionist *gimpressionist)
{
- static const GimpParamDef args[] =
- {
- { GIMP_PDB_INT32, "run-mode", "The run mode { RUN-INTERACTIVE (0) }" },
- { GIMP_PDB_IMAGE, "image", "Input image" },
- { GIMP_PDB_DRAWABLE, "drawable", "Input drawable" },
- { GIMP_PDB_STRING, "preset", "Preset Name" },
- };
-
- gimp_install_procedure (PLUG_IN_PROC,
- N_("Performs various artistic operations"),
- "Performs various artistic operations on an image",
- "Vidar Madsen <vidar prosalg no>",
- "Vidar Madsen",
- PLUG_IN_VERSION,
- N_("_GIMPressionist..."),
- "RGB*, GRAY*",
- GIMP_PDB_PROC_TYPE_PLUGIN,
- G_N_ELEMENTS (args), 0,
- args, NULL);
-
- gimp_plugin_menu_register (PLUG_IN_PROC, "<Image>/Filters/Artistic");
}
-static void
-gimpressionist_get_data (void)
+static GList *
+gimpressionist_query_procedures (GimpPlugIn *plug_in)
{
- restore_default_values ();
- gimp_get_data (PLUG_IN_PROC, &pcvals);
+ return g_list_append (NULL, g_strdup (PLUG_IN_PROC));
}
-static void
-run (const gchar *name,
- gint nparams,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals)
+static GimpProcedure *
+gimpressionist_create_procedure (GimpPlugIn *plug_in,
+ const gchar *name)
{
- static GimpParam values[2];
- GimpRunMode run_mode;
- GimpPDBStatusType status;
- gboolean with_specified_preset;
- gchar *preset_name = NULL;
-
- status = GIMP_PDB_SUCCESS;
- run_mode = param[0].data.d_int32;
- with_specified_preset = FALSE;
+ GimpProcedure *procedure = NULL;
- if (nparams > 3)
+ if (! strcmp (name, PLUG_IN_PROC))
{
- preset_name = param[3].data.d_string;
- if (strcmp (preset_name, ""))
- {
- with_specified_preset = TRUE;
- }
+ procedure = gimp_image_procedure_new (plug_in, name,
+ GIMP_PDB_PROC_TYPE_PLUGIN,
+ gimpressionist_run, NULL, NULL);
+
+ gimp_procedure_set_image_types (procedure, "RGB*, GRAY*");
+
+ gimp_procedure_set_menu_label (procedure, N_("_GIMPressionist..."));
+ gimp_procedure_add_menu_path (procedure, "<Image>/Filters/Artistic");
+
+ gimp_procedure_set_documentation (procedure,
+ N_("Performs various artistic "
+ "operations"),
+ "Performs various artistic operations "
+ "on an image",
+ name);
+ gimp_procedure_set_attribution (procedure,
+ "Vidar Madsen <vidar prosalg no>",
+ "Vidar Madsen",
+ PLUG_IN_VERSION);
+
+ GIMP_PROC_ARG_STRING (procedure, "preset",
+ "Preset",
+ "Preset Name",
+ NULL,
+ G_PARAM_READWRITE);
}
- values[0].type = GIMP_PDB_STATUS;
- values[0].data.d_status = status;
+ return procedure;
+}
+
+void
+infile_copy_to_ppm (ppm_t * p)
+{
+ if (!PPM_IS_INITED (&infile))
+ grabarea ();
+
+ ppm_copy (&infile, p);
+}
+
+void
+infile_copy_alpha_to_ppm (ppm_t * p)
+{
+ ppm_copy (&inalpha, p);
+}
- *nreturn_vals = 1;
- *return_vals = values;
+static GimpValueArray *
+gimpressionist_run (GimpProcedure *procedure,
+ GimpRunMode run_mode,
+ GimpImage *image,
+ GimpDrawable *_drawable,
+ const GimpValueArray *args,
+ gpointer run_data)
+{
+ const gchar *preset_name;
INIT_I18N ();
gegl_init (NULL, NULL);
- /* Get the active drawable info */
+ drawable = _drawable;
- drawable = GIMP_DRAWABLE (gimp_item_get_by_id (param[2].data.d_drawable));
img_has_alpha = gimp_drawable_has_alpha (drawable);
random_generator = g_rand_new ();
- /*
- * Check precondition before we open a dialog: Is there a selection
- * that intersects, OR is there no selection (use entire drawable.)
- */
{
- gint x1, y1, width, height; /* Not used. */
+ gint x1, y1, width, height;
if (! gimp_drawable_mask_intersect (drawable,
&x1, &y1, &width, &height))
{
- values[0].data.d_status = GIMP_PDB_EXECUTION_ERROR;
- *nreturn_vals = 2;
- values[1].type = GIMP_PDB_STRING;
- values[1].data.d_string = _("The selection does not intersect "
- "the active layer or mask.");
-
- return;
+ return gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_SUCCESS,
+ NULL);
}
}
+ restore_default_values ();
switch (run_mode)
{
- /*
- * Note: there's a limitation here. Running this plug-in before the
- * interactive plug-in was run will cause it to crash, because the
- * data is uninitialized.
- * */
case GIMP_RUN_INTERACTIVE:
+ gimp_get_data (PLUG_IN_PROC, &pcvals);
+
+ if (! create_gimpressionist ())
+ {
+ return gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_CANCEL,
+ NULL);
+ }
+ break;
+
case GIMP_RUN_NONINTERACTIVE:
- case GIMP_RUN_WITH_LAST_VALS:
- gimpressionist_get_data ();
- if (run_mode == GIMP_RUN_INTERACTIVE)
+ preset_name = GIMP_VALUES_GET_STRING (args, 0);
+
+ if (select_preset (preset_name))
{
- if (!create_gimpressionist ())
- return;
+ return gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_EXECUTION_ERROR,
+ NULL);
}
break;
- default:
- status = GIMP_PDB_EXECUTION_ERROR;
+
+ case GIMP_RUN_WITH_LAST_VALS:
+ gimp_get_data (PLUG_IN_PROC, &pcvals);
break;
}
- if ((status == GIMP_PDB_SUCCESS) &&
- (gimp_drawable_is_rgb (drawable) ||
- gimp_drawable_is_gray (drawable)))
- {
- if (with_specified_preset)
- {
- /* If select_preset fails - set to an error */
- if (select_preset (preset_name))
- {
- status = GIMP_PDB_EXECUTION_ERROR;
- }
- }
- /* It seems that the value of the run variable is stored in
- * the preset. I don't know if it's a bug or a feature, but
- * I just work here and am anxious to get a working version.
- * So I'm setting it to the correct value here.
- *
- * It also seems that defaultpcvals have this erroneous
- * value as well, so it gets set to FALSE as well. Thus it
- * is always set to TRUE upon a non-interactive run.
- * -- Shlomi Fish
- * */
- if (run_mode == GIMP_RUN_NONINTERACTIVE)
- {
- pcvals.run = TRUE;
- }
+ /* It seems that the value of the run variable is stored in the
+ * preset. I don't know if it's a bug or a feature, but I just work
+ * here and am anxious to get a working version. So I'm setting it
+ * to the correct value here.
+ *
+ * It also seems that defaultpcvals have this erroneous value as
+ * well, so it gets set to FALSE as well. Thus it is always set to
+ * TRUE upon a non-interactive run. -- Shlomi Fish
+ */
+ pcvals.run = TRUE;
- if (status == GIMP_PDB_SUCCESS)
- {
- gimpressionist_main ();
- gimp_displays_flush ();
+ if (gimp_drawable_is_rgb (drawable) ||
+ gimp_drawable_is_gray (drawable))
+ {
+ gimpressionist_main ();
- if (run_mode == GIMP_RUN_INTERACTIVE)
- gimp_set_data (PLUG_IN_PROC,
- &pcvals,
- sizeof (gimpressionist_vals_t));
- }
+ if (run_mode != GIMP_RUN_NONINTERACTIVE)
+ gimp_displays_flush ();
+
+ if (run_mode == GIMP_RUN_INTERACTIVE)
+ gimp_set_data (PLUG_IN_PROC, &pcvals, sizeof (gimpressionist_vals_t));
}
- else if (status == GIMP_PDB_SUCCESS)
+ else
{
- status = GIMP_PDB_EXECUTION_ERROR;
+ return gimp_procedure_new_return_values (procedure,
+ GIMP_PDB_EXECUTION_ERROR,
+ NULL);
}
/* Resources Cleanup */
@@ -245,7 +253,7 @@ run (const gchar *name,
orientation_map_free_resources ();
size_map_free_resources ();
- values[0].data.d_status = status;
+return gimp_procedure_new_return_values (procedure, GIMP_PDB_SUCCESS, NULL);
}
static const Babl *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]