[gimp] libgimpcolor: start adding profile utility functions to gimplcms.[ch]



commit eee6fa1e4b5e35cc234141fee6c42d883adf4909
Author: Michael Natterer <mitch gimp org>
Date:   Fri Mar 14 01:44:27 2014 +0100

    libgimpcolor: start adding profile utility functions to gimplcms.[ch]
    
    Add functions to get a profile's description, manufacturer, model and
    copyright, and use them instead of implementing the same 10 times.
    
    Also add a GimpColorProfile typedef which avoids both having to
    include lcms globally or using a gpointer instead (which looks bad and
    non-descriptive in an API).

 libgimpcolor/gimpcolor.def     |    4 ++
 libgimpcolor/gimplcms.c        |  105 +++++++++++++++++++++++++++++++++++++++-
 libgimpcolor/gimplcms.h        |   10 ++++-
 modules/color-selector-cmyk.c  |   46 +-----------------
 modules/display-filter-lcms.c  |   57 +--------------------
 modules/display-filter-proof.c |   32 +-----------
 plug-ins/common/lcms.c         |  105 +++++++---------------------------------
 7 files changed, 142 insertions(+), 217 deletions(-)
---
diff --git a/libgimpcolor/gimpcolor.def b/libgimpcolor/gimpcolor.def
index 2bc327a..f91b268 100644
--- a/libgimpcolor/gimpcolor.def
+++ b/libgimpcolor/gimpcolor.def
@@ -38,6 +38,10 @@ EXPORTS
        gimp_hsva_set
        gimp_hwb_to_rgb
        gimp_lcms_create_srgb_profile
+       gimp_lcms_profile_get_copyright
+       gimp_lcms_profile_get_description
+       gimp_lcms_profile_get_manufacturer
+       gimp_lcms_profile_get_model
        gimp_param_rgb_get_type
        gimp_param_spec_rgb
        gimp_param_spec_rgb_has_alpha
diff --git a/libgimpcolor/gimplcms.c b/libgimpcolor/gimplcms.c
index 21be784..24eb015 100644
--- a/libgimpcolor/gimplcms.c
+++ b/libgimpcolor/gimplcms.c
@@ -26,8 +26,11 @@
 
 #include <lcms2.h>
 
+#include <gio/gio.h>
 #include <gegl.h>
 
+#include "libgimpbase/gimpbase.h"
+
 #include "gimpcolortypes.h"
 
 #include "gimplcms.h"
@@ -42,6 +45,106 @@
  **/
 
 
+gchar *
+gimp_lcms_profile_get_description (GimpColorProfile profile)
+{
+  cmsUInt32Number  size;
+  gchar           *desc = NULL;
+
+  g_return_val_if_fail (profile != NULL, NULL);
+
+  size = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
+                                 "en", "US", NULL, 0);
+  if (size > 0)
+    {
+      gchar *data = g_new (gchar, size + 1);
+
+      size = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
+                                     "en", "US", data, size);
+      if (size > 0)
+        desc = gimp_any_to_utf8 (data, -1, NULL);
+
+      g_free (data);
+    }
+
+  return desc;
+}
+
+gchar *
+gimp_lcms_profile_get_manufacturer (GimpColorProfile profile)
+{
+  cmsUInt32Number  size;
+  gchar           *info = NULL;
+
+  g_return_val_if_fail (profile != NULL, NULL);
+
+  size = cmsGetProfileInfoASCII (profile, cmsInfoManufacturer,
+                                 "en", "US", NULL, 0);
+  if (size > 0)
+    {
+      gchar *data = g_new (gchar, size + 1);
+
+      size = cmsGetProfileInfoASCII (profile, cmsInfoManufacturer,
+                                     "en", "US", data, size);
+      if (size > 0)
+        info = gimp_any_to_utf8 (data, -1, NULL);
+
+      g_free (data);
+    }
+
+  return info;
+}
+
+gchar *
+gimp_lcms_profile_get_model (GimpColorProfile profile)
+{
+  cmsUInt32Number  size;
+  gchar           *name = NULL;
+
+  g_return_val_if_fail (profile != NULL, NULL);
+
+  size = cmsGetProfileInfoASCII (profile, cmsInfoModel,
+                                 "en", "US", NULL, 0);
+  if (size > 0)
+    {
+      gchar *data = g_new (gchar, size + 1);
+
+      size = cmsGetProfileInfoASCII (profile, cmsInfoModel,
+                                     "en", "US", data, size);
+      if (size > 0)
+        name = gimp_any_to_utf8 (data, -1, NULL);
+
+      g_free (data);
+    }
+
+  return name;
+}
+
+gchar *
+gimp_lcms_profile_get_copyright (GimpColorProfile profile)
+{
+  cmsUInt32Number  size;
+  gchar           *info = NULL;
+
+  g_return_val_if_fail (profile != NULL, NULL);
+
+  size = cmsGetProfileInfoASCII (profile, cmsInfoCopyright,
+                                 "en", "US", NULL, 0);
+  if (size > 0)
+    {
+      gchar *data = g_new (gchar, size + 1);
+
+      size = cmsGetProfileInfoASCII (profile, cmsInfoCopyright,
+                                     "en", "US", data, size);
+      if (size > 0)
+        info = gimp_any_to_utf8 (data, -1, NULL);
+
+      g_free (data);
+    }
+
+  return info;
+}
+
 /**
  * gimp_lcms_create_srgb_profile:
  *
@@ -73,7 +176,7 @@
  *
  * Since: GIMP 2.10
  **/
-gpointer
+GimpColorProfile
 gimp_lcms_create_srgb_profile (void)
 {
   cmsHPROFILE      srgb_profile;
diff --git a/libgimpcolor/gimplcms.h b/libgimpcolor/gimplcms.h
index fa8712d..257f3cd 100644
--- a/libgimpcolor/gimplcms.h
+++ b/libgimpcolor/gimplcms.h
@@ -32,7 +32,15 @@ G_BEGIN_DECLS
 /* For information look into the C source or the html documentation */
 
 
-gpointer   gimp_lcms_create_srgb_profile (void);
+typedef gpointer GimpColorProfile;
+
+
+gchar            * gimp_lcms_profile_get_description  (GimpColorProfile profile);
+gchar            * gimp_lcms_profile_get_manufacturer (GimpColorProfile profile);
+gchar            * gimp_lcms_profile_get_model        (GimpColorProfile profile);
+gchar            * gimp_lcms_profile_get_copyright    (GimpColorProfile profile);
+
+GimpColorProfile   gimp_lcms_create_srgb_profile      (void);
 
 
 G_END_DECLS
diff --git a/modules/color-selector-cmyk.c b/modules/color-selector-cmyk.c
index 5d7772b..10817cb 100644
--- a/modules/color-selector-cmyk.c
+++ b/modules/color-selector-cmyk.c
@@ -366,7 +366,6 @@ colorsel_cmyk_config_changed (ColorselCmyk *module)
   GimpColorSelector *selector = GIMP_COLOR_SELECTOR (module);
   GimpColorConfig   *config   = module->config;
   cmsUInt32Number    flags    = 0;
-  cmsUInt32Number    descSize = 0;
   cmsHPROFILE        rgb_profile;
   cmsHPROFILE        cmyk_profile;
   gchar             *descData = NULL;
@@ -395,50 +394,9 @@ colorsel_cmyk_config_changed (ColorselCmyk *module)
       ! (cmyk_profile = cmsOpenProfileFromFile (config->cmyk_profile, "r")))
     goto out;
 
-  descSize = cmsGetProfileInfoASCII (cmyk_profile, cmsInfoDescription,
-                                     "en", "US", NULL, 0);
-  if (descSize > 0)
-    {
-      descData = g_new (gchar, descSize + 1);
-      descSize = cmsGetProfileInfoASCII (cmyk_profile, cmsInfoDescription,
-                                         "en", "US", descData, descSize);
-      if (descSize > 0)
-        {
-          name = descData;
-        }
-      else
-        {
-          g_free (descData);
-          descData = NULL;
-        }
-    }
-
-  if (name && ! g_utf8_validate (name, -1, NULL))
-    name = _("(invalid UTF-8 string)");
-
+  name = gimp_lcms_profile_get_description (cmyk_profile);
   if (! name)
-    {
-      descSize = cmsGetProfileInfoASCII (cmyk_profile, cmsInfoModel,
-                                         "en", "US", NULL, 0);
-      if (descSize > 0)
-        {
-          descData = g_new (gchar, descSize + 1);
-          descSize = cmsGetProfileInfoASCII (cmyk_profile, cmsInfoModel,
-                                             "en", "US", descData, descSize);
-          if (descSize > 0)
-            {
-              name = descData;
-            }
-          else
-            {
-              g_free (descData);
-              descData = NULL;
-            }
-        }
-
-      if (name && ! g_utf8_validate (name, -1, NULL))
-        name = _("(invalid UTF-8 string)");
-    }
+    name = gimp_lcms_profile_get_model (cmyk_profile);
 
   text = g_strdup_printf (_("Profile: %s"), name);
   gtk_label_set_text (GTK_LABEL (module->name_label), text);
diff --git a/modules/display-filter-lcms.c b/modules/display-filter-lcms.c
index e89e303..7d7001d 100644
--- a/modules/display-filter-lcms.c
+++ b/modules/display-filter-lcms.c
@@ -172,43 +172,9 @@ cdisplay_lcms_profile_get_info (cmsHPROFILE   profile,
 {
   if (profile)
     {
-      cmsUInt32Number  descSize;
-      gchar           *descData;
-
-      descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
-                                         "en", "US", NULL, 0);
-      if (descSize > 0)
-        {
-          descData = g_new (gchar, descSize + 1);
-          descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
-                                             "en", "US", descData, descSize);
-          if (descSize > 0)
-            *name = descData;
-          else
-            g_free (descData);
-        }
-
+      *name = gimp_lcms_profile_get_description (profile);
       if (! *name)
-        {
-          descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel,
-                                             "en", "US", NULL, 0);
-          if (descSize > 0)
-            {
-              descData = g_new (gchar, descSize + 1);
-              descSize = cmsGetProfileInfoASCII(profile, cmsInfoModel,
-                                                "en", "US", descData, descSize);
-              if (descSize > 0)
-                *name = descData;
-              else
-                g_free (descData);
-            }
-        }
-
-      if (*name && ! g_utf8_validate (*name, -1, NULL))
-        {
-          g_free (*name);
-          *name = g_strdup (_("(invalid UTF-8 string)"));
-        }
+        *name = gimp_lcms_profile_get_model (profile);
 
       if (! *name)
         {
@@ -216,24 +182,7 @@ cdisplay_lcms_profile_get_info (cmsHPROFILE   profile,
           *name = g_strdup (_("(unnamed profile)"));
         }
 
-      descSize = cmsGetProfileInfoASCII (profile, cmsInfoManufacturer,
-                                         "en", "US", NULL, 0);
-      if (descSize > 0)
-        {
-          descData = g_new (gchar, descSize + 1);
-          descSize = cmsGetProfileInfoASCII (profile, cmsInfoManufacturer,
-                                             "en", "US", descData, descSize);
-          if (descSize > 0)
-            *info = descData;
-          else
-            g_free (descData);
-        }
-
-      if (*info && ! g_utf8_validate (*info, -1, NULL))
-        {
-          g_free (*info);
-          *info = NULL;
-        }
+      *info = gimp_lcms_profile_get_manufacturer (profile);
     }
   else
     {
diff --git a/modules/display-filter-proof.c b/modules/display-filter-proof.c
index 3e15b24..e4caca9 100644
--- a/modules/display-filter-proof.c
+++ b/modules/display-filter-proof.c
@@ -271,37 +271,9 @@ cdisplay_proof_combo_box_set_active (GimpColorProfileComboBox *combo,
 
   if (profile)
     {
-      cmsUInt32Number  descSize;
-      gchar           *descData;
-
-      descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
-                                         "en", "US", NULL, 0);
-      if (descSize > 0)
-        {
-          descData = g_new (gchar, descSize + 1);
-          descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
-                                             "en", "US", descData, descSize);
-          if (descSize > 0)
-            label = gimp_any_to_utf8 (descData, -1, NULL);
-
-          g_free (descData);
-        }
-
+      label = gimp_lcms_profile_get_description (profile);
       if (! label)
-        {
-          descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel,
-                                             "en", "US", NULL, 0);
-          if (descSize > 0)
-            {
-              descData = g_new (gchar, descSize + 1);
-              descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel,
-                                                 "en", "US", descData, descSize);
-              if (descSize > 0)
-                label = gimp_any_to_utf8 (descData, -1, NULL);
-
-              g_free (descData);
-            }
-        }
+        label = gimp_lcms_profile_get_model (profile);
 
       cmsCloseProfile (profile);
     }
diff --git a/plug-ins/common/lcms.c b/plug-ins/common/lcms.c
index 192adde..75f1933 100644
--- a/plug-ins/common/lcms.c
+++ b/plug-ins/common/lcms.c
@@ -493,75 +493,6 @@ run (const gchar      *name,
   values[0].data.d_status = status;
 }
 
-static gchar *
-lcms_icc_profile_get_name (cmsHPROFILE profile)
-{
-  cmsUInt32Number  descSize;
-  gchar           *descData;
-  gchar           *name = NULL;
-
-  descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel,
-                                     "en", "US", NULL, 0);
-  if (descSize > 0)
-    {
-      descData = g_new (gchar, descSize + 1);
-      descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel,
-                                         "en", "US", descData, descSize);
-      if (descSize > 0)
-        name = gimp_any_to_utf8 (descData, -1, NULL);
-
-      g_free (descData);
-    }
-
-  return name;
-}
-
-static gchar *
-lcms_icc_profile_get_desc (cmsHPROFILE profile)
-{
-  cmsUInt32Number  descSize;
-  gchar           *descData;
-  gchar           *desc = NULL;
-
-  descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
-                                     "en", "US", NULL, 0);
-  if (descSize > 0)
-    {
-      descData = g_new (gchar, descSize + 1);
-      descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
-                                         "en", "US", descData, descSize);
-      if (descSize > 0)
-        desc = gimp_any_to_utf8 (descData, -1, NULL);
-
-      g_free (descData);
-    }
-
-  return desc;
-}
-
-static gchar *
-lcms_icc_profile_get_info (cmsHPROFILE profile)
-{
-  cmsUInt32Number  descSize;
-  gchar           *descData;
-  gchar           *info = NULL;
-
-  descSize = cmsGetProfileInfoASCII (profile, cmsInfoCopyright,
-                                     "en", "US", NULL, 0);
-  if (descSize > 0)
-    {
-      descData = g_new (gchar, descSize + 1);
-      descSize = cmsGetProfileInfoASCII (profile, cmsInfoCopyright,
-                                         "en", "US", descData, descSize);
-      if (descSize > 0)
-        info = gimp_any_to_utf8 (descData, -1, NULL);
-
-      g_free (descData);
-    }
-
-  return info;
-}
-
 static gboolean
 lcms_icc_profile_is_rgb (cmsHPROFILE profile)
 {
@@ -656,8 +587,8 @@ lcms_icc_apply (GimpColorConfig          *config,
 
   if (memcmp (src_md5, dest_md5, 16) == 0)
     {
-      gchar *src_desc  = lcms_icc_profile_get_desc (src_profile);
-      gchar *dest_desc = lcms_icc_profile_get_desc (dest_profile);
+      gchar *src_desc  = gimp_lcms_profile_get_description (src_profile);
+      gchar *dest_desc = gimp_lcms_profile_get_description (dest_profile);
 
       cmsCloseProfile (src_profile);
       cmsCloseProfile (dest_profile);
@@ -717,9 +648,9 @@ lcms_icc_info (GimpColorConfig *config,
 
   if (profile)
     {
-      if (name) *name = lcms_icc_profile_get_name (profile);
-      if (desc) *desc = lcms_icc_profile_get_desc (profile);
-      if (info) *info = lcms_icc_profile_get_info (profile);
+      if (name) *name = gimp_lcms_profile_get_model (profile);
+      if (desc) *desc = gimp_lcms_profile_get_description (profile);
+      if (info) *info = gimp_lcms_profile_get_copyright (profile);
 
       cmsCloseProfile (profile);
     }
@@ -749,9 +680,9 @@ lcms_icc_file_info (const gchar  *filename,
   if (! profile)
     return GIMP_PDB_EXECUTION_ERROR;
 
-  *name = lcms_icc_profile_get_name (profile);
-  *desc = lcms_icc_profile_get_desc (profile);
-  *info = lcms_icc_profile_get_info (profile);
+  *name = gimp_lcms_profile_get_model (profile);
+  *desc = gimp_lcms_profile_get_description (profile);
+  *info = gimp_lcms_profile_get_copyright (profile);
 
   cmsCloseProfile (profile);
 
@@ -929,8 +860,8 @@ lcms_image_apply_profile (gint32                    image,
     }
 
   {
-    gchar  *src  = lcms_icc_profile_get_desc (src_profile);
-    gchar  *dest = lcms_icc_profile_get_desc (dest_profile);
+    gchar  *src  = gimp_lcms_profile_get_description (src_profile);
+    gchar  *dest = gimp_lcms_profile_get_description (dest_profile);
 
       /* ICC color profile conversion */
       gimp_progress_init_printf (_("Converting from '%s' to '%s'"), src, dest);
@@ -1271,7 +1202,7 @@ lcms_icc_profile_src_label_new (gint32       image,
   gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
   gtk_widget_show (label);
 
-  desc = lcms_icc_profile_get_desc (profile);
+  desc = gimp_lcms_profile_get_description (profile);
   label = g_object_new (GTK_TYPE_LABEL,
                         "label",   desc,
                         "wrap",    TRUE,
@@ -1298,7 +1229,7 @@ lcms_icc_profile_dest_label_new (cmsHPROFILE  profile)
   gchar     *desc;
   gchar     *text;
 
-  desc = lcms_icc_profile_get_desc (profile);
+  desc = gimp_lcms_profile_get_description (profile);
   text = g_strdup_printf (_("Convert the image to the RGB working space (%s)?"),
                           desc);
   g_free (desc);
@@ -1398,9 +1329,9 @@ lcms_icc_combo_box_set_active (GimpColorProfileComboBox *combo,
 
   if (profile)
     {
-      label = lcms_icc_profile_get_desc (profile);
+      label = gimp_lcms_profile_get_description (profile);
       if (! label)
-        label = lcms_icc_profile_get_name (profile);
+        label = gimp_lcms_profile_get_model (profile);
 
       cmsCloseProfile (profile);
     }
@@ -1505,9 +1436,9 @@ lcms_icc_combo_box_new (GimpColorConfig *config,
   if (! profile)
     profile = gimp_lcms_create_srgb_profile ();
 
-  name = lcms_icc_profile_get_desc (profile);
+  name = gimp_lcms_profile_get_description (profile);
   if (! name)
-    name = lcms_icc_profile_get_name (profile);
+    name = gimp_lcms_profile_get_model (profile);
 
   cmsCloseProfile (profile);
 
@@ -1592,9 +1523,9 @@ lcms_dialog (GimpColorConfig *config,
   gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
   gtk_widget_show (frame);
 
-  name = lcms_icc_profile_get_desc (src_profile);
+  name = gimp_lcms_profile_get_description (src_profile);
   if (! name)
-    name = lcms_icc_profile_get_name (src_profile);
+    name = gimp_lcms_profile_get_model (src_profile);
 
   label = gtk_label_new (name);
   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);


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