Added keywords, updated GET_OBJ macro.
[ruby-evas.git] / src / rb_evas.c
1 /*
2  * $Id: rb_evas.c 2 2004-06-19 18:55:39Z tilman $
3  *
4  * Copyright (C) 2004 Tilman Sauerbeck (tilman at code-monkey de)
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #include <ruby.h>
22
23 #include <Evas.h>
24
25 #include "rb_evas_object.h"
26
27 VALUE cEvas;
28 static VALUE parents;
29
30 static void c_mark (Evas **e)
31 {
32         VALUE parent;
33
34         parent = rb_hash_aref (parents, INT2NUM ((long) (e)));
35         if (parent != Qnil)
36                 rb_gc_mark (parent);
37 }
38
39 VALUE TO_EVAS (VALUE parent, Evas *e)
40 {
41         VALUE self;
42         Evas **my_e = NULL;
43
44         if (parent == Qnil || !e)
45                 return Qnil;
46
47         self = Data_Make_Struct (cEvas, Evas *,
48                                  c_mark, free, my_e);
49         *my_e = e;
50
51         rb_hash_aset (parents, INT2NUM ((long) my_e), parent);
52
53         rb_obj_call_init (self, 0, NULL);
54
55         return self;
56 }
57
58 void Init_evas (void)
59 {
60         cEvas = rb_define_class ("Evas", rb_cObject);
61
62         /* not publically instantiable yet */
63         rb_define_private_method (rb_singleton_class (cEvas),
64                                   "new", NULL, 0);
65
66         parents = rb_hash_new ();
67         rb_global_variable (&parents);
68
69         Init_EvasObject ();
70 }