[gimp] plug-ins: port film and guillotine to objects arrays



commit c10f5b2d689ea3f2525c2201cc8205dd6dab29be
Author: Michael Natterer <mitch gimp org>
Date:   Thu Sep 5 14:39:32 2019 +0200

    plug-ins: port film and guillotine to objects arrays

 plug-ins/common/film.c       | 39 +++++++++++++++++++--------------------
 plug-ins/common/guillotine.c | 37 ++++++++++++++++++++++---------------
 2 files changed, 41 insertions(+), 35 deletions(-)
---
diff --git a/plug-ins/common/film.c b/plug-ins/common/film.c
index 3b7412f173..05ccf5c290 100644
--- a/plug-ins/common/film.c
+++ b/plug-ins/common/film.c
@@ -61,7 +61,7 @@ typedef struct
   gint     number_pos[2];         /* flags where to draw numbers (top/bottom) */
   gint     keep_height;           /* flag if to keep max. image height */
   gint     num_images;            /* number of images */
-  GList   *images;                /* list of image IDs */
+  GList   *images;                /* list of images */
 } FilmVals;
 
 /* Data to use for the dialog */
@@ -285,10 +285,11 @@ film_create_procedure (GimpPlugIn  *plug_in,
                          1, MAX_FILM_PICTURES, 1,
                          G_PARAM_READWRITE);
 
-      GIMP_PROC_ARG_INT32_ARRAY (procedure, "image-ids",
-                                 "Image IDs",
-                                 "num-images image IDs to be used for film",
-                                 G_PARAM_READWRITE);
+      GIMP_PROC_ARG_OBJECT_ARRAY (procedure, "images",
+                                  "Images",
+                                  "num-images images to be used for film",
+                                  GIMP_TYPE_IMAGE,
+                                  G_PARAM_READWRITE);
 
       GIMP_PROC_VAL_IMAGE (procedure, "new-image",
                            "New image",
@@ -308,10 +309,10 @@ film_run (GimpProcedure        *procedure,
           const GimpValueArray *args,
           gpointer              run_data)
 {
-  GimpValueArray    *return_vals = NULL;
-  GimpPDBStatusType  status      = GIMP_PDB_SUCCESS;
-  const gint32      *ids;
-  gint               i;
+  GimpValueArray     *return_vals = NULL;
+  GimpPDBStatusType   status      = GIMP_PDB_SUCCESS;
+  GimpImage         **images;
+  gint                i;
 
   INIT_I18N ();
   gegl_init (NULL, NULL);
@@ -340,21 +341,19 @@ film_run (GimpProcedure        *procedure,
           filmvals.keep_height = FALSE;
         }
       GIMP_VALUES_GET_RGB (args, 1, &filmvals.film_color);
-      filmvals.number_start = GIMP_VALUES_GET_INT (args, 2);
-      g_strlcpy (filmvals.number_font,
-                 GIMP_VALUES_GET_STRING (args, 3),
-                 FONT_LEN);
+      filmvals.number_start = GIMP_VALUES_GET_INT           (args, 2);
+      g_strlcpy              (filmvals.number_font,
+                              GIMP_VALUES_GET_STRING        (args, 3),
+                              FONT_LEN);
       GIMP_VALUES_GET_RGB (args, 4, &filmvals.number_color);
-      filmvals.number_pos[0] = GIMP_VALUES_GET_INT (args, 5);
-      filmvals.number_pos[1] = GIMP_VALUES_GET_INT (args, 6);
+      filmvals.number_pos[0] = GIMP_VALUES_GET_INT          (args, 5);
+      filmvals.number_pos[1] = GIMP_VALUES_GET_INT          (args, 6);
+      filmvals.num_images    = GIMP_VALUES_GET_INT          (args, 7);
+      images                 = GIMP_VALUES_GET_OBJECT_ARRAY (args, 8);
 
-      filmvals.num_images    = GIMP_VALUES_GET_INT (args, 7);
-      ids = GIMP_VALUES_GET_INT32_ARRAY (args, 8);
       filmvals.images = NULL;
-
       for (i = 0; i < filmvals.num_images; i++)
-        filmvals.images = g_list_prepend (filmvals.images,
-                                          gimp_image_get_by_id (ids[i]));
+        filmvals.images = g_list_prepend (filmvals.images, images[i]);
       filmvals.images = g_list_reverse (filmvals.images);
       break;
 
diff --git a/plug-ins/common/guillotine.c b/plug-ins/common/guillotine.c
index 3f681555a8..a58b1807b5 100644
--- a/plug-ins/common/guillotine.c
+++ b/plug-ins/common/guillotine.c
@@ -124,10 +124,11 @@ guillotine_create_procedure (GimpPlugIn  *plug_in,
                          0, G_MAXINT, 0,
                          G_PARAM_READWRITE);
 
-      GIMP_PROC_VAL_INT32_ARRAY (procedure, "image-ids",
-                                 "Output images IDs",
-                                 "Output images IDs",
-                                 G_PARAM_READWRITE);
+      GIMP_PROC_VAL_OBJECT_ARRAY (procedure, "images",
+                                  "Output images",
+                                  "Output images",
+                                  GIMP_TYPE_IMAGE,
+                                  G_PARAM_READWRITE);
     }
 
   return procedure;
@@ -150,24 +151,30 @@ guillotine_run (GimpProcedure        *procedure,
                                                   NULL);
   if (status == GIMP_PDB_SUCCESS)
     {
-      GList  *images;
-      GList  *list;
-      gint32 *ids;
-      gint   i;
+      GList      *image_list;
+      GList      *list;
+      GimpImage **images;
+      gint        num_images;
+      gint        i;
 
       gimp_progress_init (_("Guillotine"));
 
-      images = guillotine (image, run_mode == GIMP_RUN_INTERACTIVE);
-      ids = g_new (gint32, g_list_length (images));
+      image_list = guillotine (image, run_mode == GIMP_RUN_INTERACTIVE);
 
-      for (list = images, i = 0; list; list = g_list_next (list), i++)
+      num_images = g_list_length (image_list);
+      images     = g_new (GimpImage *, num_images);
+
+      for (list = image_list, i = 0;
+           list;
+           list = g_list_next (list), i++)
         {
-          ids[i] = gimp_image_get_id (list->data);
+          images[i] = g_object_ref (list->data);
         }
-      g_list_free (images);
 
-      GIMP_VALUES_SET_INT (return_vals, 1, g_list_length (images));
-      GIMP_VALUES_TAKE_INT32_ARRAY (return_vals, 2, ids, g_list_length (images));
+      g_list_free (image_list);
+
+      GIMP_VALUES_SET_INT           (return_vals, 1, num_images);
+      GIMP_VALUES_TAKE_OBJECT_ARRAY (return_vals, 2, GIMP_TYPE_IMAGE, images, num_images);
 
       if (run_mode == GIMP_RUN_INTERACTIVE)
         gimp_displays_flush ();


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