[clutter] types: Add ClutterMatrix
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] types: Add ClutterMatrix
- Date: Thu, 26 Jul 2012 13:09:12 +0000 (UTC)
commit 25ba5374fe55da9ef6c2c814e43b0ee7e40b73dc
Author: Emmanuele Bassi <ebassi gnome org>
Date: Sat Jul 21 13:46:47 2012 -0400
types: Add ClutterMatrix
A simple typedef to CoglMatrix, that we can use for GObject properties
and signal marshallers, without requiring Cogl to change.
clutter/clutter-base-types.c | 117 ++++++++++++++++++++++++++++++++++++++++++
clutter/clutter-types.h | 15 +++++-
clutter/clutter.symbols | 6 ++
3 files changed, 137 insertions(+), 1 deletions(-)
---
diff --git a/clutter/clutter-base-types.c b/clutter/clutter-base-types.c
index 32ed407..af26ebd 100644
--- a/clutter/clutter-base-types.c
+++ b/clutter/clutter-base-types.c
@@ -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;
+}
diff --git a/clutter/clutter-types.h b/clutter/clutter-types.h
index e0ee81a..17c1d3a 100644
--- a/clutter/clutter-types.h
+++ b/clutter/clutter-types.h
@@ -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__ */
diff --git a/clutter/clutter.symbols b/clutter/clutter.symbols
index 7b032f6..c6a773e 100644
--- a/clutter/clutter.symbols
+++ b/clutter/clutter.symbols
@@ -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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]