[gimp] extensions: update the 5 goat-exercise extensions to multi-drawable API.



commit 931f44e54a1e47d10c7480e6a6f2850979efc59e
Author: Jehan <jehan girinstud io>
Date:   Tue Apr 6 01:55:52 2021 +0200

    extensions: update the 5 goat-exercise extensions to multi-drawable API.

 extensions/goat-exercises/goat-exercise-c.c       | 30 ++++++++++++++++++++---
 extensions/goat-exercises/goat-exercise-gjs.js    | 11 ++++++++-
 extensions/goat-exercises/goat-exercise-lua.lua   | 17 ++++++++++++-
 extensions/goat-exercises/goat-exercise-py3.py    | 10 +++++++-
 extensions/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",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]