diff --git a/cogl-color.h b/cogl-color.h index 73de891de..6ade2594f 100644 --- a/cogl-color.h +++ b/cogl-color.h @@ -240,6 +240,22 @@ float cogl_color_get_alpha (const CoglColor *color); */ void cogl_color_premultiply (CoglColor *color); +/** + * cogl_color_equal: + * @v1: a #CoglColor + * @v2: a #CoglColor + * + * Compares two #CoglColors and checks if they are the same. + * + * This function can be passed to g_hash_table_new() as the @key_equal_func + * parameter, when using #CoglColors as keys in a #GHashTable. + * + * Return value: %TRUE if the two colors are the same. + * + * Since: 1.0 + */ +gboolean cogl_color_equal (gconstpointer v1, gconstpointer v2); + G_END_DECLS #endif /* __COGL_COLOR_H__ */ diff --git a/common/cogl-color.c b/common/cogl-color.c index df338fcc4..25a1bdaf2 100644 --- a/common/cogl-color.c +++ b/common/cogl-color.c @@ -25,6 +25,8 @@ #include "config.h" #endif +#include + #include "cogl.h" #include "cogl-color.h" #include "cogl-fixed.h" @@ -184,3 +186,16 @@ cogl_set_source_color4f (float red, cogl_color_set_from_4f (&c, red, green, blue, alpha); cogl_set_source_color (&c); } + +gboolean +cogl_color_equal (gconstpointer v1, gconstpointer v2) +{ + const guint32 *c1 = v1, *c2 = v2; + + g_return_val_if_fail (v1 != NULL, FALSE); + g_return_val_if_fail (v2 != NULL, FALSE); + + /* XXX: We don't compare the padding */ + return *c1 == *c2 ? TRUE : FALSE; +} +