>From 92388ae5c64b36e8323e453a4ce9cdefa26043d5 Mon Sep 17 00:00:00 2001 From: David PIROTTE Date: Fri, 9 May 2014 15:34:53 -0300 Subject: [PATCH 6/6] add custom bindings for ClutterMatrix * clutter/gnome/gw/clutter-spec.scm: * clutter/gnome/gw/clutter-support.h: * clutter/gnome/gw/clutter-support.c: add custom bindings and support code for ClutterMatrix --- clutter/gnome/gw/clutter-spec.scm | 7 ++++++ clutter/gnome/gw/clutter-support.c | 49 +++++++++++++++++++++++++++++++++++++- clutter/gnome/gw/clutter-support.h | 3 +++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/clutter/gnome/gw/clutter-spec.scm b/clutter/gnome/gw/clutter-spec.scm index cd8d3d3..c6089e6 100644 --- a/clutter/gnome/gw/clutter-spec.scm +++ b/clutter/gnome/gw/clutter-spec.scm @@ -177,6 +177,13 @@ ;; unwrap (list c-var " = scm_scm_to_clutter_rect (" scm-var ");\n")) + (wrap-custom-boxed! + "ClutterMatrix" "CLUTTER_TYPE_MATRIX" + ;; wrap + (list scm-var " = " c-var " ? scm_clutter_matrix_to_scm (" c-var ") : SCM_BOOL_F;\n") + ;; unwrap + (list c-var " = scm_scm_to_clutter_matrix (" scm-var ");\n")) + (wrap-opaque-pointer! ws "ClutterInputDevice*") (wrap-opaque-pointer! ws "ClutterEventSequence*") diff --git a/clutter/gnome/gw/clutter-support.c b/clutter/gnome/gw/clutter-support.c index e166dfb..f3bad6a 100644 --- a/clutter/gnome/gw/clutter-support.c +++ b/clutter/gnome/gw/clutter-support.c @@ -358,4 +358,51 @@ scm_scm_to_clutter_rect (SCM scm) ret.size.height = scm_to_double (scm_cadddr (scm)); return clutter_rect_copy (&ret); -}; +} + +SCM +scm_clutter_matrix_to_scm (ClutterMatrix *m) +{ + return scm_list_n (scm_from_double (m->xx), /* column 0 */ + scm_from_double (m->yx), + scm_from_double (m->zx), + scm_from_double (m->wx), + scm_from_double (m->xy), /* column 1 */ + scm_from_double (m->yy), + scm_from_double (m->zy), + scm_from_double (m->wy), + scm_from_double (m->xz), /* column 2 */ + scm_from_double (m->yz), + scm_from_double (m->zz), + scm_from_double (m->wz), + scm_from_double (m->xw), /* column 3 */ + scm_from_double (m->yw), + scm_from_double (m->zw), + scm_from_double (m->ww), + SCM_UNDEFINED); +} + +ClutterMatrix* +scm_scm_to_clutter_matrix (SCM scm) +{ + ClutterMatrix ret; + + ret.xx = scm_to_double (scm_list_ref (scm, scm_from_int (0))); + ret.yx = scm_to_double (scm_list_ref (scm, scm_from_int (1))); + ret.zx = scm_to_double (scm_list_ref (scm, scm_from_int (2))); + ret.wx = scm_to_double (scm_list_ref (scm, scm_from_int (3))); + ret.xy = scm_to_double (scm_list_ref (scm, scm_from_int (4))); + ret.yy = scm_to_double (scm_list_ref (scm, scm_from_int (5))); + ret.zy = scm_to_double (scm_list_ref (scm, scm_from_int (6))); + ret.wy = scm_to_double (scm_list_ref (scm, scm_from_int (7))); + ret.xz = scm_to_double (scm_list_ref (scm, scm_from_int (8))); + ret.yz = scm_to_double (scm_list_ref (scm, scm_from_int (9))); + ret.zz = scm_to_double (scm_list_ref (scm, scm_from_int (10))); + ret.wz = scm_to_double (scm_list_ref (scm, scm_from_int (11))); + ret.xw = scm_to_double (scm_list_ref (scm, scm_from_int (12))); + ret.yw = scm_to_double (scm_list_ref (scm, scm_from_int (13))); + ret.zw = scm_to_double (scm_list_ref (scm, scm_from_int (14))); + ret.ww = scm_to_double (scm_list_ref (scm, scm_from_int (15))); + + return g_boxed_copy (clutter_matrix_get_type (), &ret); +} diff --git a/clutter/gnome/gw/clutter-support.h b/clutter/gnome/gw/clutter-support.h index 388858d..d5ead14 100644 --- a/clutter/gnome/gw/clutter-support.h +++ b/clutter/gnome/gw/clutter-support.h @@ -70,3 +70,6 @@ ClutterSize* scm_scm_to_clutter_size (SCM scm); SCM scm_clutter_rect_to_scm (ClutterRect *rect); ClutterRect* scm_scm_to_clutter_rect (SCM scm); + +SCM scm_clutter_matrix_to_scm (ClutterMatrix *m); +ClutterMatrix* scm_scm_to_clutter_matrix (SCM scm); -- 2.0.0.rc0