[gimp] libgimpbase: make GimpMetadata its own type derived from GExiv2Metadata



commit 884edf56ca981c988a8f0c70bb8f5ec8030569ef
Author: Simon Budig <simon budig de>
Date:   Mon Jan 30 16:42:27 2017 +0100

    libgimpbase: make GimpMetadata its own type derived from GExiv2Metadata

 libgimp/gimpimagemetadata.c    |   91 ++++++++--------
 libgimpbase/gimpbasetypes.h    |    2 +-
 libgimpbase/gimpmetadata.c     |  233 +++++++++++++++++++++++++---------------
 libgimpbase/gimpmetadata.h     |    8 ++
 plug-ins/common/metadata.c     |   16 ++--
 plug-ins/file-tiff/file-tiff.c |    9 +-
 6 files changed, 219 insertions(+), 140 deletions(-)
---
diff --git a/libgimp/gimpimagemetadata.c b/libgimp/gimpimagemetadata.c
index 0ee7b33..3ce9a10 100644
--- a/libgimp/gimpimagemetadata.c
+++ b/libgimp/gimpimagemetadata.c
@@ -100,7 +100,7 @@ gimp_image_metadata_load_prepare (gint32        image_ID,
       }
 #endif
 
-      gexiv2_metadata_erase_exif_thumbnail (metadata);
+      gexiv2_metadata_erase_exif_thumbnail (GEXIV2_METADATA (metadata));
     }
 
   return metadata;
@@ -135,10 +135,10 @@ gimp_image_metadata_load_finish (gint32                 image_ID,
     {
       gchar *comment;
 
-      comment = gexiv2_metadata_get_tag_interpreted_string (metadata,
+      comment = gexiv2_metadata_get_tag_interpreted_string (GEXIV2_METADATA (metadata),
                                                             "Exif.Photo.UserComment");
       if (! comment)
-        comment = gexiv2_metadata_get_tag_interpreted_string (metadata,
+        comment = gexiv2_metadata_get_tag_interpreted_string (GEXIV2_METADATA (metadata),
                                                               "Exif.Image.ImageDescription");
 
       if (comment)
@@ -256,6 +256,7 @@ gimp_image_metadata_save_prepare (gint32                 image_ID,
       gdouble             xres;
       gdouble             yres;
       gchar               buffer[32];
+      GExiv2Metadata     *g2metadata = GEXIV2_METADATA (metadata);
 
       image_width  = gimp_image_width  (image_ID);
       image_height = gimp_image_height (image_ID);
@@ -268,15 +269,15 @@ gimp_image_metadata_save_prepare (gint32                 image_ID,
 
       /* Exif */
 
-      if (! gexiv2_metadata_has_exif (metadata))
+      if (! gexiv2_metadata_has_exif (g2metadata))
         *suggested_flags &= ~GIMP_METADATA_SAVE_EXIF;
 
       if (comment)
         {
-          gexiv2_metadata_set_tag_string (metadata,
+          gexiv2_metadata_set_tag_string (g2metadata,
                                           "Exif.Photo.UserComment",
                                           comment);
-          gexiv2_metadata_set_tag_string (metadata,
+          gexiv2_metadata_set_tag_string (g2metadata,
                                           "Exif.Image.ImageDescription",
                                           comment);
         }
@@ -289,11 +290,11 @@ gimp_image_metadata_save_prepare (gint32                 image_ID,
                   g_date_time_get_hour (datetime),
                   g_date_time_get_minute (datetime),
                   g_date_time_get_second (datetime));
-      gexiv2_metadata_set_tag_string (metadata,
+      gexiv2_metadata_set_tag_string (g2metadata,
                                       "Exif.Image.DateTime",
                                       buffer);
 
-      gexiv2_metadata_set_tag_string (metadata,
+      gexiv2_metadata_set_tag_string (g2metadata,
                                       "Exif.Image.Software",
                                       PACKAGE_STRING);
 
@@ -306,10 +307,10 @@ gimp_image_metadata_save_prepare (gint32                 image_ID,
 
       /* XMP */
 
-      if (! gexiv2_metadata_has_xmp (metadata))
+      if (! gexiv2_metadata_has_xmp (g2metadata))
         *suggested_flags &= ~GIMP_METADATA_SAVE_XMP;
 
-      gexiv2_metadata_set_tag_string (metadata,
+      gexiv2_metadata_set_tag_string (g2metadata,
                                       "Xmp.dc.Format",
                                       mime_type);
 
@@ -318,12 +319,12 @@ gimp_image_metadata_save_prepare (gint32                 image_ID,
           /* TIFF specific XMP data */
 
           g_snprintf (buffer, sizeof (buffer), "%d", image_width);
-          gexiv2_metadata_set_tag_string (metadata,
+          gexiv2_metadata_set_tag_string (g2metadata,
                                           "Xmp.tiff.ImageWidth",
                                           buffer);
 
           g_snprintf (buffer, sizeof (buffer), "%d", image_height);
-          gexiv2_metadata_set_tag_string (metadata,
+          gexiv2_metadata_set_tag_string (g2metadata,
                                           "Xmp.tiff.ImageLength",
                                           buffer);
 
@@ -335,14 +336,14 @@ gimp_image_metadata_save_prepare (gint32                 image_ID,
                       g_date_time_get_hour (datetime),
                       g_date_time_get_minute (datetime),
                       g_date_time_get_second (datetime));
-          gexiv2_metadata_set_tag_string (metadata,
+          gexiv2_metadata_set_tag_string (g2metadata,
                                           "Xmp.tiff.DateTime",
                                           buffer);
         }
 
       /* IPTC */
 
-      if (! gexiv2_metadata_has_iptc (metadata))
+      if (! gexiv2_metadata_has_iptc (g2metadata))
         *suggested_flags &= ~GIMP_METADATA_SAVE_IPTC;
 
       g_snprintf (buffer, sizeof (buffer),
@@ -350,7 +351,7 @@ gimp_image_metadata_save_prepare (gint32                 image_ID,
                   g_date_time_get_year (datetime),
                   g_date_time_get_month (datetime),
                   g_date_time_get_day_of_month (datetime));
-      gexiv2_metadata_set_tag_string (metadata,
+      gexiv2_metadata_set_tag_string (g2metadata,
                                       "Iptc.Application2.DateCreated",
                                       buffer);
 
@@ -361,7 +362,7 @@ gimp_image_metadata_save_prepare (gint32                 image_ID,
                   g_date_time_get_second (datetime),
                   g_date_time_get_hour (datetime),
                   g_date_time_get_minute (datetime));
-      gexiv2_metadata_set_tag_string (metadata,
+      gexiv2_metadata_set_tag_string (g2metadata,
                                       "Iptc.Application2.TimeCreated",
                                       buffer);
 
@@ -401,7 +402,8 @@ gimp_image_metadata_save_finish (gint32                  image_ID,
                                  GFile                  *file,
                                  GError                **error)
 {
-  GExiv2Metadata *new_metadata;
+  GimpMetadata   *new_metadata;
+  GExiv2Metadata *new_g2metadata;
   gboolean        support_exif;
   gboolean        support_xmp;
   gboolean        support_iptc;
@@ -423,25 +425,27 @@ gimp_image_metadata_save_finish (gint32                  image_ID,
 
   /* read metadata from saved file */
   new_metadata = gimp_metadata_load_from_file (file, error);
+  new_g2metadata = GEXIV2_METADATA (new_metadata);
 
   if (! new_metadata)
     return FALSE;
 
-  support_exif = gexiv2_metadata_get_supports_exif (new_metadata);
-  support_xmp  = gexiv2_metadata_get_supports_xmp  (new_metadata);
-  support_iptc = gexiv2_metadata_get_supports_iptc (new_metadata);
+  support_exif = gexiv2_metadata_get_supports_exif (new_g2metadata);
+  support_xmp  = gexiv2_metadata_get_supports_xmp  (new_g2metadata);
+  support_iptc = gexiv2_metadata_get_supports_iptc (new_g2metadata);
 
   if ((flags & GIMP_METADATA_SAVE_EXIF) && support_exif)
     {
-      gchar **exif_data = gexiv2_metadata_get_exif_tags (metadata);
+      gchar **exif_data = gexiv2_metadata_get_exif_tags (GEXIV2_METADATA (metadata));
 
       for (i = 0; exif_data[i] != NULL; i++)
         {
-          if (! gexiv2_metadata_has_tag (new_metadata, exif_data[i]) &&
+          if (! gexiv2_metadata_has_tag (new_g2metadata, exif_data[i]) &&
               gimp_metadata_is_tag_supported (exif_data[i], mime_type))
             {
-              value = gexiv2_metadata_get_tag_string (metadata, exif_data[i]);
-              gexiv2_metadata_set_tag_string (new_metadata, exif_data[i],
+              value = gexiv2_metadata_get_tag_string (GEXIV2_METADATA (metadata),
+                                                      exif_data[i]);
+              gexiv2_metadata_set_tag_string (new_g2metadata, exif_data[i],
                                               value);
               g_free (value);
             }
@@ -452,15 +456,15 @@ gimp_image_metadata_save_finish (gint32                  image_ID,
 
   if ((flags & GIMP_METADATA_SAVE_XMP) && support_xmp)
     {
-      gchar **xmp_data = gexiv2_metadata_get_xmp_tags (metadata);
+      gchar **xmp_data = gexiv2_metadata_get_xmp_tags (GEXIV2_METADATA (metadata));
 
       for (i = 0; xmp_data[i] != NULL; i++)
         {
-          if (! gexiv2_metadata_has_tag (new_metadata, xmp_data[i]) &&
+          if (! gexiv2_metadata_has_tag (new_g2metadata, xmp_data[i]) &&
               gimp_metadata_is_tag_supported (xmp_data[i], mime_type))
             {
-              value = gexiv2_metadata_get_tag_string (metadata, xmp_data[i]);
-              gexiv2_metadata_set_tag_string (new_metadata, xmp_data[i],
+              value = gexiv2_metadata_get_tag_string (GEXIV2_METADATA (metadata), xmp_data[i]);
+              gexiv2_metadata_set_tag_string (new_g2metadata, xmp_data[i],
                                               value);
               g_free (value);
             }
@@ -471,15 +475,16 @@ gimp_image_metadata_save_finish (gint32                  image_ID,
 
   if ((flags & GIMP_METADATA_SAVE_IPTC) && support_iptc)
     {
-      gchar **iptc_data = gexiv2_metadata_get_iptc_tags (metadata);
+      gchar **iptc_data = gexiv2_metadata_get_iptc_tags (GEXIV2_METADATA (metadata));
 
       for (i = 0; iptc_data[i] != NULL; i++)
         {
-          if (! gexiv2_metadata_has_tag (new_metadata, iptc_data[i]) &&
+          if (! gexiv2_metadata_has_tag (new_g2metadata, iptc_data[i]) &&
               gimp_metadata_is_tag_supported (iptc_data[i], mime_type))
             {
-              value = gexiv2_metadata_get_tag_string (metadata, iptc_data[i]);
-              gexiv2_metadata_set_tag_string (new_metadata, iptc_data[i],
+              value = gexiv2_metadata_get_tag_string (GEXIV2_METADATA (metadata),
+                                                      iptc_data[i]);
+              gexiv2_metadata_set_tag_string (new_g2metadata, iptc_data[i],
                                               value);
               g_free (value);
             }
@@ -524,27 +529,27 @@ gimp_image_metadata_save_finish (gint32                  image_ID,
         {
           gchar buffer[32];
 
-          gexiv2_metadata_set_exif_thumbnail_from_buffer (new_metadata,
+          gexiv2_metadata_set_exif_thumbnail_from_buffer (new_g2metadata,
                                                           (guchar *) thumb_buffer,
                                                           count);
 
           g_snprintf (buffer, sizeof (buffer), "%d", thumbw);
-          gexiv2_metadata_set_tag_string (new_metadata,
+          gexiv2_metadata_set_tag_string (new_g2metadata,
                                           "Exif.Thumbnail.ImageWidth",
                                           buffer);
 
           g_snprintf (buffer, sizeof (buffer), "%d", thumbh);
-          gexiv2_metadata_set_tag_string (new_metadata,
+          gexiv2_metadata_set_tag_string (new_g2metadata,
                                           "Exif.Thumbnail.ImageLength",
                                           buffer);
 
-          gexiv2_metadata_set_tag_string (new_metadata,
+          gexiv2_metadata_set_tag_string (new_g2metadata,
                                           "Exif.Thumbnail.BitsPerSample",
                                           "8 8 8");
-          gexiv2_metadata_set_tag_string (new_metadata,
+          gexiv2_metadata_set_tag_string (new_g2metadata,
                                           "Exif.Thumbnail.SamplesPerPixel",
                                           "3");
-          gexiv2_metadata_set_tag_string (new_metadata,
+          gexiv2_metadata_set_tag_string (new_g2metadata,
                                           "Exif.Thumbnail.PhotometricInterpretation",
                                           "6");
 
@@ -579,7 +584,7 @@ gimp_image_metadata_load_thumbnail (GFile   *file,
   if (! metadata)
     return -1;
 
-  if (! gexiv2_metadata_get_exif_thumbnail (metadata,
+  if (! gexiv2_metadata_get_exif_thumbnail (GEXIV2_METADATA (metadata),
                                             &thumbnail_buffer,
                                             &thumbnail_size))
     {
@@ -611,7 +616,7 @@ gimp_image_metadata_load_thumbnail (GFile   *file,
       gimp_image_insert_layer (image_ID, layer_ID, -1, 0);
 
       gimp_image_metadata_rotate (image_ID,
-                                  gexiv2_metadata_get_orientation (metadata));
+                                  gexiv2_metadata_get_orientation (GEXIV2_METADATA (metadata)));
     }
 
   g_object_unref (metadata);
@@ -731,7 +736,7 @@ gimp_image_metadata_rotate_query (gint32        image_ID,
   GExiv2Orientation  orientation;
   gboolean           query = interactive;
 
-  orientation = gexiv2_metadata_get_orientation (metadata);
+  orientation = gexiv2_metadata_get_orientation (GEXIV2_METADATA (metadata));
 
   if (orientation <= GEXIV2_ORIENTATION_NORMAL ||
       orientation >  GEXIV2_ORIENTATION_MAX)
@@ -771,9 +776,9 @@ gimp_image_metadata_rotate_query (gint32        image_ID,
 
   gimp_image_metadata_rotate (image_ID, orientation);
 
-  gexiv2_metadata_set_tag_string (metadata,
+  gexiv2_metadata_set_tag_string (GEXIV2_METADATA (metadata),
                                   "Exif.Image.Orientation", "1");
-  gexiv2_metadata_set_tag_string (metadata,
+  gexiv2_metadata_set_tag_string (GEXIV2_METADATA (metadata),
                                   "Xmp.tiff.Orientation", "1");
 }
 
diff --git a/libgimpbase/gimpbasetypes.h b/libgimpbase/gimpbasetypes.h
index bef9904..eadde9e 100644
--- a/libgimpbase/gimpbasetypes.h
+++ b/libgimpbase/gimpbasetypes.h
@@ -55,7 +55,7 @@ typedef struct _GimpValueArray   GimpValueArray;
 typedef void (* GimpDatafileLoaderFunc) (const GimpDatafileData *file_data,
                                          gpointer                user_data);
 
-typedef struct _GExiv2Metadata GimpMetadata;
+typedef struct _GimpMetadata GimpMetadata;
 
 
 /**
diff --git a/libgimpbase/gimpmetadata.c b/libgimpbase/gimpmetadata.c
index 8da75a7..8af784c 100644
--- a/libgimpbase/gimpmetadata.c
+++ b/libgimpbase/gimpmetadata.c
@@ -38,6 +38,32 @@
 
 #include "libgimp/libgimp-intl.h"
 
+typedef struct _GimpMetadataClass   GimpMetadataClass;
+typedef struct _GimpMetadataPrivate GimpMetadataPrivate;
+
+struct _GimpMetadata
+{
+  GExiv2Metadata parent_instance;
+};
+
+struct _GimpMetadataPrivate
+{
+};
+
+struct _GimpMetadataClass
+{
+  GExiv2MetadataClass parent_class;
+
+  /* Padding for future expansion */
+  void (*_gimp_reserved1) (void);
+  void (*_gimp_reserved2) (void);
+  void (*_gimp_reserved3) (void);
+  void (*_gimp_reserved4) (void);
+  void (*_gimp_reserved5) (void);
+  void (*_gimp_reserved6) (void);
+  void (*_gimp_reserved7) (void);
+  void (*_gimp_reserved8) (void);
+};
 
 /**
  * SECTION: gimpmetadata
@@ -142,6 +168,25 @@ static const guint8 wilber_jpg[] =
 
 static const guint wilber_jpg_len = G_N_ELEMENTS (wilber_jpg);
 
+G_DEFINE_TYPE_WITH_PRIVATE (GimpMetadata, gimp_metadata, GEXIV2_TYPE_METADATA)
+
+
+static void
+gimp_metadata_class_init (GimpMetadataClass *klass)
+{
+  /* this is just a placeholder class to avoid being limited by
+   * GExiv2Metadata in the future...
+   */
+}
+
+static void
+gimp_metadata_init (GimpMetadata *metadata)
+{
+  /* this is just a placeholder class to avoid being limited by
+   * GExiv2Metadata in the future...
+   */
+}
+
 
 /**
  * gimp_metadata_new:
@@ -155,13 +200,15 @@ static const guint wilber_jpg_len = G_N_ELEMENTS (wilber_jpg);
 GimpMetadata *
 gimp_metadata_new (void)
 {
-  GExiv2Metadata *metadata = NULL;
+  GimpMetadata *metadata = NULL;
 
   if (gexiv2_initialize ())
     {
-      metadata = gexiv2_metadata_new ();
+      metadata = g_object_new (GIMP_TYPE_METADATA, NULL);
+                               gexiv2_metadata_new ();
 
-      if (! gexiv2_metadata_open_buf (metadata, wilber_jpg, wilber_jpg_len,
+      if (! gexiv2_metadata_open_buf (GEXIV2_METADATA (metadata),
+                                      wilber_jpg, wilber_jpg_len,
                                       NULL))
         {
           g_object_unref (metadata);
@@ -296,7 +343,7 @@ gimp_metadata_deserialize_text (GMarkupParseContext  *context,
           decoded = g_base64_decode (value, &len);
 
           if (decoded[len - 1] == '\0')
-            gexiv2_metadata_set_tag_string (parse_data->metadata,
+            gexiv2_metadata_set_tag_string (GEXIV2_METADATA (parse_data->metadata),
                                             parse_data->name,
                                             (const gchar *) decoded);
 
@@ -304,7 +351,7 @@ gimp_metadata_deserialize_text (GMarkupParseContext  *context,
         }
       else
         {
-          gexiv2_metadata_set_tag_string (parse_data->metadata,
+          gexiv2_metadata_set_tag_string (GEXIV2_METADATA (parse_data->metadata),
                                           parse_data->name,
                                           value);
         }
@@ -440,13 +487,14 @@ gimp_metadata_serialize (GimpMetadata *metadata)
   g_string_append (string, "<?xml version='1.0' encoding='UTF-8'?>\n");
   g_string_append (string, "<metadata>\n");
 
-  exif_data = gexiv2_metadata_get_exif_tags (metadata);
+  exif_data = gexiv2_metadata_get_exif_tags (GEXIV2_METADATA (metadata));
 
   if (exif_data)
     {
       for (i = 0; exif_data[i] != NULL; i++)
         {
-          value = gexiv2_metadata_get_tag_string (metadata, exif_data[i]);
+          value = gexiv2_metadata_get_tag_string (GEXIV2_METADATA (metadata),
+                                                  exif_data[i]);
           escaped = gimp_metadata_escape (exif_data[i], value, &base64);
           g_free (value);
 
@@ -456,13 +504,14 @@ gimp_metadata_serialize (GimpMetadata *metadata)
       g_strfreev (exif_data);
     }
 
-  xmp_data = gexiv2_metadata_get_xmp_tags (metadata);
+  xmp_data = gexiv2_metadata_get_xmp_tags (GEXIV2_METADATA (metadata));
 
   if (xmp_data)
     {
       for (i = 0; xmp_data[i] != NULL; i++)
         {
-          value = gexiv2_metadata_get_tag_string (metadata, xmp_data[i]);
+          value = gexiv2_metadata_get_tag_string (GEXIV2_METADATA (metadata),
+                                                  xmp_data[i]);
           escaped = gimp_metadata_escape (xmp_data[i], value, &base64);
           g_free (value);
 
@@ -472,13 +521,14 @@ gimp_metadata_serialize (GimpMetadata *metadata)
       g_strfreev (xmp_data);
     }
 
-  iptc_data = gexiv2_metadata_get_iptc_tags (metadata);
+  iptc_data = gexiv2_metadata_get_iptc_tags (GEXIV2_METADATA (metadata));
 
   if (iptc_data)
     {
       for (i = 0; iptc_data[i] != NULL; i++)
         {
-          value = gexiv2_metadata_get_tag_string (metadata, iptc_data[i]);
+          value = gexiv2_metadata_get_tag_string (GEXIV2_METADATA (metadata),
+                                                  iptc_data[i]);
           escaped = gimp_metadata_escape (iptc_data[i], value, &base64);
           g_free (value);
 
@@ -508,9 +558,9 @@ GimpMetadata  *
 gimp_metadata_load_from_file (GFile   *file,
                               GError **error)
 {
-  GExiv2Metadata *meta = NULL;
-  gchar          *path;
-  gchar          *filename;
+  GimpMetadata *meta = NULL;
+  gchar        *path;
+  gchar        *filename;
 
   g_return_val_if_fail (G_IS_FILE (file), NULL);
   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
@@ -534,9 +584,9 @@ gimp_metadata_load_from_file (GFile   *file,
 
   if (gexiv2_initialize ())
     {
-      meta = gexiv2_metadata_new ();
+      meta = g_object_new (GIMP_TYPE_METADATA, NULL);
 
-      if (! gexiv2_metadata_open_path (meta, filename, error))
+      if (! gexiv2_metadata_open_path (GEXIV2_METADATA (meta), filename, error))
         {
           g_object_unref (meta);
           g_free (filename);
@@ -592,7 +642,8 @@ gimp_metadata_save_to_file (GimpMetadata  *metadata,
 
   g_free (path);
 
-  success = gexiv2_metadata_save_file (metadata, filename, error);
+  success = gexiv2_metadata_save_file (GEXIV2_METADATA (metadata),
+                                       filename, error);
 
   g_free (filename);
 
@@ -624,7 +675,7 @@ gimp_metadata_set_from_exif (GimpMetadata  *metadata,
   guint8        data_size[2] = { 0, };
   const guint8  eoi[2] = { 0xff, 0xd9 };
 
-  g_return_val_if_fail (GEXIV2_IS_METADATA (metadata), FALSE);
+  g_return_val_if_fail (GIMP_IS_METADATA (metadata), FALSE);
   g_return_val_if_fail (exif_data != NULL, FALSE);
   g_return_val_if_fail (exif_data_length > 0, FALSE);
   g_return_val_if_fail (exif_data_length + 2 < 65536, FALSE);
@@ -644,7 +695,7 @@ gimp_metadata_set_from_exif (GimpMetadata  *metadata,
 
   exif_metadata = gimp_metadata_new ();
 
-  if (! gexiv2_metadata_open_buf (exif_metadata,
+  if (! gexiv2_metadata_open_buf (GEXIV2_METADATA (exif_metadata),
                                   exif_bytes->data, exif_bytes->len, error))
     {
       g_object_unref (exif_metadata);
@@ -652,7 +703,7 @@ gimp_metadata_set_from_exif (GimpMetadata  *metadata,
       return FALSE;
     }
 
-  if (! gexiv2_metadata_has_exif (exif_metadata))
+  if (! gexiv2_metadata_has_exif (GEXIV2_METADATA (exif_metadata)))
     {
       g_set_error (error, gimp_metadata_error_quark (), 0,
                    _("Parsing Exif data failed."));
@@ -696,14 +747,14 @@ gimp_metadata_set_from_xmp (GimpMetadata  *metadata,
 
   xmp_metadata = gimp_metadata_new ();
 
-  if (! gexiv2_metadata_open_buf (xmp_metadata,
+  if (! gexiv2_metadata_open_buf (GEXIV2_METADATA (xmp_metadata),
                                   xmp_data, xmp_data_length, error))
     {
       g_object_unref (xmp_metadata);
       return FALSE;
     }
 
-  if (! gexiv2_metadata_has_xmp (xmp_metadata))
+  if (! gexiv2_metadata_has_xmp (GEXIV2_METADATA (xmp_metadata)))
     {
       g_set_error (error, gimp_metadata_error_quark (), 0,
                    _("Parsing XMP data failed."));
@@ -737,10 +788,12 @@ gimp_metadata_set_pixel_size (GimpMetadata *metadata,
   g_return_if_fail (GEXIV2_IS_METADATA (metadata));
 
   g_snprintf (buffer, sizeof (buffer), "%d", width);
-  gexiv2_metadata_set_tag_string (metadata, "Exif.Image.ImageWidth", buffer);
+  gexiv2_metadata_set_tag_string (GEXIV2_METADATA (metadata),
+                                  "Exif.Image.ImageWidth", buffer);
 
   g_snprintf (buffer, sizeof (buffer), "%d", height);
-  gexiv2_metadata_set_tag_string (metadata, "Exif.Image.ImageLength", buffer);
+  gexiv2_metadata_set_tag_string (GEXIV2_METADATA (metadata),
+                                  "Exif.Image.ImageLength", buffer);
 }
 
 /**
@@ -762,7 +815,8 @@ gimp_metadata_set_bits_per_sample (GimpMetadata *metadata,
 
   g_snprintf (buffer, sizeof (buffer), "%d %d %d",
               bits_per_sample, bits_per_sample, bits_per_sample);
-  gexiv2_metadata_set_tag_string (metadata, "Exif.Image.BitsPerSample", buffer);
+  gexiv2_metadata_set_tag_string (GEXIV2_METADATA (metadata),
+                                  "Exif.Image.BitsPerSample", buffer);
 }
 
 /**
@@ -790,17 +844,17 @@ gimp_metadata_get_resolution (GimpMetadata *metadata,
 
   g_return_val_if_fail (GEXIV2_IS_METADATA (metadata), FALSE);
 
-  if (gexiv2_metadata_get_exif_tag_rational (metadata,
+  if (gexiv2_metadata_get_exif_tag_rational (GEXIV2_METADATA (metadata),
                                              "Exif.Image.XResolution",
                                              &xnom, &xdenom) &&
-      gexiv2_metadata_get_exif_tag_rational (metadata,
+      gexiv2_metadata_get_exif_tag_rational (GEXIV2_METADATA (metadata),
                                              "Exif.Image.YResolution",
                                              &ynom, &ydenom))
     {
       gchar *un;
       gint   exif_unit = 2;
 
-      un = gexiv2_metadata_get_tag_string (metadata,
+      un = gexiv2_metadata_get_tag_string (GEXIV2_METADATA (metadata),
                                            "Exif.Image.ResolutionUnit");
       if (un)
         {
@@ -890,16 +944,17 @@ gimp_metadata_set_resolution (GimpMetadata *metadata,
         break;
     }
 
-  gexiv2_metadata_set_exif_tag_rational (metadata,
+  gexiv2_metadata_set_exif_tag_rational (GEXIV2_METADATA (metadata),
                                          "Exif.Image.XResolution",
                                          ROUND (xres * factor), factor);
 
-  gexiv2_metadata_set_exif_tag_rational (metadata,
+  gexiv2_metadata_set_exif_tag_rational (GEXIV2_METADATA (metadata),
                                          "Exif.Image.YResolution",
                                          ROUND (yres * factor), factor);
 
   g_snprintf (buffer, sizeof (buffer), "%d", exif_unit);
-  gexiv2_metadata_set_tag_string (metadata, "Exif.Image.ResolutionUnit", buffer);
+  gexiv2_metadata_set_tag_string (GEXIV2_METADATA (metadata),
+                                  "Exif.Image.ResolutionUnit", buffer);
 }
 
 /**
@@ -919,19 +974,21 @@ gimp_metadata_get_colorspace (GimpMetadata *metadata)
 {
   glong exif_cs = -1;
 
-  g_return_val_if_fail (GEXIV2_IS_METADATA (metadata),
+  g_return_val_if_fail (GIMP_IS_METADATA (metadata),
                         GIMP_METADATA_COLORSPACE_UNSPECIFIED);
 
   /*  the logic here was mostly taken from darktable and libkexiv2  */
 
-  if (gexiv2_metadata_has_tag (metadata, "Exif.Photo.ColorSpace"))
+  if (gexiv2_metadata_has_tag (GEXIV2_METADATA (metadata),
+                               "Exif.Photo.ColorSpace"))
     {
-      exif_cs = gexiv2_metadata_get_tag_long (metadata,
+      exif_cs = gexiv2_metadata_get_tag_long (GEXIV2_METADATA (metadata),
                                               "Exif.Photo.ColorSpace");
     }
-  else if (gexiv2_metadata_has_tag (metadata, "Xmp.exif.ColorSpace"))
+  else if (gexiv2_metadata_has_tag (GEXIV2_METADATA (metadata),
+                                    "Xmp.exif.ColorSpace"))
     {
-      exif_cs = gexiv2_metadata_get_tag_long (metadata,
+      exif_cs = gexiv2_metadata_get_tag_long (GEXIV2_METADATA (metadata),
                                               "Xmp.exif.ColorSpace");
     }
 
@@ -949,7 +1006,7 @@ gimp_metadata_get_colorspace (GimpMetadata *metadata)
         {
           gchar *iop_index;
 
-          iop_index = gexiv2_metadata_get_tag_string (metadata,
+          iop_index = gexiv2_metadata_get_tag_string (GEXIV2_METADATA (metadata),
                                                       "Exif.Iop.InteroperabilityIndex");
 
           if (! g_strcmp0 (iop_index, "R03"))
@@ -968,11 +1025,12 @@ gimp_metadata_get_colorspace (GimpMetadata *metadata)
           g_free (iop_index);
         }
 
-      if (gexiv2_metadata_has_tag (metadata, "Exif.Nikon3.ColorSpace"))
+      if (gexiv2_metadata_has_tag (GEXIV2_METADATA (metadata),
+                                   "Exif.Nikon3.ColorSpace"))
         {
           glong nikon_cs;
 
-          nikon_cs = gexiv2_metadata_get_tag_long (metadata,
+          nikon_cs = gexiv2_metadata_get_tag_long (GEXIV2_METADATA (metadata),
                                                    "Exif.Nikon3.ColorSpace");
 
           if (nikon_cs == 0x01)
@@ -985,11 +1043,12 @@ gimp_metadata_get_colorspace (GimpMetadata *metadata)
             }
         }
 
-      if (gexiv2_metadata_has_tag (metadata, "Exif.Canon.ColorSpace"))
+      if (gexiv2_metadata_has_tag (GEXIV2_METADATA (metadata),
+                                   "Exif.Canon.ColorSpace"))
         {
           glong canon_cs;
 
-          canon_cs = gexiv2_metadata_get_tag_long (metadata,
+          canon_cs = gexiv2_metadata_get_tag_long (GEXIV2_METADATA (metadata),
                                                    "Exif.Canon.ColorSpace");
 
           if (canon_cs == 0x01)
@@ -1024,59 +1083,59 @@ void
 gimp_metadata_set_colorspace (GimpMetadata           *metadata,
                               GimpMetadataColorspace  colorspace)
 {
-  g_return_if_fail (GEXIV2_IS_METADATA (metadata));
+  GExiv2Metadata *g2metadata = GEXIV2_METADATA (metadata);
 
   switch (colorspace)
     {
     case GIMP_METADATA_COLORSPACE_UNSPECIFIED:
-      gexiv2_metadata_clear_tag (metadata, "Exif.Photo.ColorSpace");
-      gexiv2_metadata_clear_tag (metadata, "Xmp.exif.ColorSpace");
-      gexiv2_metadata_clear_tag (metadata, "Exif.Iop.InteroperabilityIndex");
-      gexiv2_metadata_clear_tag (metadata, "Exif.Nikon3.ColorSpace");
-      gexiv2_metadata_clear_tag (metadata, "Exif.Canon.ColorSpace");
+      gexiv2_metadata_clear_tag (g2metadata, "Exif.Photo.ColorSpace");
+      gexiv2_metadata_clear_tag (g2metadata, "Xmp.exif.ColorSpace");
+      gexiv2_metadata_clear_tag (g2metadata, "Exif.Iop.InteroperabilityIndex");
+      gexiv2_metadata_clear_tag (g2metadata, "Exif.Nikon3.ColorSpace");
+      gexiv2_metadata_clear_tag (g2metadata, "Exif.Canon.ColorSpace");
       break;
 
     case GIMP_METADATA_COLORSPACE_UNCALIBRATED:
-      gexiv2_metadata_set_tag_long (metadata, "Exif.Photo.ColorSpace", 0xffff);
-      if (gexiv2_metadata_has_tag (metadata, "Xmp.exif.ColorSpace"))
-        gexiv2_metadata_set_tag_long (metadata, "Xmp.exif.ColorSpace", 0xffff);
-      gexiv2_metadata_clear_tag (metadata, "Exif.Iop.InteroperabilityIndex");
-      gexiv2_metadata_clear_tag (metadata, "Exif.Nikon3.ColorSpace");
-      gexiv2_metadata_clear_tag (metadata, "Exif.Canon.ColorSpace");
+      gexiv2_metadata_set_tag_long (g2metadata, "Exif.Photo.ColorSpace", 0xffff);
+      if (gexiv2_metadata_has_tag (g2metadata, "Xmp.exif.ColorSpace"))
+        gexiv2_metadata_set_tag_long (g2metadata, "Xmp.exif.ColorSpace", 0xffff);
+      gexiv2_metadata_clear_tag (g2metadata, "Exif.Iop.InteroperabilityIndex");
+      gexiv2_metadata_clear_tag (g2metadata, "Exif.Nikon3.ColorSpace");
+      gexiv2_metadata_clear_tag (g2metadata, "Exif.Canon.ColorSpace");
       break;
 
     case GIMP_METADATA_COLORSPACE_SRGB:
-      gexiv2_metadata_set_tag_long (metadata, "Exif.Photo.ColorSpace", 0x01);
+      gexiv2_metadata_set_tag_long (g2metadata, "Exif.Photo.ColorSpace", 0x01);
 
-      if (gexiv2_metadata_has_tag (metadata, "Xmp.exif.ColorSpace"))
-        gexiv2_metadata_set_tag_long (metadata, "Xmp.exif.ColorSpace", 0x01);
+      if (gexiv2_metadata_has_tag (g2metadata, "Xmp.exif.ColorSpace"))
+        gexiv2_metadata_set_tag_long (g2metadata, "Xmp.exif.ColorSpace", 0x01);
 
-      if (gexiv2_metadata_has_tag (metadata, "Exif.Iop.InteroperabilityIndex"))
-        gexiv2_metadata_set_tag_string (metadata,
+      if (gexiv2_metadata_has_tag (g2metadata, "Exif.Iop.InteroperabilityIndex"))
+        gexiv2_metadata_set_tag_string (g2metadata,
                                         "Exif.Iop.InteroperabilityIndex", "R98");
 
-      if (gexiv2_metadata_has_tag (metadata, "Exif.Nikon3.ColorSpace"))
-        gexiv2_metadata_set_tag_long (metadata, "Exif.Nikon3.ColorSpace", 0x01);
+      if (gexiv2_metadata_has_tag (g2metadata, "Exif.Nikon3.ColorSpace"))
+        gexiv2_metadata_set_tag_long (g2metadata, "Exif.Nikon3.ColorSpace", 0x01);
 
-      if (gexiv2_metadata_has_tag (metadata, "Exif.Canon.ColorSpace"))
-        gexiv2_metadata_set_tag_long (metadata, "Exif.Canon.ColorSpace", 0x01);
+      if (gexiv2_metadata_has_tag (g2metadata, "Exif.Canon.ColorSpace"))
+        gexiv2_metadata_set_tag_long (g2metadata, "Exif.Canon.ColorSpace", 0x01);
       break;
 
     case GIMP_METADATA_COLORSPACE_ADOBERGB:
-      gexiv2_metadata_set_tag_long (metadata, "Exif.Photo.ColorSpace", 0x02);
+      gexiv2_metadata_set_tag_long (g2metadata, "Exif.Photo.ColorSpace", 0x02);
 
-      if (gexiv2_metadata_has_tag (metadata, "Xmp.exif.ColorSpace"))
-        gexiv2_metadata_set_tag_long (metadata, "Xmp.exif.ColorSpace", 0x02);
+      if (gexiv2_metadata_has_tag (g2metadata, "Xmp.exif.ColorSpace"))
+        gexiv2_metadata_set_tag_long (g2metadata, "Xmp.exif.ColorSpace", 0x02);
 
-      if (gexiv2_metadata_has_tag (metadata, "Exif.Iop.InteroperabilityIndex"))
-        gexiv2_metadata_set_tag_string (metadata,
+      if (gexiv2_metadata_has_tag (g2metadata, "Exif.Iop.InteroperabilityIndex"))
+        gexiv2_metadata_set_tag_string (g2metadata,
                                         "Exif.Iop.InteroperabilityIndex", "R03");
 
-      if (gexiv2_metadata_has_tag (metadata, "Exif.Nikon3.ColorSpace"))
-        gexiv2_metadata_set_tag_long (metadata, "Exif.Nikon3.ColorSpace", 0x02);
+      if (gexiv2_metadata_has_tag (g2metadata, "Exif.Nikon3.ColorSpace"))
+        gexiv2_metadata_set_tag_long (g2metadata, "Exif.Nikon3.ColorSpace", 0x02);
 
-      if (gexiv2_metadata_has_tag (metadata, "Exif.Canon.ColorSpace"))
-        gexiv2_metadata_set_tag_long (metadata, "Exif.Canon.ColorSpace", 0x02);
+      if (gexiv2_metadata_has_tag (g2metadata, "Exif.Canon.ColorSpace"))
+        gexiv2_metadata_set_tag_long (g2metadata, "Exif.Canon.ColorSpace", 0x02);
       break;
     }
 }
@@ -1151,20 +1210,22 @@ static void
 gimp_metadata_add (GimpMetadata *src,
                    GimpMetadata *dest)
 {
+  GExiv2Metadata *g2src  = GEXIV2_METADATA (src);
+  GExiv2Metadata *g2dest = GEXIV2_METADATA (dest);
   gchar *value;
   gint   i;
 
-  if (gexiv2_metadata_get_supports_exif (src) &&
-      gexiv2_metadata_get_supports_exif (dest))
+  if (gexiv2_metadata_get_supports_exif (g2src) &&
+      gexiv2_metadata_get_supports_exif (g2dest))
     {
-      gchar **exif_data = gexiv2_metadata_get_exif_tags (src);
+      gchar **exif_data = gexiv2_metadata_get_exif_tags (g2src);
 
       if (exif_data)
         {
           for (i = 0; exif_data[i] != NULL; i++)
             {
-              value = gexiv2_metadata_get_tag_string (src, exif_data[i]);
-              gexiv2_metadata_set_tag_string (dest, exif_data[i], value);
+              value = gexiv2_metadata_get_tag_string (g2src, exif_data[i]);
+              gexiv2_metadata_set_tag_string (g2dest, exif_data[i], value);
               g_free (value);
             }
 
@@ -1172,17 +1233,17 @@ gimp_metadata_add (GimpMetadata *src,
         }
     }
 
-  if (gexiv2_metadata_get_supports_xmp (src) &&
-      gexiv2_metadata_get_supports_xmp (dest))
+  if (gexiv2_metadata_get_supports_xmp (g2src) &&
+      gexiv2_metadata_get_supports_xmp (g2dest))
     {
-      gchar **xmp_data = gexiv2_metadata_get_xmp_tags (src);
+      gchar **xmp_data = gexiv2_metadata_get_xmp_tags (g2src);
 
       if (xmp_data)
         {
           for (i = 0; xmp_data[i] != NULL; i++)
             {
-              value = gexiv2_metadata_get_tag_string (src, xmp_data[i]);
-              gexiv2_metadata_set_tag_string (dest, xmp_data[i], value);
+              value = gexiv2_metadata_get_tag_string (g2src, xmp_data[i]);
+              gexiv2_metadata_set_tag_string (g2dest, xmp_data[i], value);
               g_free (value);
             }
 
@@ -1190,17 +1251,17 @@ gimp_metadata_add (GimpMetadata *src,
         }
     }
 
-  if (gexiv2_metadata_get_supports_iptc (src) &&
-      gexiv2_metadata_get_supports_iptc (dest))
+  if (gexiv2_metadata_get_supports_iptc (g2src) &&
+      gexiv2_metadata_get_supports_iptc (g2dest))
     {
-      gchar **iptc_data = gexiv2_metadata_get_iptc_tags (src);
+      gchar **iptc_data = gexiv2_metadata_get_iptc_tags (g2src);
 
       if (iptc_data)
         {
           for (i = 0; iptc_data[i] != NULL; i++)
             {
-              value = gexiv2_metadata_get_tag_string (src, iptc_data[i]);
-              gexiv2_metadata_set_tag_string (dest, iptc_data[i], value);
+              value = gexiv2_metadata_get_tag_string (g2src, iptc_data[i]);
+              gexiv2_metadata_set_tag_string (g2dest, iptc_data[i], value);
               g_free (value);
             }
 
diff --git a/libgimpbase/gimpmetadata.h b/libgimpbase/gimpmetadata.h
index 3a6b27c..e879155 100644
--- a/libgimpbase/gimpmetadata.h
+++ b/libgimpbase/gimpmetadata.h
@@ -24,6 +24,13 @@
 
 G_BEGIN_DECLS
 
+#define GIMP_TYPE_METADATA            (gimp_metadata_get_type ())
+#define GIMP_METADATA(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_METADATA, GimpMetadata))
+#define GIMP_METADATA_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_METADATA, 
GimpMetadataClass))
+#define GIMP_IS_METADATA(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_METADATA))
+#define GIMP_IS_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_METADATA))
+#define GIMP_METADATA_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_METADATA, 
GimpMetadataClass))
+
 typedef enum
 {
   GIMP_METADATA_LOAD_COMMENT     = 1 << 0,
@@ -52,6 +59,7 @@ typedef enum
   GIMP_METADATA_COLORSPACE_ADOBERGB
 } GimpMetadataColorspace;
 
+GType          gimp_metadata_get_type            (void) G_GNUC_CONST;
 
 GimpMetadata * gimp_metadata_new                 (void);
 GimpMetadata * gimp_metadata_duplicate           (GimpMetadata           *metadata);
diff --git a/plug-ins/common/metadata.c b/plug-ins/common/metadata.c
index 2706a01..fce5bbc 100644
--- a/plug-ins/common/metadata.c
+++ b/plug-ins/common/metadata.c
@@ -78,7 +78,7 @@ static void       run                              (const gchar      *name,
                                                     GimpParam       **return_vals);
 
 static gboolean   metadata_dialog                  (gint32            image_id,
-                                                    GExiv2Metadata   *metadata);
+                                                    GimpMetadata     *metadata);
 
 static void       metadata_dialog_set_metadata     (GExiv2Metadata   *metadata,
                                                     GtkBuilder       *builder);
@@ -209,8 +209,8 @@ run (const gchar      *name,
 }
 
 static gboolean
-metadata_dialog (gint32          image_id,
-                 GExiv2Metadata *metadata)
+metadata_dialog (gint32        image_id,
+                 GimpMetadata *metadata)
 {
   GtkBuilder *builder;
   GtkWidget  *dialog;
@@ -271,7 +271,7 @@ metadata_dialog (gint32          image_id,
                     G_CALLBACK (metadata_dialog_iptc_callback),
                     builder);
 
-  metadata_dialog_set_metadata (metadata, builder);
+  metadata_dialog_set_metadata (GEXIV2_METADATA (metadata), builder);
 
   gtk_dialog_run (GTK_DIALOG (dialog));
 
@@ -472,7 +472,7 @@ metadata_dialog_iptc_callback (GtkWidget  *dialog,
                                GtkBuilder *builder)
 {
 #if 0
-  GExiv2Metadata *metadata;
+  GimpMetadata *metadata;
   gint            i;
 
   metadata = gimp_image_get_metadata (handler->image);
@@ -486,7 +486,8 @@ metadata_dialog_iptc_callback (GtkWidget  *dialog,
         {
           GtkEntry *entry = GTK_ENTRY (object);
 
-          gexiv2_metadata_set_tag_string (metadata, iptc_tags[i].tag,
+          gexiv2_metadata_set_tag_string (GEXIV2_METADATA (metadata),
+                                          iptc_tags[i].tag,
                                           gtk_entry_get_text (entry));
         }
       else  if (!strcmp ("multi", iptc_tags[i].mode))
@@ -502,7 +503,8 @@ metadata_dialog_iptc_callback (GtkWidget  *dialog,
           gtk_text_buffer_get_end_iter (buffer, &end);
 
           text = gtk_text_buffer_get_text (buffer, &start, &end, TRUE);
-          gexiv2_metadata_set_tag_string (metadata, iptc_tags[i].tag, text);
+          gexiv2_metadata_set_tag_string (GEXIV2_METADATA (metadata),
+                                          iptc_tags[i].tag, text);
           g_free (text);
         }
     }
diff --git a/plug-ins/file-tiff/file-tiff.c b/plug-ins/file-tiff/file-tiff.c
index aa57870..dfb8eaa 100644
--- a/plug-ins/file-tiff/file-tiff.c
+++ b/plug-ins/file-tiff/file-tiff.c
@@ -471,9 +471,12 @@ run (const gchar      *name,
                    * exiv2 saves them with wrong type and the original values
                    * could be invalid, see also bug 761823
                    */
-                  gexiv2_metadata_clear_tag (metadata, "Exif.Image.0x0118");
-                  gexiv2_metadata_clear_tag (metadata, "Exif.Image.0x0119");
-                  gexiv2_metadata_clear_tag (metadata, "Exif.Image.PageNumber");
+                  gexiv2_metadata_clear_tag (GEXIV2_METADATA (metadata),
+                                             "Exif.Image.0x0118");
+                  gexiv2_metadata_clear_tag (GEXIV2_METADATA (metadata),
+                                             "Exif.Image.0x0119");
+                  gexiv2_metadata_clear_tag (GEXIV2_METADATA (metadata),
+                                             "Exif.Image.PageNumber");
 
                   gimp_metadata_set_bits_per_sample (metadata, saved_bpp);
 



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