[clutter/wip/master-next: 4/8] types: Add ClutterMatrix



commit f188336551875171c10d05e2d0fe1bdbfafc57d2
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]