summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2013-08-01 15:50:53 +0100
committerRichard Hughes <richard@hughsie.com>2013-08-01 15:51:58 +0100
commitfc2d2cad62860efe51f131a443eada1b70925754 (patch)
tree261a10ac7284e7f5a1a43a2f2ec032fee49900f8 /client
parent05e5da3657007617bdc03b654a89f199bc4288e1 (diff)
downloadcolord-fc2d2cad62860efe51f131a443eada1b70925754.tar.gz
Set 'GAMUT_coverage(srgb)' when generating standard space profiles
Although, obviously not for sRGB itself.
Diffstat (limited to 'client')
-rw-r--r--client/cd-create-profile.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/client/cd-create-profile.c b/client/cd-create-profile.c
index 60c67b4..1f0d20a 100644
--- a/client/cd-create-profile.c
+++ b/client/cd-create-profile.c
@@ -740,6 +740,44 @@ out:
}
/**
+ * cd_util_icc_set_metadata_coverage:
+ **/
+static gboolean
+cd_util_icc_set_metadata_coverage (CdIcc *icc, GError **error)
+{
+ CdIcc *icc_srgb = NULL;
+ const gchar *tmp;
+ gboolean ret = TRUE;
+ gchar *coverage_tmp = NULL;
+ gdouble coverage = 0.0f;
+
+ /* is sRGB? */
+ tmp = cd_icc_get_metadata_item (icc, CD_PROFILE_METADATA_STANDARD_SPACE);
+ if (g_strcmp0 (tmp, "srgb") == 0)
+ goto out;
+
+ /* calculate coverage (quite expensive to calculate, hence metadata) */
+ icc_srgb = cd_icc_new ();
+ ret = cd_icc_create_default (icc_srgb, error);
+ if (!ret)
+ goto out;
+ ret = cd_icc_utils_get_coverage (icc_srgb, icc, &coverage, error);
+ if (!ret)
+ goto out;
+ if (coverage > 0.0) {
+ coverage_tmp = g_strdup_printf ("%.2f", coverage);
+ cd_icc_add_metadata (icc,
+ "GAMUT_coverage(srgb)",
+ coverage_tmp);
+ }
+out:
+ g_free (coverage_tmp);
+ if (icc_srgb != NULL)
+ g_object_unref (icc_srgb);
+ return ret;
+}
+
+/**
* cd_util_create_from_xml:
**/
static gboolean
@@ -821,6 +859,9 @@ cd_util_create_from_xml (CdUtilPrivate *priv,
cd_icc_add_metadata (priv->icc,
CD_PROFILE_METADATA_STANDARD_SPACE,
cd_dom_get_node_data (tmp));
+ ret = cd_util_icc_set_metadata_coverage (priv->icc, error);
+ if (!ret)
+ goto out;
}
tmp = cd_dom_get_node (dom, profile, "data_source");
if (tmp != NULL) {