[gimp] plug-ins: port file-png-save to begin_export()/end_export()



commit 8a2f4c9157c9f5512e018277d597c2719ae2238e
Author: Michael Natterer <mitch gimp org>
Date:   Wed Oct 9 22:51:34 2019 +0200

    plug-ins: port file-png-save to begin_export()/end_export()
    
    which removes quite some boilerplate. Also remove the boolean
    "profile_saved" return value of save_image() and instead modify the
    config. Add a "bits_per_sample" return value and set value on the
    metadata instead of always "8".

 plug-ins/common/file-png.c | 96 +++++++++-------------------------------------
 1 file changed, 19 insertions(+), 77 deletions(-)
---
diff --git a/plug-ins/common/file-png.c b/plug-ins/common/file-png.c
index 6153d6b5b4..1a99645e2e 100644
--- a/plug-ins/common/file-png.c
+++ b/plug-ins/common/file-png.c
@@ -124,7 +124,7 @@ static gboolean    save_image                (GFile            *file,
                                               GimpDrawable     *drawable,
                                               GimpImage        *orig_image,
                                               GObject          *config,
-                                              gboolean         *profile_saved,
+                                              gint             *bits_per_sample,
                                               GError          **error);
 
 static int         respin_cmap               (png_structp       pp,
@@ -416,6 +416,7 @@ png_save (GimpProcedure        *procedure,
   GimpProcedureConfig *config;
   GimpPDBStatusType    status = GIMP_PDB_SUCCESS;
   GimpExportReturn     export = GIMP_EXPORT_CANCEL;
+  GimpMetadata        *metadata;
   GimpImage           *orig_image;
   gboolean             alpha;
   GError              *error = NULL;
@@ -424,19 +425,8 @@ png_save (GimpProcedure        *procedure,
   gegl_init (NULL, NULL);
 
   config = gimp_procedure_create_config (procedure);
-  gimp_procedure_config_begin_run (config, image, run_mode, args);
-
-#if 0
-  /* Override the defaults with preferences. */
-  metadata = gimp_image_metadata_save_prepare (image,
-                                               "image/png",
-                                               &metadata_flags);
-  pngvals.save_exif      = (metadata_flags & GIMP_METADATA_SAVE_EXIF) != 0;
-  pngvals.save_xmp       = (metadata_flags & GIMP_METADATA_SAVE_XMP) != 0;
-  pngvals.save_iptc      = (metadata_flags & GIMP_METADATA_SAVE_IPTC) != 0;
-  pngvals.save_thumbnail = (metadata_flags & GIMP_METADATA_SAVE_THUMBNAIL) != 0;
-  pngvals.save_profile   = (metadata_flags & GIMP_METADATA_SAVE_COLOR_PROFILE) != 0;
-#endif
+  metadata = gimp_procedure_config_begin_export (config, image, run_mode,
+                                                 args, "image/png");
 
   orig_image = image;
 
@@ -480,69 +470,13 @@ png_save (GimpProcedure        *procedure,
 
   if (status == GIMP_PDB_SUCCESS)
     {
-      gboolean profile_saved = FALSE;
+      gint bits_per_sample;
 
       if (save_image (file, image, drawable, orig_image, G_OBJECT (config),
-                      &profile_saved, &error))
+                      &bits_per_sample, &error))
         {
-          GimpMetadata          *metadata;
-          GimpMetadataSaveFlags  metadata_flags;
-
-          metadata = gimp_image_metadata_save_prepare (orig_image,
-                                                       "image/png",
-                                                       &metadata_flags);
-
           if (metadata)
-            {
-              gboolean save_exif;
-              gboolean save_xmp;
-              gboolean save_iptc;
-              gboolean save_thumbnail;
-
-              g_object_get (config,
-                            "save-exif",      &save_exif,
-                            "save-xmp",       &save_xmp,
-                            "save-iptc",      &save_iptc,
-                            "save-thumbnail", &save_thumbnail,
-                            NULL);
-
-              gimp_metadata_set_bits_per_sample (metadata, 8);
-
-              if (save_exif)
-                metadata_flags |= GIMP_METADATA_SAVE_EXIF;
-              else
-                metadata_flags &= ~GIMP_METADATA_SAVE_EXIF;
-
-              if (save_xmp)
-                metadata_flags |= GIMP_METADATA_SAVE_XMP;
-              else
-                metadata_flags &= ~GIMP_METADATA_SAVE_XMP;
-
-              if (save_iptc)
-                metadata_flags |= GIMP_METADATA_SAVE_IPTC;
-              else
-                metadata_flags &= ~GIMP_METADATA_SAVE_IPTC;
-
-              if (save_thumbnail)
-                metadata_flags |= GIMP_METADATA_SAVE_THUMBNAIL;
-              else
-                metadata_flags &= ~GIMP_METADATA_SAVE_THUMBNAIL;
-
-              /* check if the profile was actually saved, not only if
-               * we wanted to save it
-               */
-              if (profile_saved)
-                metadata_flags |= GIMP_METADATA_SAVE_COLOR_PROFILE;
-              else
-                metadata_flags &= ~GIMP_METADATA_SAVE_COLOR_PROFILE;
-
-              gimp_image_metadata_save_finish (image,
-                                               "image/png",
-                                               metadata, metadata_flags,
-                                               file, NULL);
-
-              g_object_unref (metadata);
-            }
+            gimp_metadata_set_bits_per_sample (metadata, bits_per_sample);
         }
       else
         {
@@ -550,7 +484,7 @@ png_save (GimpProcedure        *procedure,
         }
     }
 
-  gimp_procedure_config_end_run (config, status);
+  gimp_procedure_config_end_export (config, image, file, status);
   g_object_unref (config);
 
   if (export == GIMP_EXPORT_EXPORT)
@@ -1279,7 +1213,7 @@ save_image (GFile        *file,
             GimpDrawable *drawable,
             GimpImage    *orig_image,
             GObject      *config,
-            gboolean     *profile_saved,
+            gint         *bits_per_sample,
             GError      **error)
 {
   gint              i, k;             /* Looping vars */
@@ -1335,6 +1269,12 @@ save_image (GFile        *file,
   gboolean        save_thumbnail;
   gboolean        save_profile;
 
+#if !defined(PNG_iCCP_SUPPORTED)
+  g_object_set (config,
+                "save-color-profile", FALSE,
+                NULL);
+#endif
+
   g_object_get (config,
                 "interlaced",         &save_interlaced,
                 "bkgd",               &save_bkgd,
@@ -1355,6 +1295,7 @@ save_image (GFile        *file,
 
   out_linear = FALSE;
   space      = gimp_drawable_get_format (drawable);
+
 #if defined(PNG_iCCP_SUPPORTED)
   /* If no profile is written: export as sRGB.
    * If manually assigned profile written: follow its TRC.
@@ -1367,7 +1308,7 @@ save_image (GFile        *file,
     {
       profile = gimp_image_get_color_profile (orig_image);
 
-      if (profile                                     ||
+      if (profile                             ||
           export_format == PNG_FORMAT_AUTO    ||
           export_format == PNG_FORMAT_RGB16   ||
           export_format == PNG_FORMAT_RGBA16  ||
@@ -1798,7 +1739,6 @@ save_image (GFile        *file,
 
       g_free (profile_name);
 
-      *profile_saved = TRUE;
       g_object_unref (profile);
     }
 #endif
@@ -2051,6 +1991,8 @@ save_image (GFile        *file,
 
   fclose (fp);
 
+  *bits_per_sample = bit_depth;
+
   return TRUE;
 }
 


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