[seed] cairo: Implement matrix init/translate/scale/rotate funcs



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]