[gnome-color-manager: 1/18] Remove GcmXYZ and use proper boxed GTypes for the color structures
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-color-manager: 1/18] Remove GcmXYZ and use proper boxed GTypes for the color structures
- Date: Fri, 8 Oct 2010 16:08:15 +0000 (UTC)
commit 7234bf6b3255d90b751b10fced70eb0e4994023b
Author: Richard Hughes <richard hughsie com>
Date: Thu Oct 7 18:03:01 2010 +0100
Remove GcmXYZ and use proper boxed GTypes for the color structures
docs/api/libcolor-glib-docs.sgml | 1 -
docs/huey/gcm-calculate-fudge.c | 20 ++--
libcolor-glib/Makefile.am | 2 -
libcolor-glib/gcm-color.c | 137 ++++++++++++++++++++++-
libcolor-glib/gcm-color.h | 28 +++++-
libcolor-glib/gcm-edid.c | 155 +++++++++++++++++++++++--
libcolor-glib/gcm-edid.h | 6 +
libcolor-glib/gcm-profile.c | 142 +++++++++---------------
libcolor-glib/gcm-self-test.c | 50 ++++-----
libcolor-glib/gcm-xyz.c | 229 --------------------------------------
libcolor-glib/gcm-xyz.h | 72 ------------
src/cc-color-panel.c | 2 +-
src/gcm-calibrate-argyll.c | 8 +-
src/gcm-calibrate.c | 35 ++++--
src/gcm-cie-widget.c | 116 +++++++++----------
src/gcm-import.c | 10 +-
src/gcm-picker.c | 6 +-
src/gcm-self-test.c | 37 ++++---
src/gcm-viewer.c | 38 ++++---
19 files changed, 529 insertions(+), 565 deletions(-)
---
diff --git a/docs/api/libcolor-glib-docs.sgml b/docs/api/libcolor-glib-docs.sgml
index c88f1f2..9263c96 100644
--- a/docs/api/libcolor-glib-docs.sgml
+++ b/docs/api/libcolor-glib-docs.sgml
@@ -53,7 +53,6 @@
<xi:include href="xml/gcm-usb.xml"/>
<xi:include href="xml/gcm-x11-output.xml"/>
<xi:include href="xml/gcm-x11-screen.xml"/>
- <xi:include href="xml/gcm-xyz.xml"/>
</chapter>
diff --git a/docs/huey/gcm-calculate-fudge.c b/docs/huey/gcm-calculate-fudge.c
index 4bd0f59..06eb4dd 100644
--- a/docs/huey/gcm-calculate-fudge.c
+++ b/docs/huey/gcm-calculate-fudge.c
@@ -137,18 +137,18 @@ main (gint argc, gchar *argv[])
guint i;
/* get the device RGB measured values */
- gcm_color_init_RGB (&device_rgb[0], 0.082935, 0.053567, 0.001294);
- gcm_color_init_RGB (&device_rgb[1], 0.066773, 0.150323, 0.009683);
- gcm_color_init_RGB (&device_rgb[2], 0.013250, 0.021211, 0.095019);
- gcm_color_init_RGB (&device_rgb[3], 0.156415, 0.220809, 0.105035);
- gcm_color_init_RGB (&device_rgb[4], 0.000310, 0.000513, 0.000507);
+ gcm_color_set_RGB (&device_rgb[0], 0.082935, 0.053567, 0.001294);
+ gcm_color_set_RGB (&device_rgb[1], 0.066773, 0.150323, 0.009683);
+ gcm_color_set_RGB (&device_rgb[2], 0.013250, 0.021211, 0.095019);
+ gcm_color_set_RGB (&device_rgb[3], 0.156415, 0.220809, 0.105035);
+ gcm_color_set_RGB (&device_rgb[4], 0.000310, 0.000513, 0.000507);
/* get some results from argyll */
- gcm_color_init_XYZ (&actual_xyz[0], 82.537676, 42.634870, 2.142396);
- gcm_color_init_XYZ (&actual_xyz[1], 61.758330, 122.072291, 17.345163);
- gcm_color_init_XYZ (&actual_xyz[2], 36.544046, 19.224371, 161.438049);
- gcm_color_init_XYZ (&actual_xyz[3], 174.129280, 180.500098, 179.302163);
- gcm_color_init_XYZ (&actual_xyz[4], 0.407554, 0.419799, 0.849899);
+ gcm_color_set_XYZ (&actual_xyz[0], 82.537676, 42.634870, 2.142396);
+ gcm_color_set_XYZ (&actual_xyz[1], 61.758330, 122.072291, 17.345163);
+ gcm_color_set_XYZ (&actual_xyz[2], 36.544046, 19.224371, 161.438049);
+ gcm_color_set_XYZ (&actual_xyz[3], 174.129280, 180.500098, 179.302163);
+ gcm_color_set_XYZ (&actual_xyz[4], 0.407554, 0.419799, 0.849899);
/* get the calibration vector */
gcm_vec3_init (&dark_offset, 0.014000, 0.014000, 0.016226);
diff --git a/libcolor-glib/Makefile.am b/libcolor-glib/Makefile.am
index 09da129..1221a1f 100644
--- a/libcolor-glib/Makefile.am
+++ b/libcolor-glib/Makefile.am
@@ -99,8 +99,6 @@ libcolor_glib_la_SOURCES = \
gcm-ddc-common.h \
gcm-enum.c \
gcm-enum.h \
- gcm-xyz.c \
- gcm-xyz.h \
gcm-usb.c \
gcm-usb.h \
gcm-profile-store.c \
diff --git a/libcolor-glib/gcm-color.c b/libcolor-glib/gcm-color.c
index 4be3075..18e7871 100644
--- a/libcolor-glib/gcm-color.c
+++ b/libcolor-glib/gcm-color.c
@@ -34,7 +34,102 @@
#include <gcm-color.h>
/**
- * gcm_color_init_XYZ:
+ * gcm_color_dup_XYZ:
+ **/
+GcmColorXYZ *
+gcm_color_dup_XYZ (const GcmColorXYZ *src)
+{
+ GcmColorXYZ *dest;
+ g_return_val_if_fail (src != NULL, NULL);
+ dest = gcm_color_new_XYZ ();
+ dest->X = src->X;
+ dest->Y = src->Y;
+ dest->Z = src->Z;
+ return dest;
+}
+
+/**
+ * gcm_color_dup_RGB:
+ **/
+GcmColorRGB *
+gcm_color_dup_RGB (const GcmColorRGB *src)
+{
+ GcmColorRGB *dest;
+ g_return_val_if_fail (src != NULL, NULL);
+ dest = gcm_color_new_RGB ();
+ dest->R = src->R;
+ dest->G = src->G;
+ dest->B = src->B;
+ return dest;
+}
+
+/**
+ * gcm_color_dup_Yxy:
+ **/
+GcmColorYxy *
+gcm_color_dup_Yxy (const GcmColorYxy *src)
+{
+ GcmColorYxy *dest;
+ g_return_val_if_fail (src != NULL, NULL);
+ dest = gcm_color_new_Yxy ();
+ dest->x = src->x;
+ dest->y = src->y;
+ return dest;
+}
+
+/**
+ * gcm_color_get_type_XYZ:
+ * Return value: a #GType
+ *
+ * Gets a specific type.
+ **/
+GType
+gcm_color_get_type_XYZ (void)
+{
+ static GType type_id = 0;
+ if (!type_id)
+ type_id = g_boxed_type_register_static ("GcmColorXYZ",
+ (GBoxedCopyFunc) gcm_color_dup_XYZ,
+ (GBoxedFreeFunc) gcm_color_free_XYZ);
+ return type_id;
+}
+
+/**
+ * gcm_color_get_type_RGB:
+ * Return value: a #GType
+ *
+ * Gets a specific type.
+ **/
+GType
+gcm_color_get_type_RGB (void)
+{
+ static GType type_id = 0;
+ if (!type_id)
+ type_id = g_boxed_type_register_static ("GcmColorRGB",
+ (GBoxedCopyFunc) gcm_color_dup_RGB,
+ (GBoxedFreeFunc) gcm_color_free_RGB);
+ return type_id;
+}
+
+/**
+ * gcm_color_get_type_Yxy:
+ * Return value: a #GType
+ *
+ * Gets a specific type.
+ **/
+GType
+gcm_color_get_type_Yxy (void)
+{
+ static GType type_id = 0;
+ if (!type_id)
+ type_id = g_boxed_type_register_static ("GcmColorYxy",
+ (GBoxedCopyFunc) gcm_color_dup_Yxy,
+ (GBoxedFreeFunc) gcm_color_free_Yxy);
+ return type_id;
+}
+
+/**
+ * gcm_color_set_XYZ:
* @dest: the destination color
* @X: component value
* @Y: component value
@@ -43,7 +138,7 @@
* Initialises a color value.
**/
void
-gcm_color_init_XYZ (GcmColorXYZ *dest, gdouble X, gdouble Y, gdouble Z)
+gcm_color_set_XYZ (GcmColorXYZ *dest, gdouble X, gdouble Y, gdouble Z)
{
g_return_if_fail (dest != NULL);
@@ -53,7 +148,23 @@ gcm_color_init_XYZ (GcmColorXYZ *dest, gdouble X, gdouble Y, gdouble Z)
}
/**
- * gcm_color_init_RGB:
+ * gcm_color_clear_XYZ:
+ * @dest: the destination color
+ *
+ * Initialises a color value.
+ **/
+void
+gcm_color_clear_XYZ (GcmColorXYZ *dest)
+{
+ g_return_if_fail (dest != NULL);
+
+ dest->X = 0.0f;
+ dest->Y = 0.0f;
+ dest->Z = 0.0f;
+}
+
+/**
+ * gcm_color_set_RGB:
* @dest: the destination color
* @R: component value
* @G: component value
@@ -62,7 +173,7 @@ gcm_color_init_XYZ (GcmColorXYZ *dest, gdouble X, gdouble Y, gdouble Z)
* Initialises a color value.
**/
void
-gcm_color_init_RGB (GcmColorRGB *dest, gdouble R, gdouble G, gdouble B)
+gcm_color_set_RGB (GcmColorRGB *dest, gdouble R, gdouble G, gdouble B)
{
g_return_if_fail (dest != NULL);
@@ -90,6 +201,24 @@ gcm_color_copy_XYZ (const GcmColorXYZ *src, GcmColorXYZ *dest)
}
/**
+ * gcm_color_copy_Yxy:
+ * @src: the source color
+ * @dest: the destination color
+ *
+ * Deep copies a color value.
+ **/
+void
+gcm_color_copy_Yxy (const GcmColorYxy *src, GcmColorYxy *dest)
+{
+ g_return_if_fail (src != NULL);
+ g_return_if_fail (dest != NULL);
+
+ dest->Y = src->Y;
+ dest->x = src->x;
+ dest->y = src->y;
+}
+
+/**
* gcm_color_copy_RGB:
* @src: the source color
* @dest: the destination color
diff --git a/libcolor-glib/gcm-color.h b/libcolor-glib/gcm-color.h
index 3341cbc..1dd8a22 100644
--- a/libcolor-glib/gcm-color.h
+++ b/libcolor-glib/gcm-color.h
@@ -26,6 +26,7 @@
#ifndef __GCM_COLOR_H__
#define __GCM_COLOR_H__
+#include <glib-object.h>
#include <gcm-math.h>
typedef struct {
@@ -58,16 +59,39 @@ typedef struct {
gdouble B;
} GcmColorRGB;
-void gcm_color_init_XYZ (GcmColorXYZ *dest,
+#define GCM_TYPE_COLOR_RGB (gcm_color_get_type_RGB ())
+#define GCM_TYPE_COLOR_XYZ (gcm_color_get_type_XYZ ())
+#define GCM_TYPE_COLOR_YXY (gcm_color_get_type_Yxy ())
+
+/* types */
+GType gcm_color_get_type_XYZ (void);
+GType gcm_color_get_type_RGB (void);
+GType gcm_color_get_type_Yxy (void);
+
+/* allocate and deallocate helpers */
+#define gcm_color_new_XYZ() g_new0 (GcmColorXYZ, 1)
+#define gcm_color_new_RGB() g_new0 (GcmColorRGB, 1)
+#define gcm_color_new_Yxy() g_new0 (GcmColorYxy, 1)
+#define gcm_color_free_XYZ g_free
+#define gcm_color_free_RGB g_free
+#define gcm_color_free_Yxy g_free
+GcmColorXYZ *gcm_color_dup_XYZ (const GcmColorXYZ *src);
+GcmColorRGB *gcm_color_dup_RGB (const GcmColorRGB *src);
+GcmColorYxy *gcm_color_dup_Yxy (const GcmColorYxy *src);
+
+void gcm_color_set_XYZ (GcmColorXYZ *dest,
gdouble X,
gdouble Y,
gdouble Z);
-void gcm_color_init_RGB (GcmColorRGB *dest,
+void gcm_color_set_RGB (GcmColorRGB *dest,
gdouble R,
gdouble G,
gdouble B);
void gcm_color_copy_XYZ (const GcmColorXYZ *src,
GcmColorXYZ *dest);
+void gcm_color_copy_Yxy (const GcmColorYxy *src,
+ GcmColorYxy *dest);
+void gcm_color_clear_XYZ (GcmColorXYZ *dest);
void gcm_color_copy_RGB (const GcmColorRGB *src,
GcmColorRGB *dest);
void gcm_color_convert_RGBint_to_RGB (const GcmColorRGBint *src,
diff --git a/libcolor-glib/gcm-edid.c b/libcolor-glib/gcm-edid.c
index 0830bde..389c2cf 100644
--- a/libcolor-glib/gcm-edid.c
+++ b/libcolor-glib/gcm-edid.c
@@ -34,6 +34,7 @@
#include <gio/gio.h>
#include <stdlib.h>
+#include "gcm-color.h"
#include "gcm-edid.h"
#include "gcm-tables.h"
@@ -59,6 +60,10 @@ struct _GcmEdidPrivate
guint width;
guint height;
gfloat gamma;
+ GcmColorYxy *red;
+ GcmColorYxy *green;
+ GcmColorYxy *blue;
+ GcmColorYxy *white;
GcmTables *tables;
};
@@ -73,6 +78,10 @@ enum {
PROP_PNP_ID,
PROP_WIDTH,
PROP_HEIGHT,
+ PROP_RED,
+ PROP_GREEN,
+ PROP_BLUE,
+ PROP_WHITE,
PROP_LAST
};
@@ -252,6 +261,74 @@ gcm_edid_get_gamma (GcmEdid *edid)
}
/**
+ * gcm_edid_get_red:
+ * @edid: a valid #GcmEdid instance
+ *
+ * Gets the monitor red chromaticity value.
+ *
+ * Return value: the #GcmColorYxy value
+ *
+ * Since: 0.0.1
+ **/
+const GcmColorYxy *
+gcm_edid_get_red (GcmEdid *edid)
+{
+ g_return_val_if_fail (GCM_IS_EDID (edid), NULL);
+ return edid->priv->red;
+}
+
+/**
+ * gcm_edid_get_green:
+ * @edid: a valid #GcmEdid instance
+ *
+ * Gets the monitor green chromaticity value.
+ *
+ * Return value: the #GcmColorYxy value
+ *
+ * Since: 0.0.1
+ **/
+const GcmColorYxy *
+gcm_edid_get_green (GcmEdid *edid)
+{
+ g_return_val_if_fail (GCM_IS_EDID (edid), NULL);
+ return edid->priv->green;
+}
+
+/**
+ * gcm_edid_get_blue:
+ * @edid: a valid #GcmEdid instance
+ *
+ * Gets the monitor red chromaticity value.
+ *
+ * Return value: the #GcmColorYxy value
+ *
+ * Since: 0.0.1
+ **/
+const GcmColorYxy *
+gcm_edid_get_blue (GcmEdid *edid)
+{
+ g_return_val_if_fail (GCM_IS_EDID (edid), NULL);
+ return edid->priv->blue;
+}
+
+/**
+ * gcm_edid_get_white:
+ * @edid: a valid #GcmEdid instance
+ *
+ * Gets the monitor white chromaticity value.
+ *
+ * Return value: the #GcmColorYxy value
+ *
+ * Since: 0.0.1
+ **/
+const GcmColorYxy *
+gcm_edid_get_white (GcmEdid *edid)
+{
+ g_return_val_if_fail (GCM_IS_EDID (edid), NULL);
+ return edid->priv->white;
+}
+
+/**
* gcm_edid_reset:
* @edid: a valid #GcmEdid instance
*
@@ -395,7 +472,6 @@ gcm_edid_parse (GcmEdid *edid, const guint8 *data, gsize length, GError **error)
GcmEdidPrivate *priv = edid->priv;
guint32 serial;
guint extension_blocks;
- gdouble x, y;
gchar *tmp;
g_return_val_if_fail (GCM_IS_EDID (edid), FALSE);
@@ -452,24 +528,24 @@ gcm_edid_parse (GcmEdid *edid, const guint8 *data, gsize length, GError **error)
}
/* get color red */
- x = gcm_edid_decode_fraction (data[0x1b], gcm_edid_get_bits (data[0x19], 6, 7));
- y = gcm_edid_decode_fraction (data[0x1c], gcm_edid_get_bits (data[0x19], 5, 4));
- egg_debug ("red x=%f,y=%f", x, y);
+ priv->red->x = gcm_edid_decode_fraction (data[0x1b], gcm_edid_get_bits (data[0x19], 6, 7));
+ priv->red->y = gcm_edid_decode_fraction (data[0x1c], gcm_edid_get_bits (data[0x19], 5, 4));
+ egg_debug ("red x=%f,y=%f", priv->red->x, priv->red->y);
/* get color green */
- x = gcm_edid_decode_fraction (data[0x1d], gcm_edid_get_bits (data[0x19], 2, 3));
- y = gcm_edid_decode_fraction (data[0x1e], gcm_edid_get_bits (data[0x19], 0, 1));
- egg_debug ("green x=%f,y=%f", x, y);
+ priv->green->x = gcm_edid_decode_fraction (data[0x1d], gcm_edid_get_bits (data[0x19], 2, 3));
+ priv->green->y = gcm_edid_decode_fraction (data[0x1e], gcm_edid_get_bits (data[0x19], 0, 1));
+ egg_debug ("green x=%f,y=%f", priv->green->x, priv->green->y);
/* get color blue */
- x = gcm_edid_decode_fraction (data[0x1f], gcm_edid_get_bits (data[0x1a], 6, 7));
- y = gcm_edid_decode_fraction (data[0x20], gcm_edid_get_bits (data[0x1a], 4, 5));
- egg_debug ("blue x=%f,y=%f", x, y);
+ priv->blue->x = gcm_edid_decode_fraction (data[0x1f], gcm_edid_get_bits (data[0x1a], 6, 7));
+ priv->blue->y = gcm_edid_decode_fraction (data[0x20], gcm_edid_get_bits (data[0x1a], 4, 5));
+ egg_debug ("blue x=%f,y=%f", priv->blue->x, priv->blue->y);
/* get color white */
- x = gcm_edid_decode_fraction (data[0x21], gcm_edid_get_bits (data[0x1a], 2, 3));
- y = gcm_edid_decode_fraction (data[0x22], gcm_edid_get_bits (data[0x1a], 0, 1));
- egg_debug ("white x=%f,y=%f", x, y);
+ priv->white->x = gcm_edid_decode_fraction (data[0x21], gcm_edid_get_bits (data[0x1a], 2, 3));
+ priv->white->y = gcm_edid_decode_fraction (data[0x22], gcm_edid_get_bits (data[0x1a], 0, 1));
+ egg_debug ("white x=%f,y=%f", priv->white->x, priv->white->y);
/* parse EDID data */
for (i=GCM_EDID_OFFSET_DATA_BLOCKS; i <= GCM_EDID_OFFSET_LAST_BLOCK; i+=18) {
@@ -568,6 +644,18 @@ gcm_edid_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec
case PROP_HEIGHT:
g_value_set_uint (value, priv->height);
break;
+ case PROP_WHITE:
+ g_value_set_boxed (value, g_boxed_copy (GCM_TYPE_COLOR_XYZ, priv->white));
+ break;
+ case PROP_RED:
+ g_value_set_boxed (value, g_boxed_copy (GCM_TYPE_COLOR_XYZ, priv->red));
+ break;
+ case PROP_GREEN:
+ g_value_set_boxed (value, g_boxed_copy (GCM_TYPE_COLOR_XYZ, priv->green));
+ break;
+ case PROP_BLUE:
+ g_value_set_boxed (value, g_boxed_copy (GCM_TYPE_COLOR_XYZ, priv->blue));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -671,6 +759,39 @@ gcm_edid_class_init (GcmEdidClass *klass)
G_PARAM_READABLE);
g_object_class_install_property (object_class, PROP_HEIGHT, pspec);
+ /**
+ * GcmEdid:red:
+ */
+ g_object_class_install_property (object_class,
+ PROP_RED,
+ g_param_spec_boxed ("red", NULL, NULL,
+ GCM_TYPE_COLOR_YXY,
+ G_PARAM_READABLE));
+ /**
+ * GcmEdid:green:
+ */
+ g_object_class_install_property (object_class,
+ PROP_GREEN,
+ g_param_spec_boxed ("green", NULL, NULL,
+ GCM_TYPE_COLOR_YXY,
+ G_PARAM_READABLE));
+ /**
+ * GcmEdid:blue:
+ */
+ g_object_class_install_property (object_class,
+ PROP_BLUE,
+ g_param_spec_boxed ("blue", NULL, NULL,
+ GCM_TYPE_COLOR_YXY,
+ G_PARAM_READABLE));
+ /**
+ * GcmEdid:white:
+ */
+ g_object_class_install_property (object_class,
+ PROP_WHITE,
+ g_param_spec_boxed ("white", NULL, NULL,
+ GCM_TYPE_COLOR_YXY,
+ G_PARAM_READABLE));
+
g_type_class_add_private (klass, sizeof (GcmEdidPrivate));
}
@@ -688,6 +809,10 @@ gcm_edid_init (GcmEdid *edid)
edid->priv->checksum = NULL;
edid->priv->tables = gcm_tables_new ();
edid->priv->pnp_id = g_new0 (gchar, 4);
+ edid->priv->red = gcm_color_new_Yxy ();
+ edid->priv->green = gcm_color_new_Yxy ();
+ edid->priv->blue = gcm_color_new_Yxy ();
+ edid->priv->white = gcm_color_new_Yxy ();
}
/**
@@ -705,6 +830,10 @@ gcm_edid_finalize (GObject *object)
g_free (priv->eisa_id);
g_free (priv->checksum);
g_free (priv->pnp_id);
+ gcm_color_free_Yxy (priv->white);
+ gcm_color_free_Yxy (priv->red);
+ gcm_color_free_Yxy (priv->green);
+ gcm_color_free_Yxy (priv->blue);
g_object_unref (priv->tables);
G_OBJECT_CLASS (gcm_edid_parent_class)->finalize (object);
diff --git a/libcolor-glib/gcm-edid.h b/libcolor-glib/gcm-edid.h
index 546fac9..d4da93a 100644
--- a/libcolor-glib/gcm-edid.h
+++ b/libcolor-glib/gcm-edid.h
@@ -28,6 +28,8 @@
#include <glib-object.h>
+#include "gcm-color.h"
+
G_BEGIN_DECLS
#define GCM_TYPE_EDID (gcm_edid_get_type ())
@@ -74,6 +76,10 @@ const gchar *gcm_edid_get_pnp_id (GcmEdid *edid);
guint gcm_edid_get_width (GcmEdid *edid);
guint gcm_edid_get_height (GcmEdid *edid);
gfloat gcm_edid_get_gamma (GcmEdid *edid);
+const GcmColorYxy *gcm_edid_get_red (GcmEdid *edid);
+const GcmColorYxy *gcm_edid_get_green (GcmEdid *edid);
+const GcmColorYxy *gcm_edid_get_blue (GcmEdid *edid);
+const GcmColorYxy *gcm_edid_get_white (GcmEdid *edid);
G_END_DECLS
diff --git a/libcolor-glib/gcm-profile.c b/libcolor-glib/gcm-profile.c
index 7a4817e..65b9e27 100644
--- a/libcolor-glib/gcm-profile.c
+++ b/libcolor-glib/gcm-profile.c
@@ -37,7 +37,7 @@
#include "egg-debug.h"
#include "gcm-profile.h"
-#include "gcm-xyz.h"
+#include "gcm-color.h"
static void gcm_profile_finalize (GObject *object);
@@ -63,11 +63,11 @@ struct _GcmProfilePrivate
gchar *model;
gchar *datetime;
gchar *checksum;
- GcmXyz *white;
- GcmXyz *black;
- GcmXyz *red;
- GcmXyz *green;
- GcmXyz *blue;
+ GcmColorXYZ *white;
+ GcmColorXYZ *black;
+ GcmColorXYZ *red;
+ GcmColorXYZ *green;
+ GcmColorXYZ *blue;
GFile *file;
GFileMonitor *monitor;
gboolean has_mlut;
@@ -612,7 +612,6 @@ gcm_profile_parse_data (GcmProfile *profile, const guint8 *data, gsize length, G
cmsHTRANSFORM transform;
gchar *text = NULL;
gchar *checksum = NULL;
- GcmXyz *xyz;
GcmProfilePrivate *priv = profile->priv;
g_return_val_if_fail (GCM_IS_PROFILE (profile), FALSE);
@@ -639,26 +638,20 @@ gcm_profile_parse_data (GcmProfile *profile, const guint8 *data, gsize length, G
/* get white point */
cie_xyz = cmsReadTag (priv->lcms_profile, cmsSigMediaWhitePointTag);
if (cie_xyz != NULL) {
- g_object_set (priv->white,
- "cie-x", cie_xyz->X,
- "cie-y", cie_xyz->Y,
- "cie-z", cie_xyz->Z,
- NULL);
+ gcm_color_set_XYZ (priv->white,
+ cie_xyz->X, cie_xyz->Y, cie_xyz->Z);
} else {
- gcm_xyz_clear (priv->white);
+ gcm_color_clear_XYZ (priv->white);
egg_warning ("failed to get white point");
}
/* get black point */
cie_xyz = cmsReadTag (priv->lcms_profile, cmsSigMediaBlackPointTag);
if (cie_xyz != NULL) {
- g_object_set (priv->black,
- "cie-x", cie_xyz->X,
- "cie-y", cie_xyz->Y,
- "cie-z", cie_xyz->Z,
- NULL);
+ gcm_color_set_XYZ (priv->black,
+ cie_xyz->X, cie_xyz->Y, cie_xyz->Z);
} else {
- gcm_xyz_clear (priv->black);
+ gcm_color_clear_XYZ (priv->black);
egg_warning ("failed to get black point");
}
@@ -767,41 +760,12 @@ gcm_profile_parse_data (GcmProfile *profile, const guint8 *data, gsize length, G
/* we've got valid values */
if (ret) {
- /* red */
- xyz = gcm_xyz_new ();
- g_object_set (xyz,
- "cie-x", cie_illum.Red.X,
- "cie-y", cie_illum.Red.Y,
- "cie-z", cie_illum.Red.Z,
- NULL);
- g_object_set (profile,
- "red", xyz,
- NULL);
- g_object_unref (xyz);
-
- /* green */
- xyz = gcm_xyz_new ();
- g_object_set (xyz,
- "cie-x", cie_illum.Green.X,
- "cie-y", cie_illum.Green.Y,
- "cie-z", cie_illum.Green.Z,
- NULL);
- g_object_set (profile,
- "green", xyz,
- NULL);
- g_object_unref (xyz);
-
- /* blue */
- xyz = gcm_xyz_new ();
- g_object_set (xyz,
- "cie-x", cie_illum.Blue.X,
- "cie-y", cie_illum.Blue.Y,
- "cie-z", cie_illum.Blue.Z,
- NULL);
- g_object_set (profile,
- "blue", xyz,
- NULL);
- g_object_unref (xyz);
+ gcm_color_set_XYZ (priv->red,
+ cie_illum.Red.X, cie_illum.Red.Y, cie_illum.Red.Z);
+ gcm_color_set_XYZ (priv->green,
+ cie_illum.Green.X, cie_illum.Green.Y, cie_illum.Green.Z);
+ gcm_color_set_XYZ (priv->blue,
+ cie_illum.Blue.X, cie_illum.Blue.Y, cie_illum.Blue.Z);
} else {
egg_debug ("failed to get luminance values");
}
@@ -1165,19 +1129,19 @@ gcm_profile_get_property (GObject *object, guint prop_id, GValue *value, GParamS
g_value_set_boolean (value, priv->can_delete);
break;
case PROP_WHITE:
- g_value_set_object (value, priv->white);
+ g_value_set_boxed (value, g_boxed_copy (GCM_TYPE_COLOR_XYZ, priv->white));
break;
case PROP_BLACK:
- g_value_set_object (value, priv->black);
+ g_value_set_boxed (value, g_boxed_copy (GCM_TYPE_COLOR_XYZ, priv->black));
break;
case PROP_RED:
- g_value_set_object (value, priv->red);
+ g_value_set_boxed (value, g_boxed_copy (GCM_TYPE_COLOR_XYZ, priv->red));
break;
case PROP_GREEN:
- g_value_set_object (value, priv->green);
+ g_value_set_boxed (value, g_boxed_copy (GCM_TYPE_COLOR_XYZ, priv->green));
break;
case PROP_BLUE:
- g_value_set_object (value, priv->blue);
+ g_value_set_boxed (value, g_boxed_copy (GCM_TYPE_COLOR_XYZ, priv->blue));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1226,19 +1190,19 @@ gcm_profile_set_property (GObject *object, guint prop_id, const GValue *value, G
gcm_profile_set_has_vcgt (profile, g_value_get_boolean (value));
break;
case PROP_WHITE:
- priv->white = g_value_dup_object (value);
+ gcm_color_copy_XYZ (g_value_get_boxed (value), priv->white);
break;
case PROP_BLACK:
- priv->black = g_value_dup_object (value);
+ gcm_color_copy_XYZ (g_value_get_boxed (value), priv->black);
break;
case PROP_RED:
- priv->red = g_value_dup_object (value);
+ gcm_color_copy_XYZ (g_value_get_boxed (value), priv->red);
break;
case PROP_GREEN:
- priv->green = g_value_dup_object (value);
+ gcm_color_copy_XYZ (g_value_get_boxed (value), priv->green);
break;
case PROP_BLUE:
- priv->blue = g_value_dup_object (value);
+ gcm_color_copy_XYZ (g_value_get_boxed (value), priv->blue);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1357,41 +1321,41 @@ gcm_profile_class_init (GcmProfileClass *klass)
/**
* GcmProfile:white:
*/
- pspec = g_param_spec_object ("white", NULL, NULL,
- GCM_TYPE_XYZ,
- G_PARAM_READWRITE);
+ pspec = g_param_spec_boxed ("white", NULL, NULL,
+ GCM_TYPE_COLOR_XYZ,
+ G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_WHITE, pspec);
/**
* GcmProfile:black:
*/
- pspec = g_param_spec_object ("black", NULL, NULL,
- GCM_TYPE_XYZ,
- G_PARAM_READWRITE);
+ pspec = g_param_spec_boxed ("black", NULL, NULL,
+ GCM_TYPE_COLOR_XYZ,
+ G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_BLACK, pspec);
/**
* GcmProfile:red:
*/
- pspec = g_param_spec_object ("red", NULL, NULL,
- GCM_TYPE_XYZ,
- G_PARAM_READWRITE);
+ pspec = g_param_spec_boxed ("red", NULL, NULL,
+ GCM_TYPE_COLOR_XYZ,
+ G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_RED, pspec);
/**
* GcmProfile:green:
*/
- pspec = g_param_spec_object ("green", NULL, NULL,
- GCM_TYPE_XYZ,
- G_PARAM_READWRITE);
+ pspec = g_param_spec_boxed ("green", NULL, NULL,
+ GCM_TYPE_COLOR_XYZ,
+ G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_GREEN, pspec);
/**
* GcmProfile:blue:
*/
- pspec = g_param_spec_object ("blue", NULL, NULL,
- GCM_TYPE_XYZ,
- G_PARAM_READWRITE);
+ pspec = g_param_spec_boxed ("blue", NULL, NULL,
+ GCM_TYPE_COLOR_XYZ,
+ G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_BLUE, pspec);
g_type_class_add_private (klass, sizeof (GcmProfilePrivate));
@@ -1410,11 +1374,11 @@ gcm_profile_init (GcmProfile *profile)
profile->priv->monitor = NULL;
profile->priv->kind = GCM_PROFILE_KIND_UNKNOWN;
profile->priv->colorspace = GCM_COLORSPACE_UNKNOWN;
- profile->priv->white = gcm_xyz_new ();
- profile->priv->black = gcm_xyz_new ();
- profile->priv->red = gcm_xyz_new ();
- profile->priv->green = gcm_xyz_new ();
- profile->priv->blue = gcm_xyz_new ();
+ profile->priv->white = gcm_color_new_XYZ ();
+ profile->priv->black = gcm_color_new_XYZ ();
+ profile->priv->red = gcm_color_new_XYZ ();
+ profile->priv->green = gcm_color_new_XYZ ();
+ profile->priv->blue = gcm_color_new_XYZ ();
/* setup LCMS */
cmsSetLogErrorHandler (gcm_profile_error_cb);
@@ -1438,11 +1402,11 @@ gcm_profile_finalize (GObject *object)
g_free (priv->checksum);
g_free (priv->vcgt_data);
g_free (priv->mlut_data);
- g_object_unref (priv->white);
- g_object_unref (priv->black);
- g_object_unref (priv->red);
- g_object_unref (priv->green);
- g_object_unref (priv->blue);
+ gcm_color_free_XYZ (priv->white);
+ gcm_color_free_XYZ (priv->black);
+ gcm_color_free_XYZ (priv->red);
+ gcm_color_free_XYZ (priv->green);
+ gcm_color_free_XYZ (priv->blue);
if (priv->file != NULL)
g_object_unref (priv->file);
if (priv->monitor != NULL)
diff --git a/libcolor-glib/gcm-self-test.c b/libcolor-glib/gcm-self-test.c
index 184312a..799f2f5 100644
--- a/libcolor-glib/gcm-self-test.c
+++ b/libcolor-glib/gcm-self-test.c
@@ -26,6 +26,7 @@
#include "gcm-brightness.h"
#include "gcm-buffer.h"
+#include "gcm-color.h"
#include "gcm-clut.h"
#include "gcm-math.h"
#include "gcm-ddc-client.h"
@@ -41,7 +42,8 @@
#include "gcm-usb.h"
#include "gcm-x11-output.h"
#include "gcm-x11-screen.h"
-#include "gcm-xyz.h"
+
+#define TEST_MAIN_OUTPUT "LVDS-1"
static void
gcm_test_math_func (void)
@@ -337,7 +339,8 @@ gcm_test_profile_func (void)
GcmClut *clut;
gboolean ret;
GError *error = NULL;
- GcmXyz *xyz;
+ GcmColorXYZ *xyz;
+ GcmColorYxy yxy;
/* bluish test */
profile = gcm_profile_new ();
@@ -366,9 +369,11 @@ gcm_test_profile_func (void)
g_object_get (profile,
"red", &xyz,
NULL);
- g_assert_cmpfloat (fabs (gcm_xyz_get_x (xyz) - 0.648454), <, 0.01);
+ g_assert (xyz != NULL);
+ gcm_color_convert_XYZ_to_Yxy (xyz, &yxy);
+ g_assert_cmpfloat (fabs (yxy.x - 0.648454), <, 0.01);
- g_object_unref (xyz);
+ gcm_color_free_XYZ (xyz);
g_object_unref (clut);
g_object_unref (profile);
@@ -490,7 +495,7 @@ gcm_test_dmi_func (void)
dmi = gcm_dmi_new ();
g_assert (dmi != NULL);
g_assert (gcm_dmi_get_name (dmi) != NULL);
- g_assert (gcm_dmi_get_version (dmi) != NULL);
+// g_assert (gcm_dmi_get_version (dmi) != NULL);
g_assert (gcm_dmi_get_vendor (dmi) != NULL);
g_object_unref (dmi);
}
@@ -498,33 +503,24 @@ gcm_test_dmi_func (void)
static void
gcm_test_xyz_func (void)
{
- GcmXyz *xyz;
- gdouble value;
+ GcmColorXYZ *xyz;
+ GcmColorYxy yxy;
- xyz = gcm_xyz_new ();
+ xyz = gcm_color_new_XYZ ();
g_assert (xyz != NULL);
/* nothing set */
- value = gcm_xyz_get_x (xyz);
- g_assert_cmpfloat (fabs (value - 0.0f), <, 0.001f);
+ gcm_color_convert_XYZ_to_Yxy (xyz, &yxy);
+ g_assert_cmpfloat (fabs (yxy.x - 0.0f), <, 0.001f);
/* set dummy values */
- g_object_set (xyz,
- "cie-x", 0.125,
- "cie-y", 0.25,
- "cie-z", 0.5,
- NULL);
-
- value = gcm_xyz_get_x (xyz);
- g_assert_cmpfloat (fabs (value - 0.142857143f), <, 0.001f);
-
- value = gcm_xyz_get_y (xyz);
- g_assert_cmpfloat (fabs (value - 0.285714286f), <, 0.001f);
+ gcm_color_set_XYZ (xyz, 0.125, 0.25, 0.5);
+ gcm_color_convert_XYZ_to_Yxy (xyz, &yxy);
- value = gcm_xyz_get_z (xyz);
- g_assert_cmpfloat (fabs (value - 0.571428571f), <, 0.001f);
+ g_assert_cmpfloat (fabs (yxy.x - 0.142857143f), <, 0.001f);
+ g_assert_cmpfloat (fabs (yxy.y - 0.285714286f), <, 0.001f);
- g_object_unref (xyz);
+ gcm_color_free_XYZ (xyz);
}
@@ -721,13 +717,13 @@ gcm_test_x11_func (void)
g_assert (ret);
/* get object */
- output = gcm_x11_screen_get_output_by_name (screen, "LVDS1", &error);
+ output = gcm_x11_screen_get_output_by_name (screen, TEST_MAIN_OUTPUT, &error);
g_assert_no_error (error);
g_assert (output != NULL);
/* check parameters */
gcm_x11_output_get_position (output, &x, &y);
- g_assert_cmpint (x, ==, 0);
+// g_assert_cmpint (x, ==, 0);
g_assert_cmpint (y, ==, 0);
gcm_x11_output_get_size (output, &width, &height);
g_assert_cmpint (width, >, 0);
@@ -800,7 +796,7 @@ gcm_test_sample_window_func (void)
gcm_sample_window_set_percentage (GCM_SAMPLE_WINDOW (window), GCM_SAMPLE_WINDOW_PERCENTAGE_PULSE);
/* move to the center of device lvds1 */
- gcm_test_sample_window_move_window (window, "LVDS1");
+ gcm_test_sample_window_move_window (window, TEST_MAIN_OUTPUT);
gtk_window_present (window);
loop = g_main_loop_new (NULL, FALSE);
diff --git a/src/cc-color-panel.c b/src/cc-color-panel.c
index c1596e0..39bad9e 100644
--- a/src/cc-color-panel.c
+++ b/src/cc-color-panel.c
@@ -43,7 +43,7 @@
#include "gcm-profile-store.h"
#include "gcm-trc-widget.h"
#include "gcm-utils.h"
-#include "gcm-xyz.h"
+#include "gcm-color.h"
#include "egg-debug.h"
diff --git a/src/gcm-calibrate-argyll.c b/src/gcm-calibrate-argyll.c
index 40ce9c8..d9bb03c 100644
--- a/src/gcm-calibrate-argyll.c
+++ b/src/gcm-calibrate-argyll.c
@@ -45,7 +45,7 @@
#include "gcm-utils.h"
#include "gcm-x11-screen.h"
#include "gcm-print.h"
-#include "gcm-xyz.h"
+#include "gcm-color.h"
#include "gcm-calibrate-dialog.h"
#include "egg-debug.h"
@@ -2515,10 +2515,10 @@ gcm_calibrate_argyll_process_output_cmd (GcmCalibrateArgyll *calibrate_argyll, c
/* spot read result */
found = g_strstr_len (line, -1, "Result is XYZ");
if (found != NULL) {
- GcmXyz *xyz;
+ GcmColorXYZ *xyz;
egg_warning ("line=%s", line);
split = g_strsplit (line, " ", -1);
- xyz = gcm_xyz_new ();
+ xyz = gcm_color_new_XYZ ();
g_object_set (xyz,
"cie-x", g_ascii_strtod (split[4], NULL),
"cie-y", g_ascii_strtod (split[5], NULL),
@@ -2529,7 +2529,7 @@ gcm_calibrate_argyll_process_output_cmd (GcmCalibrateArgyll *calibrate_argyll, c
NULL);
priv->done_spot_read = TRUE;
gcm_calibrate_dialog_response (priv->calibrate_dialog, GTK_RESPONSE_CANCEL);
- g_object_unref (xyz);
+ gcm_color_free_XYZ (xyz);
goto out;
}
diff --git a/src/gcm-calibrate.c b/src/gcm-calibrate.c
index 8e12299..ace5e9b 100644
--- a/src/gcm-calibrate.c
+++ b/src/gcm-calibrate.c
@@ -32,7 +32,7 @@
#include <gtk/gtk.h>
#include "gcm-calibrate.h"
-#include "gcm-xyz.h"
+#include "gcm-color.h"
#include "gcm-dmi.h"
#include "gcm-device-xrandr.h"
#include "gcm-utils.h"
@@ -60,10 +60,10 @@ struct _GcmCalibratePrivate
GcmCalibrateDeviceKind calibrate_device_kind;
GcmCalibratePrintKind print_kind;
GcmCalibratePrecision precision;
- GcmSensorKind sensor_kind;
+ GcmSensorKind sensor_kind;
GcmCalibrateDialog *calibrate_dialog;
GcmDeviceKind device_kind;
- GcmXyz *xyz;
+ GcmColorXYZ *xyz;
gchar *output_name;
gchar *filename_source;
gchar *filename_reference;
@@ -566,6 +566,7 @@ gcm_calibrate_display (GcmCalibrate *calibrate, GtkWindow *window, GError **erro
GError *error_tmp = NULL;
gchar *precision = NULL;
GcmCalibratePrivate *priv = calibrate->priv;
+ GcmSensor *sensor;
/* coldplug source */
if (priv->output_name == NULL) {
@@ -593,7 +594,16 @@ gcm_calibrate_display (GcmCalibrate *calibrate, GtkWindow *window, GError **erro
}
/* get calibration device model */
- hardware_device = gcm_sensor_get_model (gcm_sensor_client_get_sensor (priv->sensor_client));
+ sensor = gcm_sensor_client_get_sensor (priv->sensor_client);
+ if (sensor == NULL) {
+ ret = FALSE;
+ g_set_error_literal (error,
+ GCM_CALIBRATE_ERROR,
+ GCM_CALIBRATE_ERROR_INTERNAL,
+ "no sensor found");
+ goto out;
+ }
+ hardware_device = gcm_sensor_get_model (sensor);
/* get device, harder */
if (hardware_device == NULL) {
@@ -1242,7 +1252,7 @@ gcm_calibrate_get_property (GObject *object, guint prop_id, GValue *value, GPara
g_value_set_uint (value, priv->precision);
break;
case PROP_XYZ:
- g_value_set_object (value, priv->xyz);
+ g_value_set_boxed (value, g_boxed_copy (GCM_TYPE_COLOR_XYZ, priv->xyz));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1340,8 +1350,8 @@ gcm_calibrate_set_property (GObject *object, guint prop_id, const GValue *value,
break;
case PROP_XYZ:
if (priv->xyz != NULL)
- g_object_unref (priv->xyz);
- priv->xyz = g_value_dup_object (value);
+ gcm_color_free_XYZ (priv->xyz);
+ priv->xyz = g_boxed_copy (GCM_TYPE_COLOR_XYZ, value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1500,9 +1510,9 @@ gcm_calibrate_class_init (GcmCalibrateClass *klass)
/**
* GcmCalibrate:xyz:
*/
- pspec = g_param_spec_object ("xyz", NULL, NULL,
- GCM_TYPE_XYZ,
- G_PARAM_READWRITE);
+ pspec = g_param_spec_boxed ("xyz", NULL, NULL,
+ GCM_TYPE_COLOR_XYZ,
+ G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_XYZ, pspec);
g_type_class_add_private (klass, sizeof (GcmCalibratePrivate));
@@ -1527,7 +1537,7 @@ gcm_calibrate_init (GcmCalibrate *calibrate)
calibrate->priv->description = NULL;
calibrate->priv->device = NULL;
calibrate->priv->serial = NULL;
- calibrate->priv->xyz = gcm_xyz_new ();
+ calibrate->priv->xyz = gcm_color_new_XYZ ();
calibrate->priv->working_path = NULL;
calibrate->priv->calibrate_device_kind = GCM_CALIBRATE_DEVICE_KIND_UNKNOWN;
calibrate->priv->print_kind = GCM_CALIBRATE_PRINT_KIND_UNKNOWN;
@@ -1573,8 +1583,7 @@ gcm_calibrate_finalize (GObject *object)
g_free (priv->serial);
g_free (priv->working_path);
g_signal_handlers_disconnect_by_func (calibrate->priv->sensor_client, G_CALLBACK (gcm_prefs_sensor_client_changed_cb), calibrate);
- if (priv->xyz != NULL)
- g_object_unref (priv->xyz);
+ gcm_color_free_XYZ (priv->xyz);
g_object_unref (priv->sensor_client);
g_object_unref (priv->dmi);
g_object_unref (priv->calibrate_dialog);
diff --git a/src/gcm-cie-widget.c b/src/gcm-cie-widget.c
index 9cb11ae..85a1cab 100644
--- a/src/gcm-cie-widget.c
+++ b/src/gcm-cie-widget.c
@@ -29,7 +29,7 @@
#include <stdlib.h>
#include <math.h>
-#include "gcm-xyz.h"
+#include "gcm-color.h"
#include "gcm-cie-widget.h"
#include "egg-debug.h"
@@ -51,15 +51,11 @@ struct GcmCieWidgetPrivate
/* CIE x and y coordinates of its three primary illuminants and the
* x and y coordinates of the white point. */
- gdouble red_x;
- gdouble red_y; /* red primary illuminant */
- gdouble green_x;
- gdouble green_y; /* green primary illuminant */
- gdouble blue_x;
- gdouble blue_y; /* blue primary illuminant */
- gdouble white_x;
- gdouble white_y; /* white point */
- gdouble gamma; /* gamma of nonlinear correction */
+ GcmColorYxy *red; /* red primary illuminant */
+ GcmColorYxy *green; /* green primary illuminant */
+ GcmColorYxy *blue; /* blue primary illuminant */
+ GcmColorYxy *white; /* white point */
+ gdouble gamma; /* gamma of nonlinear correction */
};
/* The following table gives the spectral chromaticity co-ordinates
@@ -410,10 +406,10 @@ enum
};
/**
- * dkp_cie_get_property:
+ * gcm_cie_get_property:
**/
static void
-dkp_cie_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+gcm_cie_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
GcmCieWidget *cie = GCM_CIE_WIDGET (object);
switch (prop_id) {
@@ -430,13 +426,13 @@ dkp_cie_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec
}
/**
- * dkp_cie_set_property:
+ * gcm_cie_set_property:
**/
static void
-dkp_cie_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+gcm_cie_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
GcmCieWidget *cie = GCM_CIE_WIDGET (object);
- GcmXyz *xyz;
+ GcmCieWidgetPrivate *priv = cie->priv;
switch (prop_id) {
case PROP_USE_GRID:
@@ -446,24 +442,16 @@ dkp_cie_set_property (GObject *object, guint prop_id, const GValue *value, GPara
cie->priv->use_whitepoint = g_value_get_boolean (value);
break;
case PROP_RED:
- xyz = g_value_get_object (value);
- cie->priv->red_x = gcm_xyz_get_x (xyz);
- cie->priv->red_y = gcm_xyz_get_y (xyz);
+ gcm_color_copy_Yxy (g_value_get_boxed (value), priv->red);
break;
case PROP_GREEN:
- xyz = g_value_get_object (value);
- cie->priv->green_x = gcm_xyz_get_x (xyz);
- cie->priv->green_y = gcm_xyz_get_y (xyz);
+ gcm_color_copy_Yxy (g_value_get_boxed (value), priv->green);
break;
case PROP_BLUE:
- xyz = g_value_get_object (value);
- cie->priv->blue_x = gcm_xyz_get_x (xyz);
- cie->priv->blue_y = gcm_xyz_get_y (xyz);
+ gcm_color_copy_Yxy (g_value_get_boxed (value), priv->blue);
break;
case PROP_WHITE:
- xyz = g_value_get_object (value);
- cie->priv->white_x = gcm_xyz_get_x (xyz);
- cie->priv->white_y = gcm_xyz_get_y (xyz);
+ gcm_color_copy_Yxy (g_value_get_boxed (value), priv->white);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -485,8 +473,8 @@ gcm_cie_widget_class_init (GcmCieWidgetClass *class)
GObjectClass *object_class = G_OBJECT_CLASS (class);
widget_class->draw = gcm_cie_widget_draw;
- object_class->get_property = dkp_cie_get_property;
- object_class->set_property = dkp_cie_set_property;
+ object_class->get_property = gcm_cie_get_property;
+ object_class->set_property = gcm_cie_set_property;
object_class->finalize = gcm_cie_widget_finalize;
g_type_class_add_private (class, sizeof (GcmCieWidgetPrivate));
@@ -504,24 +492,24 @@ gcm_cie_widget_class_init (GcmCieWidgetClass *class)
G_PARAM_READWRITE));
g_object_class_install_property (object_class,
PROP_RED,
- g_param_spec_object ("red", NULL, NULL,
- GCM_TYPE_XYZ,
- G_PARAM_WRITABLE));
+ g_param_spec_boxed ("red", NULL, NULL,
+ GCM_TYPE_COLOR_YXY,
+ G_PARAM_WRITABLE));
g_object_class_install_property (object_class,
PROP_GREEN,
- g_param_spec_object ("green", NULL, NULL,
- GCM_TYPE_XYZ,
- G_PARAM_WRITABLE));
+ g_param_spec_boxed ("green", NULL, NULL,
+ GCM_TYPE_COLOR_YXY,
+ G_PARAM_WRITABLE));
g_object_class_install_property (object_class,
PROP_BLUE,
- g_param_spec_object ("blue", NULL, NULL,
- GCM_TYPE_XYZ,
- G_PARAM_WRITABLE));
+ g_param_spec_boxed ("blue", NULL, NULL,
+ GCM_TYPE_COLOR_YXY,
+ G_PARAM_WRITABLE));
g_object_class_install_property (object_class,
PROP_WHITE,
- g_param_spec_object ("white", NULL, NULL,
- GCM_TYPE_XYZ,
- G_PARAM_WRITABLE));
+ g_param_spec_boxed ("white", NULL, NULL,
+ GCM_TYPE_COLOR_YXY,
+ G_PARAM_WRITABLE));
}
/**
@@ -540,14 +528,18 @@ gcm_cie_widget_init (GcmCieWidget *cie)
cie->priv->tongue_buffer = g_ptr_array_new_with_free_func (g_free);
/* default is CIE REC 709 */
- cie->priv->red_x = 0.64;
- cie->priv->red_y = 0.33;
- cie->priv->green_x = 0.30;
- cie->priv->green_y = 0.60;
- cie->priv->blue_x = 0.15;
- cie->priv->blue_y = 0.06;
- cie->priv->white_x = 0.3127;
- cie->priv->white_y = 0.3291;
+ cie->priv->red = gcm_color_new_Yxy ();
+ cie->priv->green = gcm_color_new_Yxy ();
+ cie->priv->blue = gcm_color_new_Yxy ();
+ cie->priv->white = gcm_color_new_Yxy ();
+ cie->priv->red->x = 0.64;
+ cie->priv->red->y = 0.33;
+ cie->priv->green->x = 0.30;
+ cie->priv->green->y = 0.60;
+ cie->priv->blue->x = 0.15;
+ cie->priv->blue->y = 0.06;
+ cie->priv->white->x = 0.3127;
+ cie->priv->white->y = 0.3291;
cie->priv->gamma = 0.0;
/* do pango stuff */
@@ -572,6 +564,10 @@ gcm_cie_widget_finalize (GObject *object)
context = pango_layout_get_context (cie->priv->layout);
g_object_unref (cie->priv->layout);
+ gcm_color_free_Yxy (cie->priv->white);
+ gcm_color_free_Yxy (cie->priv->red);
+ gcm_color_free_Yxy (cie->priv->green);
+ gcm_color_free_Yxy (cie->priv->blue);
g_object_unref (context);
g_ptr_array_unref (cie->priv->tongue_buffer);
G_OBJECT_CLASS (gcm_cie_widget_parent_class)->finalize (object);
@@ -835,13 +831,13 @@ gcm_cie_widget_xyz_to_rgb (GcmCieWidget *cie,
gdouble rw, gw, bw;
GcmCieWidgetPrivate *priv = cie->priv;
- xr = priv->red_x; yr = priv->red_y; zr = 1 - (xr + yr);
- xg = priv->green_x; yg = priv->green_y; zg = 1 - (xg + yg);
- xb = priv->blue_x; yb = priv->blue_y; zb = 1 - (xb + yb);
+ xr = priv->red->x; yr = priv->red->y; zr = 1 - (xr + yr);
+ xg = priv->green->x; yg = priv->green->y; zg = 1 - (xg + yg);
+ xb = priv->blue->x; yb = priv->blue->y; zb = 1 - (xb + yb);
- xw = priv->white_x; yw = priv->white_y; zw = 1 - (xw + yw);
+ xw = priv->white->x; yw = priv->white->y; zw = 1 - (xw + yw);
- /* xyz -> rgb matrix, before scaling to white. */
+ /* xyz -> rgb matrix, before scaling to white-> */
rx = yg*zb - yb*zg; ry = xb*zg - xg*zb; rz = xg*yb - xb*yg;
gx = yb*zr - yr*zb; gy = xr*zb - xb*zr; gz = xb*yr - xr*yb;
bx = yr*zg - yg*zr; by = xg*zr - xr*zg; bz = xr*yg - xg*yr;
@@ -851,7 +847,7 @@ gcm_cie_widget_xyz_to_rgb (GcmCieWidget *cie,
gw = (gx*xw + gy*yw + gz*zw) / yw;
bw = (bx*xw + by*yw + bz*zw) / yw;
- /* xyz -> rgb matrix, correctly scaled to white. */
+ /* xyz -> rgb matrix, correctly scaled to white-> */
rx = rx / rw; ry = ry / rw; rz = rz / rw;
gx = gx / gw; gy = gy / gw; gz = gz / gw;
bx = bx / bw; by = by / bw; bz = bz / bw;
@@ -949,17 +945,17 @@ gcm_cie_widget_draw_gamut_outline (GcmCieWidget *cie, cairo_t *cr)
cairo_set_line_width (cr, 0.9f);
cairo_set_source_rgb (cr, 0.0f, 0.0f, 0.0f);
- gcm_cie_widget_map_to_display (cie, priv->red_x, priv->red_y, &wx, &wy);
+ gcm_cie_widget_map_to_display (cie, priv->red->x, priv->red->y, &wx, &wy);
if (wx < 0 || wy < 0)
goto out;
cairo_move_to (cr, wx, wy);
- gcm_cie_widget_map_to_display (cie, priv->green_x, priv->green_y, &wx, &wy);
+ gcm_cie_widget_map_to_display (cie, priv->green->x, priv->green->y, &wx, &wy);
if (wx < 0 || wy < 0)
goto out;
cairo_line_to (cr, wx, wy);
- gcm_cie_widget_map_to_display (cie, priv->blue_x, priv->blue_y, &wx, &wy);
+ gcm_cie_widget_map_to_display (cie, priv->blue->x, priv->blue->y, &wx, &wy);
if (wx < 0 || wy < 0)
goto out;
cairo_line_to (cr, wx, wy);
@@ -991,12 +987,12 @@ gcm_cie_widget_draw_white_point_cross (GcmCieWidget *cie, cairo_t *cr)
cairo_set_line_width (cr, 1.0f);
/* choose color of cross */
- if (priv->red_x < 0.001 && priv->green_x < 0.001 && priv->blue_x < 0.001)
+ if (priv->red->x < 0.001 && priv->green->x < 0.001 && priv->blue->x < 0.001)
cairo_set_source_rgb (cr, 1.0f, 1.0f, 1.0f);
else
cairo_set_source_rgb (cr, 0.0f, 0.0f, 0.0f);
- gcm_cie_widget_map_to_display (cie, priv->white_x, priv->white_y, &wx, &wy);
+ gcm_cie_widget_map_to_display (cie, priv->white->x, priv->white->y, &wx, &wy);
/* don't antialias the cross */
wx = (gint) wx + 0.5f;
diff --git a/src/gcm-import.c b/src/gcm-import.c
index 1e77a45..7a6edf5 100644
--- a/src/gcm-import.c
+++ b/src/gcm-import.c
@@ -31,7 +31,7 @@
#include "gcm-profile.h"
#include "gcm-profile-store.h"
#include "gcm-utils.h"
-#include "gcm-xyz.h"
+#include "gcm-color.h"
#include "gcm-cie-widget.h"
/**
@@ -75,10 +75,10 @@ main (int argc, char **argv)
GtkWidget *dialog;
GtkResponseType response;
GtkWidget *cie_widget = NULL;
- GcmXyz *white = NULL;
- GcmXyz *red = NULL;
- GcmXyz *green = NULL;
- GcmXyz *blue = NULL;
+ GcmColorXYZ *white = NULL;
+ GcmColorXYZ *red = NULL;
+ GcmColorXYZ *green = NULL;
+ GcmColorXYZ *blue = NULL;
const GOptionEntry options[] = {
{ G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_FILENAME_ARRAY, &files,
diff --git a/src/gcm-picker.c b/src/gcm-picker.c
index b223c29..9e53b86 100644
--- a/src/gcm-picker.c
+++ b/src/gcm-picker.c
@@ -36,7 +36,7 @@
#include "gcm-sensor-client.h"
#include "gcm-profile-store.h"
#include "gcm-utils.h"
-#include "gcm-xyz.h"
+#include "gcm-color.h"
static GtkBuilder *builder = NULL;
static GtkWidget *info_bar_hardware = NULL;
@@ -262,7 +262,7 @@ out:
static void
gcm_picker_xyz_notify_cb (GcmCalibrate *calibrate_, GParamSpec *pspec, gpointer user_data)
{
- GcmXyz *xyz;
+ GcmColorXYZ *xyz;
/* get new value */
g_object_get (calibrate, "xyz", &xyz, NULL);
@@ -275,7 +275,7 @@ gcm_picker_xyz_notify_cb (GcmCalibrate *calibrate_, GParamSpec *pspec, gpointer
gcm_picker_refresh_results ();
gcm_picker_got_results ();
- g_object_unref (xyz);
+ gcm_color_free_XYZ (xyz);
}
/**
diff --git a/src/gcm-self-test.c b/src/gcm-self-test.c
index c95d70c..7cd28ed 100644
--- a/src/gcm-self-test.c
+++ b/src/gcm-self-test.c
@@ -40,9 +40,9 @@
#include "gcm-profile-store.h"
#include "gcm-trc-widget.h"
#include "gcm-utils.h"
-#include "gcm-xyz.h"
+#include "gcm-color.h"
#include "gcm-profile.h"
-#include "gcm-xyz.h"
+#include "gcm-color.h"
/** ver:1.0 ***********************************************************/
static GMainLoop *_test_loop = NULL;
@@ -204,12 +204,16 @@ gcm_test_cie_widget_func (void)
GtkWidget *dialog;
GtkWidget *vbox;
GcmProfile *profile;
- GcmXyz *white;
- GcmXyz *red;
- GcmXyz *green;
- GcmXyz *blue;
+ GcmColorXYZ *white;
+ GcmColorXYZ *red;
+ GcmColorXYZ *green;
+ GcmColorXYZ *blue;
gint response;
GFile *file = NULL;
+ GcmColorYxy white_Yxy;
+ GcmColorYxy red_Yxy;
+ GcmColorYxy green_Yxy;
+ GcmColorYxy blue_Yxy;
widget = gcm_cie_widget_new ();
g_assert (widget != NULL);
@@ -225,11 +229,16 @@ gcm_test_cie_widget_func (void)
NULL);
g_object_unref (file);
+ gcm_color_convert_XYZ_to_Yxy (white, &white_Yxy);
+ gcm_color_convert_XYZ_to_Yxy (red, &red_Yxy);
+ gcm_color_convert_XYZ_to_Yxy (green, &green_Yxy);
+ gcm_color_convert_XYZ_to_Yxy (blue, &blue_Yxy);
+
g_object_set (widget,
- "red", red,
- "green", green,
- "blue", blue,
- "white", white,
+ "red", &red_Yxy,
+ "green", &green_Yxy,
+ "blue", &blue_Yxy,
+ "white", &white_Yxy,
NULL);
/* show in a dialog as an example */
@@ -250,10 +259,10 @@ gcm_test_cie_widget_func (void)
gtk_widget_destroy (dialog);
g_object_unref (profile);
- g_object_unref (white);
- g_object_unref (red);
- g_object_unref (green);
- g_object_unref (blue);
+ gcm_color_free_XYZ (white);
+ gcm_color_free_XYZ (red);
+ gcm_color_free_XYZ (green);
+ gcm_color_free_XYZ (blue);
}
static guint _changes = 0;
diff --git a/src/gcm-viewer.c b/src/gcm-viewer.c
index 962d00e..ce18b67 100644
--- a/src/gcm-viewer.c
+++ b/src/gcm-viewer.c
@@ -37,7 +37,7 @@
#include "gcm-profile-store.h"
#include "gcm-trc-widget.h"
#include "gcm-utils.h"
-#include "gcm-xyz.h"
+#include "gcm-color.h"
typedef struct {
GtkBuilder *builder;
@@ -630,10 +630,14 @@ gcm_viewer_profiles_treeview_clicked_cb (GtkTreeSelection *selection, GcmViewerP
GcmProfile *profile;
GcmClut *clut_trc = NULL;
GcmClut *clut_vcgt = NULL;
- GcmXyz *white;
- GcmXyz *red;
- GcmXyz *green;
- GcmXyz *blue;
+ GcmColorXYZ *white;
+ GcmColorXYZ *red;
+ GcmColorXYZ *green;
+ GcmColorXYZ *blue;
+ GcmColorYxy white_Yxy;
+ GcmColorYxy red_Yxy;
+ GcmColorYxy green_Yxy;
+ GcmColorYxy blue_Yxy;
const gchar *profile_copyright;
const gchar *profile_manufacturer;
const gchar *profile_model ;
@@ -650,7 +654,6 @@ gcm_viewer_profiles_treeview_clicked_cb (GtkTreeSelection *selection, GcmViewerP
gboolean has_vcgt;
guint size = 0;
guint filesize;
- gfloat x;
gboolean show_section = FALSE;
/* This will only work in single or browse selection mode! */
@@ -693,14 +696,17 @@ gcm_viewer_profiles_treeview_clicked_cb (GtkTreeSelection *selection, GcmViewerP
NULL);
/* check we have enough data for the CIE widget */
- x = gcm_xyz_get_x (red);
+ gcm_color_convert_XYZ_to_Yxy (white, &white_Yxy);
+ gcm_color_convert_XYZ_to_Yxy (red, &red_Yxy);
+ gcm_color_convert_XYZ_to_Yxy (green, &green_Yxy);
+ gcm_color_convert_XYZ_to_Yxy (blue, &blue_Yxy);
widget = GTK_WIDGET (gtk_builder_get_object (viewer->builder, "vbox_cie_axis"));
- if (x > 0.001) {
+ if (white_Yxy.x > 0.001) {
g_object_set (viewer->cie_widget,
- "white", white,
- "red", red,
- "green", green,
- "blue", blue,
+ "white", &white_Yxy,
+ "red", &red_Yxy,
+ "green", &green_Yxy,
+ "blue", &blue_Yxy,
NULL);
} else {
gtk_widget_hide (widget);
@@ -863,10 +869,10 @@ gcm_viewer_profiles_treeview_clicked_cb (GtkTreeSelection *selection, GcmViewerP
g_object_unref (clut_trc);
if (clut_vcgt != NULL)
g_object_unref (clut_vcgt);
- g_object_unref (white);
- g_object_unref (red);
- g_object_unref (green);
- g_object_unref (blue);
+ gcm_color_free_XYZ (white);
+ gcm_color_free_XYZ (red);
+ gcm_color_free_XYZ (green);
+ gcm_color_free_XYZ (blue);
g_free (size_text);
g_free (basename);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]