[seed] cairo: Implement cairo.get_source and cairo.set_source



commit d9e0a9bc75dd44a6d42ed2f3a708ab797f9ec535
Author: Robert Carr <racarr svn gnome org>
Date:   Thu May 14 16:47:37 2009 -0400

    cairo: Implement cairo.get_source and cairo.set_source
---
 modules/cairo/seed-cairo-pattern.c |    5 ++-
 modules/cairo/seed-cairo-surface.c |    5 ++-
 modules/cairo/seed-cairo.c         |   54 ++++++++++++++++++++++++++++++++++--
 3 files changed, 59 insertions(+), 5 deletions(-)

diff --git a/modules/cairo/seed-cairo-pattern.c b/modules/cairo/seed-cairo-pattern.c
index fb4634f..fa6c991 100644
--- a/modules/cairo/seed-cairo-pattern.c
+++ b/modules/cairo/seed-cairo-pattern.c
@@ -38,7 +38,10 @@ seed_cairo_pattern_finalize (SeedObject obj)
 {
   cairo_pattern_t *s = CAIRO_PATTERN_PRIV(obj);
   if (s)
-    cairo_pattern_destroy (s);
+    {
+      cairo_pattern_set_user_data (s, seed_get_cairo_key(), NULL, NULL);
+      cairo_pattern_destroy (s);
+    }
 }
 
 cairo_pattern_t *
diff --git a/modules/cairo/seed-cairo-surface.c b/modules/cairo/seed-cairo-surface.c
index f283005..5d1ce7c 100644
--- a/modules/cairo/seed-cairo-surface.c
+++ b/modules/cairo/seed-cairo-surface.c
@@ -38,7 +38,10 @@ seed_cairo_surface_finalize (SeedObject obj)
 {
   cairo_surface_t *s = CAIRO_SURFACE_PRIV(obj);
   if (s)
-    cairo_surface_destroy (s);
+    {
+      cairo_surface_set_user_data (s, seed_get_cairo_key(), NULL, NULL);
+      cairo_surface_destroy (s);
+  }
 }
 
 cairo_surface_t *
diff --git a/modules/cairo/seed-cairo.c b/modules/cairo/seed-cairo.c
index 94239e0..4ae0647 100644
--- a/modules/cairo/seed-cairo.c
+++ b/modules/cairo/seed-cairo.c
@@ -73,7 +73,10 @@ seed_cairo_context_finalize (SeedObject obj)
 {
   cairo_t *cr = CAIRO_CONTEXT_PRIV (obj);
   if (cr)
-    cairo_destroy (cr);
+    {
+      cairo_set_user_data (cr, seed_get_cairo_key(), NULL, NULL);
+      cairo_destroy (cr);
+    }
 }
 
 static SeedObject
@@ -1563,6 +1566,51 @@ seed_cairo_device_to_user_distance (SeedContext ctx,
   return seed_make_array (ctx, out, 2, exception);
 }
 
+static SeedValue
+seed_cairo_set_source (SeedContext ctx,
+		       SeedObject function,
+		       SeedObject this_object,
+		       gsize argument_count,
+		       const SeedValue arguments[],
+		       SeedException *exception)
+{
+  cairo_t *cr;
+  cairo_pattern_t *pat;
+  
+  CHECK_THIS();
+  if (argument_count != 1)
+    {
+      EXPECTED_EXCEPTION("set_source", "1 argument");
+    }
+  pat = seed_object_to_cairo_pattern (ctx, arguments[0], exception);
+  if (!pat)
+    {
+      seed_make_exception (ctx, exception, "ArgumentError", "set_source needs a Cairo Pattern  as argument");
+      return seed_make_undefined (ctx);
+    }
+  
+  cr = seed_object_get_private (this_object);
+  cairo_set_source (cr,pat);
+  
+  return seed_make_undefined (ctx);
+}
+
+static SeedValue
+seed_cairo_get_source (SeedContext ctx,
+		       SeedObject function,
+		       SeedObject this_object,
+		       gsize argument_count,
+		       const SeedValue arguments[],
+		       SeedException *exception)
+{
+  cairo_t *cr;
+  CHECK_THIS();
+  
+  cr = seed_object_get_private (this_object);
+  
+  return seed_object_from_cairo_pattern (ctx, cairo_get_source(cr));
+}
+
 seed_static_value cairo_values[] = {
   {"antialias", seed_cairo_get_antialias, seed_cairo_set_antialias, SEED_PROPERTY_ATTRIBUTE_DONT_DELETE},
   {"fill_rule", seed_cairo_get_fill_rule, seed_cairo_set_fill_rule, SEED_PROPERTY_ATTRIBUTE_DONT_DELETE},
@@ -1590,9 +1638,9 @@ seed_static_function cairo_funcs[] = {
   {"get_group_target", seed_cairo_get_group_target, 0},
   {"set_source_rgb", seed_cairo_set_source_rgb, 0},
   {"set_source_rgba", seed_cairo_set_source_rgba, 0},
-  //  {"set_source", seed_cairo_set_source, 0},
+  {"set_source", seed_cairo_set_source, 0},
   {"set_source_surface", seed_cairo_set_source_surface, 0},
-  //  {"get_source", seed_cairo_get_source, 0},
+  {"get_source", seed_cairo_get_source, 0},
   {"clip", seed_cairo_clip, 0},
   {"clip_preserve", seed_cairo_clip_preserve, 0},
   {"reset_clip", seed_cairo_reset_clip, 0},



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]