From 931f44e54a1e47d10c7480e6a6f2850979efc59e Mon Sep 17 00:00:00 2001 From: Jehan Date: Tue, 6 Apr 2021 01:55:52 +0200 Subject: [PATCH] extensions: update the 5 goat-exercise extensions to multi-drawable API. --- extensions/goat-exercises/goat-exercise-c.c | 30 ++++++++++++++++--- .../goat-exercises/goat-exercise-gjs.js | 11 ++++++- .../goat-exercises/goat-exercise-lua.lua | 17 ++++++++++- .../goat-exercises/goat-exercise-py3.py | 10 ++++++- .../goat-exercises/goat-exercise-vala.vala | 1 + 5 files changed, 62 insertions(+), 7 deletions(-) diff --git a/extensions/goat-exercises/goat-exercise-c.c b/extensions/goat-exercises/goat-exercise-c.c index 56311fb4f0..43355495e5 100644 --- a/extensions/goat-exercises/goat-exercise-c.c +++ b/extensions/goat-exercises/goat-exercise-c.c @@ -64,7 +64,8 @@ static GimpProcedure * goat_create_procedure (GimpPlugIn *plug_in, static GimpValueArray * goat_run (GimpProcedure *procedure, GimpRunMode run_mode, GimpImage *image, - GimpDrawable *drawable, + gint n_drawables, + GimpDrawable **drawables, const GimpValueArray *args, gpointer run_data); @@ -107,6 +108,8 @@ goat_create_procedure (GimpPlugIn *plug_in, goat_run, NULL, NULL); gimp_procedure_set_image_types (procedure, "*"); + gimp_procedure_set_sensitivity_mask (procedure, + GIMP_PROCEDURE_SENSITIVE_DRAWABLE); gimp_procedure_set_menu_label (procedure, N_("Exercise in _C minor")); gimp_procedure_set_icon_name (procedure, GIMP_ICON_GEGL); @@ -130,15 +133,34 @@ static GimpValueArray * goat_run (GimpProcedure *procedure, GimpRunMode run_mode, GimpImage *image, - GimpDrawable *drawable, + gint n_drawables, + GimpDrawable **drawables, const GimpValueArray *args, gpointer run_data) { - GimpPDBStatusType status = GIMP_PDB_SUCCESS; - gint x, y, width, height; + GimpDrawable *drawable; + GimpPDBStatusType status = GIMP_PDB_SUCCESS; + gint x, y, width, height; INIT_I18N(); + if (n_drawables != 1) + { + GError *error = NULL; + + g_set_error (&error, GIMP_PLUG_IN_ERROR, 0, + _("Procedure '%s' only works with one drawable."), + PLUG_IN_PROC); + + return gimp_procedure_new_return_values (procedure, + GIMP_PDB_CALLING_ERROR, + error); + } + else + { + drawable = drawables[0]; + } + /* In interactive mode, display a dialog to advertise the exercise. */ if (run_mode == GIMP_RUN_INTERACTIVE) { diff --git a/extensions/goat-exercises/goat-exercise-gjs.js b/extensions/goat-exercises/goat-exercise-gjs.js index 352c86b449..e1942de35e 100755 --- a/extensions/goat-exercises/goat-exercise-gjs.js +++ b/extensions/goat-exercises/goat-exercise-gjs.js @@ -56,6 +56,7 @@ var Goat = GObject.registerClass({ let procedure = Gimp.ImageProcedure.new(this, name, Gimp.PDBProcType.PLUGIN, this.run); procedure.set_image_types("*"); + procedure.set_sensitivity_mask(Gimp.ProcedureSensitivityMask.DRAWABLE); procedure.set_menu_label("Exercise a JavaScript goat"); procedure.set_icon_name(GimpUi.ICON_GEGL); @@ -69,9 +70,17 @@ var Goat = GObject.registerClass({ return procedure; } - run(procedure, run_mode, image, drawable, args, run_data) { + run(procedure, run_mode, image, drawables, args, run_data) { /* TODO: localization. */ + if (drawables.length != 1) { + let msg = `Procedure '${procedure.get_name()}' only works with one drawable.`; + let error = GLib.Error.new_literal(Gimp.PlugIn.error_quark(), 0, msg); + return procedure.new_return_values(Gimp.PDBStatusType.CALLING_ERROR, error) + } + + let drawable = drawables[0]; + if (run_mode == Gimp.RunMode.INTERACTIVE) { GimpUi.init("goat-exercise-gjs"); /* TODO: help function and ID. */ diff --git a/extensions/goat-exercises/goat-exercise-lua.lua b/extensions/goat-exercises/goat-exercise-lua.lua index cec8107ead..1af3f44451 100755 --- a/extensions/goat-exercises/goat-exercise-lua.lua +++ b/extensions/goat-exercises/goat-exercise-lua.lua @@ -33,10 +33,24 @@ local Gdk = lgi.Gdk local Goat = lgi.package 'Goat' local Goat = lgi.Goat -function run(procedure, run_mode, image, drawable, args, run_data) +function run(procedure, run_mode, image, drawables, args, run_data) -- procedure:new_return_values() crashes LGI so we construct the -- GimpValueArray manually. local retval = Gimp.ValueArray(1) + + if table.getn(drawables) ~= 1 then + local calling_err = GObject.Value(Gimp.PDBStatusType, Gimp.PDBStatusType.CALLING_ERROR) + local msg = "Procedure '%s' only works with one drawable." + + msg = string.format(msg, procedure:get_name()) + + retval:append(calling_err) + retval:append(GObject.Value(GObject.Type.STRING, msg)) + return retval + end + + local drawable = drawables[1] + -- Not sure why run_mode has become a string instead of testing -- against Gimp.RunMode.INTERACTIVE. if run_mode == "INTERACTIVE" then @@ -145,6 +159,7 @@ function Goat.Exercise:do_create_procedure(name) run, nil) procedure:set_image_types("*"); + procedure:set_sensitivity_mask(Gimp.ProcedureSensitivityMask.DRAWABLE); procedure:set_menu_label("Exercise a Lua goat"); procedure:set_icon_name(GimpUi.ICON_GEGL); diff --git a/extensions/goat-exercises/goat-exercise-py3.py b/extensions/goat-exercises/goat-exercise-py3.py index 4662ba73e6..7b526920a5 100755 --- a/extensions/goat-exercises/goat-exercise-py3.py +++ b/extensions/goat-exercises/goat-exercise-py3.py @@ -55,6 +55,7 @@ class Goat (Gimp.PlugIn): self.run, None) procedure.set_image_types("*") + procedure.set_sensitivity_mask (Gimp.ProcedureSensitivityMask.DRAWABLE) procedure.set_menu_label(N_("Exercise a goat and a python")) procedure.set_icon_name(GimpUi.ICON_GEGL) @@ -67,7 +68,14 @@ class Goat (Gimp.PlugIn): return procedure - def run(self, procedure, run_mode, image, drawable, args, run_data): + def run(self, procedure, run_mode, image, n_drawables, drawables, args, run_data): + if n_drawables != 1: + msg = _("Procedure '{}' only works with one drawable.").format(procedure.get_name()) + error = GLib.Error.new_literal(Gimp.PlugIn.error_quark(), msg, 0) + return procedure.new_return_values(Gimp.PDBStatusType.CALLING_ERROR, error) + else: + drawable = drawables[0] + if run_mode == Gimp.RunMode.INTERACTIVE: gi.require_version('Gtk', '3.0') from gi.repository import Gtk diff --git a/extensions/goat-exercises/goat-exercise-vala.vala b/extensions/goat-exercises/goat-exercise-vala.vala index 68ac500411..004d9e18d1 100755 --- a/extensions/goat-exercises/goat-exercise-vala.vala +++ b/extensions/goat-exercises/goat-exercise-vala.vala @@ -41,6 +41,7 @@ public class Goat : Gimp.PlugIn { var procedure = new Gimp.ImageProcedure(this, name, Gimp.PDBProcType.PLUGIN, this.run); procedure.set_image_types("RGB*, INDEXED*, GRAY*"); + procedure.set_sensitivity_mask(Gimp.ProcedureSensitivityMask.DRAWABLE); procedure.set_menu_label("Exercise a Vala goat"); procedure.set_documentation("Exercise a goat in the Vala language", "Takes a goat for a walk in Vala",