cogl: Copy ColorParamSpec from clutter
Follow up of previous commit Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3544>
This commit is contained in:
parent
ac3aa35489
commit
28f702ce1a
@ -551,3 +551,137 @@ cogl_color_init_from_hsl (CoglColor *color,
|
|||||||
|
|
||||||
cogl_color_init_from_4f (color, clr[0], clr[1], clr[2], 1.0f);
|
cogl_color_init_from_4f (color, clr[0], clr[1], clr[2], 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cogl_value_set_color:
|
||||||
|
* @value: a #GValue initialized to #COGL_TYPE_COLOR
|
||||||
|
* @color: the color to set
|
||||||
|
*
|
||||||
|
* Sets @value to @color.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
cogl_value_set_color (GValue *value,
|
||||||
|
const CoglColor *color)
|
||||||
|
{
|
||||||
|
g_return_if_fail (COGL_VALUE_HOLDS_COLOR (value));
|
||||||
|
|
||||||
|
g_value_set_boxed (value, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cogl_value_get_color:
|
||||||
|
* @value: a #GValue initialized to #COGL_TYPE_COLOR
|
||||||
|
*
|
||||||
|
* Gets the #CoglColor contained in @value.
|
||||||
|
*
|
||||||
|
* Return value: (transfer none): the color inside the passed #GValue
|
||||||
|
*/
|
||||||
|
const CoglColor *
|
||||||
|
cogl_value_get_color (const GValue *value)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (COGL_VALUE_HOLDS_COLOR (value), NULL);
|
||||||
|
|
||||||
|
return g_value_get_boxed (value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
param_color_init (GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
CoglParamSpecColor *cspec = COGL_PARAM_SPEC_COLOR (pspec);
|
||||||
|
|
||||||
|
cspec->default_value = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
param_color_finalize (GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
CoglParamSpecColor *cspec = COGL_PARAM_SPEC_COLOR (pspec);
|
||||||
|
|
||||||
|
cogl_color_free (cspec->default_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
param_color_set_default (GParamSpec *pspec,
|
||||||
|
GValue *value)
|
||||||
|
{
|
||||||
|
const CoglColor *default_value =
|
||||||
|
COGL_PARAM_SPEC_COLOR (pspec)->default_value;
|
||||||
|
cogl_value_set_color (value, default_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gint
|
||||||
|
param_color_values_cmp (GParamSpec *pspec,
|
||||||
|
const GValue *value1,
|
||||||
|
const GValue *value2)
|
||||||
|
{
|
||||||
|
const CoglColor *color1 = g_value_get_boxed (value1);
|
||||||
|
const CoglColor *color2 = g_value_get_boxed (value2);
|
||||||
|
int pixel1, pixel2;
|
||||||
|
|
||||||
|
if (color1 == NULL)
|
||||||
|
return color2 == NULL ? 0 : -1;
|
||||||
|
|
||||||
|
pixel1 = cogl_color_hash (color1);
|
||||||
|
pixel2 = cogl_color_hash (color2);
|
||||||
|
|
||||||
|
if (pixel1 < pixel2)
|
||||||
|
return -1;
|
||||||
|
else if (pixel1 == pixel2)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
GType
|
||||||
|
cogl_param_color_get_type (void)
|
||||||
|
{
|
||||||
|
static GType pspec_type = 0;
|
||||||
|
|
||||||
|
if (G_UNLIKELY (pspec_type == 0))
|
||||||
|
{
|
||||||
|
const GParamSpecTypeInfo pspec_info = {
|
||||||
|
sizeof (CoglParamSpecColor),
|
||||||
|
16,
|
||||||
|
param_color_init,
|
||||||
|
COGL_TYPE_COLOR,
|
||||||
|
param_color_finalize,
|
||||||
|
param_color_set_default,
|
||||||
|
NULL,
|
||||||
|
param_color_values_cmp,
|
||||||
|
};
|
||||||
|
|
||||||
|
pspec_type = g_param_type_register_static (g_intern_static_string ("CoglParamSpecColor"),
|
||||||
|
&pspec_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pspec_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cogl_param_spec_color: (skip)
|
||||||
|
* @name: name of the property
|
||||||
|
* @nick: short name
|
||||||
|
* @blurb: description (can be translatable)
|
||||||
|
* @default_value: default value
|
||||||
|
* @flags: flags for the param spec
|
||||||
|
*
|
||||||
|
* Creates a #GParamSpec for properties using #CoglColor.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): the newly created #GParamSpec
|
||||||
|
*/
|
||||||
|
GParamSpec *
|
||||||
|
cogl_param_spec_color (const gchar *name,
|
||||||
|
const gchar *nick,
|
||||||
|
const gchar *blurb,
|
||||||
|
const CoglColor *default_value,
|
||||||
|
GParamFlags flags)
|
||||||
|
{
|
||||||
|
CoglParamSpecColor *cspec;
|
||||||
|
|
||||||
|
cspec = g_param_spec_internal (COGL_TYPE_PARAM_COLOR,
|
||||||
|
name, nick, blurb, flags);
|
||||||
|
|
||||||
|
cspec->default_value = cogl_color_copy (default_value);
|
||||||
|
|
||||||
|
return G_PARAM_SPEC (cspec);
|
||||||
|
}
|
||||||
|
@ -298,4 +298,65 @@ cogl_color_init_from_hsl (CoglColor *color,
|
|||||||
float saturation,
|
float saturation,
|
||||||
float luminance);
|
float luminance);
|
||||||
|
|
||||||
|
|
||||||
|
#define COGL_TYPE_PARAM_COLOR (cogl_param_color_get_type ())
|
||||||
|
#define COGL_PARAM_SPEC_COLOR(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), COGL_TYPE_PARAM_COLOR, CoglParamSpecColor))
|
||||||
|
#define COGL_IS_PARAM_SPEC_COLOR(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), COGL_TYPE_PARAM_COLOR))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* COGL_VALUE_HOLDS_COLOR:
|
||||||
|
* @x: a #GValue
|
||||||
|
*
|
||||||
|
* Evaluates to %TRUE if @x holds a `CoglColor`.
|
||||||
|
*/
|
||||||
|
#define COGL_VALUE_HOLDS_COLOR(x) (G_VALUE_HOLDS ((x), COGL_TYPE_COLOR))
|
||||||
|
|
||||||
|
typedef struct _CoglParamSpecColor CoglParamSpecColor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CoglParamSpecColor: (skip)
|
||||||
|
* @default_value: default color value
|
||||||
|
*
|
||||||
|
* A #GParamSpec subclass for defining properties holding
|
||||||
|
* a #CoglColor.
|
||||||
|
*/
|
||||||
|
struct _CoglParamSpecColor
|
||||||
|
{
|
||||||
|
/*< private >*/
|
||||||
|
GParamSpec parent_instance;
|
||||||
|
|
||||||
|
/*< public >*/
|
||||||
|
CoglColor *default_value;
|
||||||
|
};
|
||||||
|
|
||||||
|
COGL_EXPORT
|
||||||
|
void cogl_value_set_color (GValue *value,
|
||||||
|
const CoglColor *color);
|
||||||
|
|
||||||
|
COGL_EXPORT
|
||||||
|
const CoglColor * cogl_value_get_color (const GValue *value);
|
||||||
|
|
||||||
|
COGL_EXPORT
|
||||||
|
GType cogl_param_color_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cogl_param_spec_color: (skip)
|
||||||
|
* @name: name of the property
|
||||||
|
* @nick: short name
|
||||||
|
* @blurb: description (can be translatable)
|
||||||
|
* @default_value: default value
|
||||||
|
* @flags: flags for the param spec
|
||||||
|
*
|
||||||
|
* Creates a #GParamSpec for properties using #CoglColor.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): the newly created #GParamSpec
|
||||||
|
*/
|
||||||
|
COGL_EXPORT
|
||||||
|
GParamSpec * cogl_param_spec_color (const gchar *name,
|
||||||
|
const gchar *nick,
|
||||||
|
const gchar *blurb,
|
||||||
|
const CoglColor *default_value,
|
||||||
|
GParamFlags flags);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
Loading…
x
Reference in New Issue
Block a user