[seed] cairo: Implement matrix init/translate/scale/rotate funcs
- From: Robert Carr <racarr src gnome org>
- To: svn-commits-list gnome org
- Subject: [seed] cairo: Implement matrix init/translate/scale/rotate funcs
- Date: Thu, 14 May 2009 22:58:01 -0400 (EDT)
commit e4d6c703fffb0388ff2b8aaacc57e4ef2c157ce7
Author: Robert Carr <racarr svn gnome org>
Date: Thu May 14 14:13:11 2009 -0400
cairo: Implement matrix init/translate/scale/rotate funcs
---
modules/cairo/seed-cairo-matrix.c | 183 ++++++++++++++++++++++++++++++++++++-
1 files changed, 179 insertions(+), 4 deletions(-)
diff --git a/modules/cairo/seed-cairo-matrix.c b/modules/cairo/seed-cairo-matrix.c
index 61a5a00..39c61ce 100644
--- a/modules/cairo/seed-cairo-matrix.c
+++ b/modules/cairo/seed-cairo-matrix.c
@@ -4,10 +4,6 @@
#include "seed-cairo.h"
SeedClass seed_matrix_class;
-seed_static_function matrix_funcs[] = {
- {0, 0, 0}
-};
-
SeedValue
seed_value_from_cairo_matrix (SeedContext ctx,
const cairo_matrix_t *matrix,
@@ -44,6 +40,185 @@ seed_value_to_cairo_matrix (SeedContext ctx,
return TRUE;
}
+// Should probably be a property?
+static SeedValue
+seed_cairo_matrix_init_identity (SeedContext ctx,
+ SeedObject function,
+ SeedObject this_object,
+ gsize argument_count,
+ const SeedValue arguments[],
+ SeedException *exception)
+{
+ cairo_matrix_t m;
+
+ cairo_matrix_init_identity (&m);
+ return seed_value_from_cairo_matrix (ctx, &m, exception);
+}
+
+static SeedValue
+seed_cairo_matrix_init_translate (SeedContext ctx,
+ SeedObject function,
+ SeedObject this_object,
+ gsize argument_count,
+ const SeedValue arguments[],
+ SeedException *exception)
+{
+ gdouble x, y;
+ cairo_matrix_t m;
+
+ if (argument_count != 2)
+ {
+ EXPECTED_EXCEPTION("init_translate", "2 arguments");
+ }
+
+ x = seed_value_to_double (ctx, arguments[0], exception);
+ y = seed_value_to_double (ctx, arguments[1], exception);
+
+ cairo_matrix_init_translate (&m, x, y);
+
+ return seed_value_from_cairo_matrix (ctx, &m, exception);
+}
+
+static SeedValue
+seed_cairo_matrix_translate (SeedContext ctx,
+ SeedObject function,
+ SeedObject this_object,
+ gsize argument_count,
+ const SeedValue arguments[],
+ SeedException *exception)
+{
+ gdouble x, y;
+ cairo_matrix_t m;
+
+ if (argument_count != 3)
+ {
+ EXPECTED_EXCEPTION("translate", "3 arguments");
+ }
+
+ if (!seed_value_to_cairo_matrix (ctx, arguments[0], &m, exception))
+ {
+ seed_make_exception (ctx, exception, "ArgumentError", "translate needs an array [xx, yx, xy, yy, x0, y0]");
+ }
+ x = seed_value_to_double (ctx, arguments[1], exception);
+ y = seed_value_to_double (ctx, arguments[2], exception);
+
+ cairo_matrix_translate (&m, x, y);
+
+ return seed_value_from_cairo_matrix (ctx, &m, exception);
+}
+
+static SeedValue
+seed_cairo_matrix_init_scale (SeedContext ctx,
+ SeedObject function,
+ SeedObject this_object,
+ gsize argument_count,
+ const SeedValue arguments[],
+ SeedException *exception)
+{
+ gdouble x, y;
+ cairo_matrix_t m;
+
+ if (argument_count != 2)
+ {
+ EXPECTED_EXCEPTION("init_scale", "2 arguments");
+ }
+
+ x = seed_value_to_double (ctx, arguments[0], exception);
+ y = seed_value_to_double (ctx, arguments[1], exception);
+
+ cairo_matrix_init_scale (&m, x, y);
+
+ return seed_value_from_cairo_matrix (ctx, &m, exception);
+}
+
+static SeedValue
+seed_cairo_matrix_scale (SeedContext ctx,
+ SeedObject function,
+ SeedObject this_object,
+ gsize argument_count,
+ const SeedValue arguments[],
+ SeedException *exception)
+{
+ gdouble x, y;
+ cairo_matrix_t m;
+
+ if (argument_count != 3)
+ {
+ EXPECTED_EXCEPTION("scale", "3 arguments");
+ }
+
+ if (!seed_value_to_cairo_matrix (ctx, arguments[0], &m, exception))
+ {
+ seed_make_exception (ctx, exception, "ArgumentError", "scale needs an array [xx, yx, xy, yy, x0, y0]");
+ }
+ x = seed_value_to_double (ctx, arguments[1], exception);
+ y = seed_value_to_double (ctx, arguments[2], exception);
+
+ cairo_matrix_scale (&m, x, y);
+
+ return seed_value_from_cairo_matrix (ctx, &m, exception);
+}
+
+static SeedValue
+seed_cairo_matrix_init_rotate (SeedContext ctx,
+ SeedObject function,
+ SeedObject this_object,
+ gsize argument_count,
+ const SeedValue arguments[],
+ SeedException *exception)
+{
+ gdouble angle;
+ cairo_matrix_t m;
+
+ if (argument_count != 1)
+ {
+ EXPECTED_EXCEPTION("init_rotate", "1 arguments");
+ }
+
+ angle = seed_value_to_double (ctx, arguments[0], exception);
+ cairo_matrix_init_rotate (&m, angle);
+
+ return seed_value_from_cairo_matrix (ctx, &m, exception);
+}
+
+static SeedValue
+seed_cairo_matrix_rotate (SeedContext ctx,
+ SeedObject function,
+ SeedObject this_object,
+ gsize argument_count,
+ const SeedValue arguments[],
+ SeedException *exception)
+{
+ gdouble angle;
+ cairo_matrix_t m;
+
+ if (argument_count != 2)
+ {
+ EXPECTED_EXCEPTION("rotate", "2 arguments");
+ }
+
+ if (!seed_value_to_cairo_matrix (ctx, arguments[0], &m, exception))
+ {
+ seed_make_exception (ctx, exception, "ArgumentError", "rotate needs an array [xx, yx, xy, yy, x0, y0]");
+ }
+ angle = seed_value_to_double (ctx, arguments[1], exception);
+
+ cairo_matrix_rotate (&m, angle);
+
+ return seed_value_from_cairo_matrix (ctx, &m, exception);
+}
+
+seed_static_function matrix_funcs[] = {
+ {"init_identity", seed_cairo_matrix_init_identity, 0},
+ {"init_translate", seed_cairo_matrix_init_translate, 0},
+ {"init_scale", seed_cairo_matrix_init_scale, 0},
+ {"init_rotate", seed_cairo_matrix_init_rotate, 0},
+ {"translate", seed_cairo_matrix_translate, 0},
+ {"scale", seed_cairo_matrix_scale, 0},
+ {"rotate", seed_cairo_matrix_rotate, 0},
+ {0, 0, 0}
+};
+
void
seed_define_cairo_matrix (SeedContext ctx,
SeedObject namespace_ref)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]