2 * $Id: rb_ecore_evas.c 27 2004-07-08 18:25:05Z tilman $
4 * Copyright (C) 2004 Tilman Sauerbeck (tilman at code-monkey de)
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.
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.
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
24 #include <Ecore_Evas.h>
27 #include "rb_ecore_evas_main.h"
28 #include "rb_ecore_evas.h"
30 #define GET_OBJ(obj, type, o, desc) \
33 Data_Get_Struct ((obj), type *, (o)); \
36 rb_raise (rb_eException, desc " destroyed already"); \
40 #define CHECK_BOOL(val) \
41 if (TYPE ((val)) != T_TRUE && TYPE ((val)) != T_FALSE) { \
42 rb_raise (rb_eTypeError, \
43 "wrong argument type %s (expected true or false)", \
44 rb_obj_classname ((val))); \
50 /* called by the child classes */
51 void c_ecore_evas_free (Ecore_Evas **ee)
54 ecore_evas_free (*ee);
56 rb_hash_aset (evases, INT2NUM ((long) ee), Qnil);
58 ecore_evas_shutdown ();
64 static VALUE c_inspect (VALUE self)
68 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
70 snprintf (buf, sizeof (buf), "#<Ecore::Evas::EcoreEvas:%p ptr=%p>",
73 return rb_str_new2 (buf);
76 static VALUE c_show (VALUE self)
78 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
80 ecore_evas_show (*ee);
85 static VALUE c_hide (VALUE self)
87 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
89 ecore_evas_hide (*ee);
94 static VALUE c_visible_get (VALUE self)
96 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
98 return ecore_evas_visibility_get (*ee) ? Qtrue : Qfalse;
101 static VALUE c_raise (VALUE self)
103 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
105 ecore_evas_raise (*ee);
110 static VALUE c_lower (VALUE self)
112 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
114 ecore_evas_lower (*ee);
119 static VALUE c_layer_get (VALUE self)
121 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
123 return INT2FIX (ecore_evas_layer_get (*ee));
126 static VALUE c_layer_set (VALUE self, VALUE val)
128 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
130 Check_Type (val, T_FIXNUM);
132 ecore_evas_layer_set (*ee, FIX2INT (val));
137 static VALUE c_evas (VALUE self)
141 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
143 if (NIL_P (evas = rb_hash_aref (evases, INT2NUM ((long) (ee))))) {
144 evas = TO_EVAS (self, ecore_evas_get (*ee));
145 rb_hash_aset (evases, INT2NUM ((long) ee), evas);
151 static VALUE c_get_size_min (VALUE self)
155 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
157 ecore_evas_size_min_get (*ee, &w, &h);
159 return rb_ary_new3 (2, INT2FIX (w), INT2FIX (h));
162 static VALUE c_set_size_min (VALUE self, VALUE w, VALUE h)
164 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
166 Check_Type (w, T_FIXNUM);
167 Check_Type (h, T_FIXNUM);
169 ecore_evas_size_min_set (*ee, FIX2INT (w), FIX2INT (h));
174 static VALUE c_get_size_max (VALUE self)
178 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
180 ecore_evas_size_max_get (*ee, &w, &h);
182 return rb_ary_new3 (2, INT2FIX (w), INT2FIX (h));
185 static VALUE c_set_size_max (VALUE self, VALUE w, VALUE h)
187 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
189 Check_Type (w, T_FIXNUM);
190 Check_Type (h, T_FIXNUM);
192 ecore_evas_size_max_set (*ee, FIX2INT (w), FIX2INT (h));
197 static VALUE c_move (VALUE self, VALUE x, VALUE y)
199 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
201 Check_Type (x, T_FIXNUM);
202 Check_Type (y, T_FIXNUM);
204 ecore_evas_move (*ee, FIX2INT (x), FIX2INT (y));
209 static VALUE c_resize (VALUE self, VALUE w, VALUE h)
211 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
213 Check_Type (w, T_FIXNUM);
214 Check_Type (h, T_FIXNUM);
216 ecore_evas_resize (*ee, FIX2INT (w), FIX2INT (h));
221 static VALUE c_title_get (VALUE self)
225 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
227 if (!(tmp = ecore_evas_title_get (*ee)))
230 return rb_str_new2 (tmp);
233 static VALUE c_title_set (VALUE self, VALUE val)
235 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
237 Check_Type (val, T_STRING);
239 ecore_evas_title_set (*ee, StringValuePtr (val));
244 static VALUE c_borderless_get (VALUE self)
246 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
248 return ecore_evas_borderless_get (*ee) ? Qtrue : Qfalse;
251 static VALUE c_borderless_set (VALUE self, VALUE val)
253 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
257 ecore_evas_borderless_set (*ee, val == Qtrue ? 1 : 0);
262 static VALUE c_shaped_get (VALUE self)
264 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
266 return ecore_evas_shaped_get (*ee) ? Qtrue : Qfalse;
269 static VALUE c_shaped_set (VALUE self, VALUE val)
271 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
275 ecore_evas_shaped_set (*ee, val == Qtrue ? 1 : 0);
280 static VALUE c_sticky_get (VALUE self)
282 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
284 return ecore_evas_sticky_get (*ee) ? Qtrue : Qfalse;
287 static VALUE c_sticky_set (VALUE self, VALUE val)
289 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
293 ecore_evas_sticky_set (*ee, val == Qtrue ? 1 : 0);
298 static VALUE c_rotation_get (VALUE self)
300 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
302 return INT2FIX (ecore_evas_rotation_get (*ee));
305 static VALUE c_rotation_set (VALUE self, VALUE val)
307 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
309 Check_Type (val, T_FIXNUM);
311 ecore_evas_rotation_set (*ee, FIX2INT (val));
316 static VALUE c_delete (VALUE self)
318 GET_OBJ (self, Ecore_Evas, ee, "EcoreEvas");
320 /* reap our children */
323 ecore_evas_free (*ee);
329 void Init_EcoreEvas (void)
331 cEcoreEvas = rb_define_class_under (mEvas, "EcoreEvas", rb_cObject);
333 rb_define_private_method (rb_singleton_class (cEcoreEvas),
335 rb_define_method (cEcoreEvas, "inspect", c_inspect, 0);
336 rb_define_method (cEcoreEvas, "delete", c_delete, 0);
337 rb_define_method (cEcoreEvas, "show", c_show, 0);
338 rb_define_method (cEcoreEvas, "hide", c_hide, 0);
339 rb_define_method (cEcoreEvas, "visible?", c_visible_get, 0);
340 rb_define_method (cEcoreEvas, "raise", c_raise, 0);
341 rb_define_method (cEcoreEvas, "lower", c_lower, 0);
342 rb_define_method (cEcoreEvas, "layer", c_layer_get, 0);
343 rb_define_method (cEcoreEvas, "layer=", c_layer_set, 1);
344 rb_define_method (cEcoreEvas, "evas", c_evas, 0);
345 rb_define_method (cEcoreEvas, "get_size_min", c_get_size_min, 0);
346 rb_define_method (cEcoreEvas, "set_size_min", c_set_size_min, 2);
347 rb_define_method (cEcoreEvas, "get_size_max", c_get_size_max, 0);
348 rb_define_method (cEcoreEvas, "set_size_max", c_set_size_max, 2);
349 rb_define_method (cEcoreEvas, "move", c_move, 2);
350 rb_define_method (cEcoreEvas, "resize", c_resize, 2);
351 rb_define_method (cEcoreEvas, "title", c_title_get, 0);
352 rb_define_method (cEcoreEvas, "title=", c_title_set, 1);
353 rb_define_method (cEcoreEvas, "borderless?", c_borderless_get, 0);
354 rb_define_method (cEcoreEvas, "borderless=", c_borderless_set, 1);
355 rb_define_method (cEcoreEvas, "shaped?", c_shaped_get, 0);
356 rb_define_method (cEcoreEvas, "shaped=", c_shaped_set, 1);
357 rb_define_method (cEcoreEvas, "sticky?", c_sticky_get, 0);
358 rb_define_method (cEcoreEvas, "sticky=", c_sticky_set, 1);
359 rb_define_method (cEcoreEvas, "rotation", c_rotation_get, 0);
360 rb_define_method (cEcoreEvas, "rotation=", c_rotation_set, 1);
362 evases = rb_hash_new ();
363 rb_global_variable (&evases);