[seed] cairo: Implement cairo.get_source and cairo.set_source
- From: Robert Carr <racarr src gnome org>
- To: svn-commits-list gnome org
- Subject: [seed] cairo: Implement cairo.get_source and cairo.set_source
- Date: Thu, 14 May 2009 22:58:46 -0400 (EDT)
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]