[gimp/gimp-2-10] Issue #3057 - Retain last user-chosen ICC profile information...
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gimp-2-10] Issue #3057 - Retain last user-chosen ICC profile information...
- Date: Fri, 31 May 2019 13:49:12 +0000 (UTC)
commit c8fb30ab3c8df96e43ab123f60b192092fd57885
Author: Michael Natterer <mitch gimp org>
Date: Fri May 31 15:44:07 2019 +0200
Issue #3057 - Retain last user-chosen ICC profile information...
...when generating "TRC variants"
When creating a new profile with different TRC from an existing
profile, keep all the original profile's description, model,
manufacturer and copyright strings around, but prefix them with "GIMP
from " or similar to indicate that they are different. Also make sure
we don't prefix strings with GIMP stuff multiple times when profiles
are generated repeatedly.
(cherry picked from commit 3cad4aa4c2f33661d68e31fb5a4fdcd7f8063fb2)
libgimpcolor/gimpcolorprofile.c | 100 +++++++++++++++++++++++++++++-----------
1 file changed, 73 insertions(+), 27 deletions(-)
---
diff --git a/libgimpcolor/gimpcolorprofile.c b/libgimpcolor/gimpcolorprofile.c
index 19db7e3e40..69236b4757 100644
--- a/libgimpcolor/gimpcolorprofile.c
+++ b/libgimpcolor/gimpcolorprofile.c
@@ -836,6 +836,57 @@ gimp_color_profile_get_rgb_matrix_colorants (GimpColorProfile *profile,
return FALSE;
}
+static void
+gimp_color_profile_make_tag (cmsHPROFILE profile,
+ cmsTagSignature sig,
+ const gchar *gimp_tag,
+ const gchar *gimp_prefix,
+ const gchar *gimp_prefix_alt,
+ const gchar *original_tag)
+{
+ if (! original_tag || ! strlen (original_tag) ||
+ ! strcmp (original_tag, gimp_tag))
+ {
+ /* if there is no original tag (or it is the same as the new
+ * tag), just use the new tag
+ */
+
+ gimp_color_profile_set_tag (profile, sig, gimp_tag);
+ }
+ else
+ {
+ /* otherwise prefix the existing tag with a gimp prefix
+ * indicating that the profile has been generated
+ */
+
+ if (g_str_has_prefix (original_tag, gimp_prefix))
+ {
+ /* don't add multiple GIMP prefixes */
+ gimp_color_profile_set_tag (profile, sig, original_tag);
+ }
+ else if (gimp_prefix_alt &&
+ g_str_has_prefix (original_tag, gimp_prefix_alt))
+ {
+ /* replace GIMP prefix_alt by prefix */
+ gchar *new_tag = g_strconcat (gimp_prefix,
+ original_tag + strlen (gimp_prefix_alt),
+ NULL);
+
+ gimp_color_profile_set_tag (profile, sig, new_tag);
+ g_free (new_tag);
+ }
+ else
+ {
+ gchar *new_tag = g_strconcat (gimp_prefix,
+ original_tag,
+ NULL);
+
+ gimp_color_profile_set_tag (profile, sig, new_tag);
+ g_free (new_tag);
+ }
+ }
+}
+
static GimpColorProfile *
gimp_color_profile_new_from_color_profile (GimpColorProfile *profile,
gboolean linear)
@@ -845,8 +896,6 @@ gimp_color_profile_new_from_color_profile (GimpColorProfile *profile,
GimpMatrix3 matrix = { { { 0, } } };
cmsCIEXYZ *whitepoint;
cmsToneCurve *curve;
- const gchar *model;
- gchar *new_model;
g_return_val_if_fail (GIMP_IS_COLOR_PROFILE (profile), NULL);
@@ -876,8 +925,11 @@ gimp_color_profile_new_from_color_profile (GimpColorProfile *profile,
/* linear light */
curve = cmsBuildGamma (NULL, 1.00);
- gimp_color_profile_set_tag (target_profile, cmsSigProfileDescriptionTag,
- "linear TRC variant generated by GIMP");
+ gimp_color_profile_make_tag (target_profile, cmsSigProfileDescriptionTag,
+ "linear TRC from unnamed profile",
+ "linear TRC from ",
+ "sRGB TRC from ",
+ gimp_color_profile_get_description (profile));
}
else
{
@@ -887,8 +939,11 @@ gimp_color_profile_new_from_color_profile (GimpColorProfile *profile,
/* sRGB curve */
curve = cmsBuildParametricToneCurve (NULL, 4, srgb_parameters);
- gimp_color_profile_set_tag (target_profile, cmsSigProfileDescriptionTag,
- "sRGB TRC variant generated by GIMP");
+ gimp_color_profile_make_tag (target_profile, cmsSigProfileDescriptionTag,
+ "sRGB TRC from unnamed profile",
+ "sRGB TRC from ",
+ "linear TRC from ",
+ gimp_color_profile_get_description (profile));
}
if (gimp_color_profile_is_rgb (profile))
@@ -928,27 +983,18 @@ gimp_color_profile_new_from_color_profile (GimpColorProfile *profile,
cmsFreeToneCurve (curve);
- model = gimp_color_profile_get_model (profile);
-
- if (model && g_str_has_prefix (model, "Generated from '"))
- {
- /* don't add multiple "Generated from 'foo'" */
- new_model = g_strdup (model);
- }
- else
- {
- new_model = g_strdup_printf ("Generated from '%s'",
- gimp_color_profile_get_description (profile));
- }
-
- gimp_color_profile_set_tag (target_profile, cmsSigDeviceMfgDescTag,
- "GIMP");
- gimp_color_profile_set_tag (target_profile, cmsSigDeviceModelDescTag,
- new_model);
- gimp_color_profile_set_tag (target_profile, cmsSigCopyrightTag,
- "Public Domain");
-
- g_free (new_model);
+ gimp_color_profile_make_tag (target_profile, cmsSigDeviceMfgDescTag,
+ "GIMP",
+ "GIMP from ", NULL,
+ gimp_color_profile_get_manufacturer (profile));
+ gimp_color_profile_make_tag (target_profile, cmsSigDeviceModelDescTag,
+ "Generated by GIMP",
+ "GIMP from ", NULL,
+ gimp_color_profile_get_model (profile));
+ gimp_color_profile_make_tag (target_profile, cmsSigCopyrightTag,
+ "Public Domain",
+ "GIMP from ", NULL,
+ gimp_color_profile_get_copyright (profile));
new_profile = gimp_color_profile_new_from_lcms_profile (target_profile, NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]