mirror of
https://github.com/brl/mutter.git
synced 2024-12-23 19:42:05 +00:00
[units] Add more conversion functions
A GValue containing a ClutterUnit should be transformable into a GValue holding an integer, a floating point value or a fixed point value. This means adding more transformation functions when registering the ClutterUnit GType.
This commit is contained in:
parent
6bee140e74
commit
d1f3190f5b
@ -160,7 +160,7 @@ clutter_units_pt (gdouble pt)
|
||||
* @em: em to convert
|
||||
*
|
||||
* Converts a value in em to #ClutterUnit<!-- -->s at the
|
||||
* current DPI.
|
||||
* current DPI
|
||||
*
|
||||
* Return value: the value in units
|
||||
*
|
||||
@ -176,6 +176,42 @@ clutter_units_em (gdouble em)
|
||||
return em * _clutter_backend_get_units_per_em (backend);
|
||||
}
|
||||
|
||||
/**
|
||||
* clutter_units_pixels:
|
||||
* @px: pixels to convert
|
||||
*
|
||||
* Converts a value in pixels to #ClutterUnit<!-- -->s
|
||||
*
|
||||
* Return value: the value in units
|
||||
*
|
||||
* Since: 1.0
|
||||
*/
|
||||
ClutterUnit
|
||||
clutter_units_pixels (gint px)
|
||||
{
|
||||
return CLUTTER_UNITS_FROM_INT (px);
|
||||
}
|
||||
|
||||
/**
|
||||
* clutter_units_to_pixels:
|
||||
* @units: units to convert
|
||||
*
|
||||
* Converts a value in #ClutterUnit<!-- -->s to pixels
|
||||
*
|
||||
* Return value: the value in pixels
|
||||
*
|
||||
* Since: 1.0
|
||||
*/
|
||||
gint
|
||||
clutter_units_to_pixels (ClutterUnit units)
|
||||
{
|
||||
return CLUTTER_UNITS_TO_INT (units);
|
||||
}
|
||||
|
||||
/*
|
||||
* GValue and GParamSpec integration
|
||||
*/
|
||||
|
||||
static GTypeInfo _info = {
|
||||
0,
|
||||
NULL,
|
||||
@ -246,6 +282,36 @@ clutter_value_transform_int_unit (const GValue *src,
|
||||
dest->data[0].v_float = CLUTTER_UNITS_FROM_INT (src->data[0].v_int);
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_value_transform_unit_float (const GValue *src,
|
||||
GValue *dest)
|
||||
{
|
||||
dest->data[0].v_float = CLUTTER_UNITS_TO_FLOAT (src->data[0].v_float);
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_value_transform_float_unit (const GValue *src,
|
||||
GValue *dest)
|
||||
{
|
||||
dest->data[0].v_float = CLUTTER_UNITS_FROM_FLOAT (src->data[0].v_float);
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void
|
||||
clutter_value_transform_unit_fixed (const GValue *src,
|
||||
GValue *dest)
|
||||
{
|
||||
dest->data[0].v_int = CLUTTER_UNITS_TO_FIXED (src->data[0].v_float);
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_value_transform_fixed_unit (const GValue *src,
|
||||
GValue *dest)
|
||||
{
|
||||
dest->data[0].v_float = CLUTTER_UNITS_FROM_FIXED (src->data[0].v_int);
|
||||
}
|
||||
#endif
|
||||
|
||||
static const GTypeValueTable _clutter_unit_value_table = {
|
||||
clutter_value_init_unit,
|
||||
NULL,
|
||||
@ -274,6 +340,11 @@ clutter_unit_get_type (void)
|
||||
clutter_value_transform_unit_int);
|
||||
g_value_register_transform_func (G_TYPE_INT, _clutter_unit_type,
|
||||
clutter_value_transform_int_unit);
|
||||
|
||||
g_value_register_transform_func (_clutter_unit_type, G_TYPE_FLOAT,
|
||||
clutter_value_transform_unit_float);
|
||||
g_value_register_transform_func (G_TYPE_FLOAT, _clutter_unit_type,
|
||||
clutter_value_transform_float_unit);
|
||||
}
|
||||
|
||||
return _clutter_unit_type;
|
||||
|
@ -39,8 +39,8 @@ G_BEGIN_DECLS
|
||||
/**
|
||||
* ClutterUnit:
|
||||
*
|
||||
* Device independent unit used by Clutter. The value held can be transformed
|
||||
* into other units, likes pixels.
|
||||
* Device independent unit used by Clutter. The value held can be
|
||||
* transformed into other units, likes pixels.
|
||||
*
|
||||
* Since: 0.4
|
||||
*/
|
||||
@ -52,8 +52,8 @@ typedef float ClutterUnit;
|
||||
#define CLUTTER_UNITS_FROM_FLOAT(x) (x)
|
||||
#define CLUTTER_UNITS_TO_FLOAT(x) (x)
|
||||
|
||||
#define CLUTTER_UNITS_FROM_FIXED(x) (x)
|
||||
#define CLUTTER_UNITS_TO_FIXED(x) (x)
|
||||
#define CLUTTER_UNITS_FROM_FIXED(x) (COGL_FIXED_TO_FLOAT (x))
|
||||
#define CLUTTER_UNITS_TO_FIXED(x) (COGL_FIXED_FROM_FLOAT (x))
|
||||
|
||||
/**
|
||||
* CLUTTER_UNITS_FORMAT:
|
||||
@ -79,7 +79,7 @@ typedef float ClutterUnit;
|
||||
*
|
||||
* Since: 0.6
|
||||
*/
|
||||
#define CLUTTER_UNITS_FROM_DEVICE(x) CLUTTER_UNITS_FROM_INT ((x))
|
||||
#define CLUTTER_UNITS_FROM_DEVICE(x) (clutter_units_pixels ((x)))
|
||||
|
||||
/**
|
||||
* CLUTTER_UNITS_TO_DEVICE:
|
||||
@ -89,7 +89,7 @@ typedef float ClutterUnit;
|
||||
*
|
||||
* Since: 0.6
|
||||
*/
|
||||
#define CLUTTER_UNITS_TO_DEVICE(x) CLUTTER_UNITS_TO_INT ((x))
|
||||
#define CLUTTER_UNITS_TO_DEVICE(x) (clutter_units_to_pixels ((x)))
|
||||
|
||||
/**
|
||||
* CLUTTER_UNITS_FROM_PANGO_UNIT:
|
||||
@ -99,7 +99,7 @@ typedef float ClutterUnit;
|
||||
*
|
||||
* Since: 0.6
|
||||
*/
|
||||
#define CLUTTER_UNITS_FROM_PANGO_UNIT(x) ((float)((x) / 1024))
|
||||
#define CLUTTER_UNITS_FROM_PANGO_UNIT(x) ((float)((x) / 1024.0))
|
||||
|
||||
/**
|
||||
* CLUTTER_UNITS_TO_PANGO_UNIT:
|
||||
@ -141,9 +141,12 @@ typedef float ClutterUnit;
|
||||
*/
|
||||
#define CLUTTER_UNITS_FROM_EM(x) (clutter_units_em (x))
|
||||
|
||||
ClutterUnit clutter_units_mm (gdouble mm);
|
||||
ClutterUnit clutter_units_pt (gdouble pt);
|
||||
ClutterUnit clutter_units_em (gdouble em);
|
||||
ClutterUnit clutter_units_mm (gdouble mm);
|
||||
ClutterUnit clutter_units_pt (gdouble pt);
|
||||
ClutterUnit clutter_units_em (gdouble em);
|
||||
ClutterUnit clutter_units_pixels (gint px);
|
||||
|
||||
gint clutter_units_to_pixels (ClutterUnit units);
|
||||
|
||||
#define CLUTTER_TYPE_UNIT (clutter_unit_get_type ())
|
||||
#define CLUTTER_TYPE_PARAM_UNIT (clutter_param_unit_get_type ())
|
||||
|
Loading…
Reference in New Issue
Block a user