types: Add ClutterMatrix

A simple typedef to CoglMatrix, that we can use for GObject properties
and signal marshallers, without requiring Cogl to change.
This commit is contained in:
Emmanuele Bassi 2012-07-21 13:46:47 -04:00
parent 3f732cdc2b
commit 25ba5374fe
3 changed files with 137 additions and 1 deletions

View File

@ -1266,3 +1266,120 @@ clutter_rect_progress (const GValue *a,
return TRUE;
}
/**
* ClutterMatrix:
*
* A type representing a 4x4 matrix.
*
* It is identicaly to #CoglMatrix.
*
* Since: 1.12
*/
static gpointer
clutter_matrix_copy (gpointer data)
{
return g_memdup (data, sizeof (ClutterMatrix));
}
G_DEFINE_BOXED_TYPE (ClutterMatrix, clutter_matrix,
clutter_matrix_copy,
clutter_matrix_free)
/**
* clutter_matrix_alloc:
*
* Allocates enough memory to hold a #ClutterMatrix.
*
* Return value: (transfer full): the newly allocated #ClutterMatrix
*
* Since: 1.12
*/
ClutterMatrix *
clutter_matrix_alloc (void)
{
return g_new0 (ClutterMatrix, 1);
}
/**
* clutter_matrix_free:
* @matrix: (allow-none): a #ClutterMatrix
*
* Frees the memory allocated by clutter_matrix_alloc().
*
* Since: 1.12
*/
void
clutter_matrix_free (ClutterMatrix *matrix)
{
g_free (matrix);
}
/**
* clutter_matrix_init_identity:
* @matrix: a #ClutterMatrix
*
* Initializes @matrix with the identity matrix, i.e.:
*
* |[
* .xx = 1.0, .xy = 0.0, .xz = 0.0, .xw = 0.0
* .yx = 0.0, .yy = 1.0, .yz = 0.0, .yw = 0.0
* .zx = 0.0, .zy = 0.0, .zz = 1.0, .zw = 0.0
* .wx = 0.0, .wy = 0.0, .wz = 0.0, .ww = 1.0
* ]|
*
* Return value: (transfer none): the initialized #ClutterMatrix
*
* Since: 1.12
*/
ClutterMatrix *
clutter_matrix_init_identity (ClutterMatrix *matrix)
{
cogl_matrix_init_identity (matrix);
return matrix;
}
/**
* clutter_matrix_init_from_array:
* @matrix: a #ClutterMatrix
* @values: (array fixed-size=16): a C array of 16 floating point values,
* representing a 4x4 matrix, with column-major order
*
* Initializes @matrix with the contents of a C array of floating point
* values.
*
* Return value: (transfer none): the initialzed #ClutterMatrix
*
* Since: 1.12
*/
ClutterMatrix *
clutter_matrix_init_from_array (ClutterMatrix *matrix,
const float values[16])
{
cogl_matrix_init_from_array (matrix, values);
return matrix;
}
/**
* clutter_matrix_init_from_matrix:
* @a: the #ClutterMatrix to initialize
* @b: the #ClutterMatrix to copy
*
* Initializes the #ClutterMatrix @a with the contents of the
* #ClutterMatrix @b.
*
* Return value: (transfer none): the initialized #ClutterMatrix
*
* Since: 1.12
*/
ClutterMatrix *
clutter_matrix_init_from_matrix (ClutterMatrix *a,
ClutterMatrix *b)
{
memcpy (b, a, sizeof (ClutterMatrix));
return a;
}

View File

@ -29,7 +29,7 @@
#define __CLUTTER_TYPES_H__
#include <cairo.h>
#include <cogl/cogl.h>
#include <clutter/clutter-macros.h>
#include <clutter/clutter-enums.h>
@ -40,6 +40,7 @@ G_BEGIN_DECLS
#define CLUTTER_TYPE_GEOMETRY (clutter_geometry_get_type ())
#define CLUTTER_TYPE_KNOT (clutter_knot_get_type ())
#define CLUTTER_TYPE_MARGIN (clutter_margin_get_type ())
#define CLUTTER_TYPE_MATRIX (clutter_matrix_get_type ())
#define CLUTTER_TYPE_PAINT_VOLUME (clutter_paint_volume_get_type ())
#define CLUTTER_TYPE_PERSPECTIVE (clutter_perspective_get_type ())
#define CLUTTER_TYPE_VERTEX (clutter_vertex_get_type ())
@ -93,6 +94,8 @@ typedef struct _ClutterState ClutterState;
typedef struct _ClutterInputDevice ClutterInputDevice;
typedef CoglMatrix ClutterMatrix;
typedef union _ClutterEvent ClutterEvent;
/**
@ -673,6 +676,16 @@ typedef gboolean (* ClutterProgressFunc) (const GValue *a,
void clutter_interval_register_progress_func (GType value_type,
ClutterProgressFunc func);
GType clutter_matrix_get_type (void) G_GNUC_CONST;
ClutterMatrix * clutter_matrix_alloc (void);
ClutterMatrix * clutter_matrix_init_identity (ClutterMatrix *matrix);
ClutterMatrix * clutter_matrix_init_from_array (ClutterMatrix *matrix,
const float values[16]);
ClutterMatrix * clutter_matrix_init_from_matrix (ClutterMatrix *a,
ClutterMatrix *b);
void clutter_matrix_free (ClutterMatrix *matrix);
G_END_DECLS
#endif /* __CLUTTER_TYPES_H__ */

View File

@ -899,6 +899,12 @@ clutter_margin_copy
clutter_margin_free
clutter_margin_get_type
clutter_margin_new
clutter_matrix_alloc
clutter_matrix_free
clutter_matrix_get_type
clutter_matrix_init_identity
clutter_matrix_init_from_array
clutter_matrix_init_from_matrix
clutter_media_get_audio_volume
clutter_media_get_buffer_fill
clutter_media_get_can_seek