2 * $Id: rb_window.c 77 2004-08-19 17:39:29Z tilman $
4 * Copyright (C) 2004 ruby-ecore team (see AUTHORS)
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
27 #include "../ecore/rb_ecore.h"
28 #include "rb_ecore_x.h"
29 #include "rb_window.h"
33 static void c_mark (RbWindow *w)
35 if (!NIL_P (w->parent))
36 rb_gc_mark (w->parent);
39 static void c_free (RbWindow *w)
42 ecore_x_window_del (w->real);
47 VALUE TO_ECORE_X_WINDOW (VALUE parent, Ecore_X_Window w)
50 RbWindow *window = NULL;
55 self = Data_Make_Struct (cWindow, RbWindow, c_mark, free, window);
58 window->parent = parent;
60 rb_obj_call_init (self, 0, NULL);
65 static VALUE c_new (int argc, VALUE *argv, VALUE klass)
67 VALUE self, parent, geom[4];
68 RbWindow *window = NULL, *p = NULL;
69 int i, igeom[4] = {0, 0, 0, 0};
70 Ecore_X_Window pwin = 0;
72 self = Data_Make_Struct (cWindow, RbWindow, c_mark, c_free, window);
74 rb_scan_args (argc, argv, "05",
75 &parent, &geom[0], &geom[1], &geom[2], &geom[3]);
77 if (!NIL_P (parent)) {
78 CHECK_CLASS (parent, cWindow);
79 Data_Get_Struct (parent, RbWindow, p);
83 for (i = 0; i < 4; i++)
84 if (!NIL_P (geom[i])) {
85 Check_Type (geom[i], T_FIXNUM);
86 igeom[i] = FIX2INT (geom[i]);
89 window->real = ecore_x_window_new (pwin, igeom[0], igeom[1],
91 window->parent = parent;
93 rb_obj_call_init (self, 0, NULL);
98 static VALUE c_equal_value (VALUE self, VALUE other)
100 GET_OBJ (self, RbWindow, w1);
102 CHECK_CLASS (other, cWindow);
103 GET_OBJ (other, RbWindow, w2);
105 return w1->real == w2->real ? Qtrue : Qfalse;
108 static VALUE c_show (VALUE self)
110 GET_OBJ (self, RbWindow, win);
112 ecore_x_window_show (win->real);
117 static VALUE c_hide (VALUE self)
119 GET_OBJ (self, RbWindow, win);
121 ecore_x_window_hide (win->real);
126 static VALUE c_delete (VALUE self)
128 GET_OBJ (self, RbWindow, win);
131 ecore_x_window_del (win->real);
138 static VALUE c_raise (VALUE self)
140 GET_OBJ (self, RbWindow, win);
142 ecore_x_window_raise (win->real);
147 static VALUE c_lower (VALUE self)
149 GET_OBJ (self, RbWindow, win);
151 ecore_x_window_lower (win->real);
156 static VALUE c_move (VALUE self, VALUE x, VALUE y)
158 GET_OBJ (self, RbWindow, win);
160 Check_Type (x, T_FIXNUM);
161 Check_Type (y, T_FIXNUM);
163 ecore_x_window_move (win->real, FIX2INT (x), FIX2INT (y));
168 static VALUE c_resize (VALUE self, VALUE w, VALUE h)
170 GET_OBJ (self, RbWindow, win);
172 Check_Type (w, T_FIXNUM);
173 Check_Type (h, T_FIXNUM);
175 ecore_x_window_move (win->real, FIX2INT (w), FIX2INT (h));
180 static VALUE c_get_size (VALUE self)
184 GET_OBJ (self, RbWindow, win);
186 ecore_x_window_size_get (win->real, &x, &y);
188 return rb_ary_new3 (2, INT2FIX (x), INT2FIX (y));
191 static VALUE c_get_geometry (VALUE self)
193 int x = 0, y = 0, w = 0, h = 0;
195 GET_OBJ (self, RbWindow, win);
197 ecore_x_window_geometry_get (win->real, &x, &y, &w, &h);
199 return rb_ary_new3 (4, INT2FIX (x), INT2FIX (y),
200 INT2FIX (w), INT2FIX (h));
203 static VALUE c_set_event_mask (VALUE self, VALUE val)
205 GET_OBJ (self, RbWindow, win);
207 Check_Type (val, T_FIXNUM);
209 ecore_x_event_mask_set (win->real, FIX2INT (val));
214 static VALUE c_unset_event_mask (VALUE self, VALUE val)
216 GET_OBJ (self, RbWindow, win);
218 Check_Type (val, T_FIXNUM);
220 ecore_x_event_mask_unset (win->real, FIX2INT (val));
225 static VALUE c_set_protocol (VALUE self, VALUE proto, VALUE on)
227 GET_OBJ (self, RbWindow, win);
229 Check_Type (proto, T_FIXNUM);
232 ecore_x_window_prop_protocol_set (win->real, FIX2INT (proto),
238 void Init_Window (void)
240 cWindow = rb_define_class_under (mX, "Window", rb_cObject);
242 rb_define_singleton_method (cWindow, "new", c_new, -1);
243 rb_define_method (cWindow, "==", c_equal_value, 1);
244 rb_define_method (cWindow, "show", c_show, 0);
245 rb_define_method (cWindow, "hide", c_hide, 0);
246 rb_define_method (cWindow, "delete", c_delete, 0);
247 rb_define_method (cWindow, "raise", c_raise, 0);
248 rb_define_method (cWindow, "lower", c_lower, 0);
249 rb_define_method (cWindow, "move", c_move, 2);
250 rb_define_method (cWindow, "resize", c_resize, 2);
251 rb_define_method (cWindow, "get_size", c_get_size, 0);
252 rb_define_method (cWindow, "get_geometry", c_get_geometry, 0);
253 rb_define_method (cWindow, "set_event_mask", c_set_event_mask, 1);
254 rb_define_method (cWindow, "unset_event_mask",
255 c_unset_event_mask, 1);
256 rb_define_method (cWindow, "set_protocol", c_set_protocol, 2);