gdk3 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/Rakefile +53 -0
  2. data/ext/gdk3/depend +11 -0
  3. data/ext/gdk3/extconf.rb +127 -0
  4. data/ext/gdk3/gdk3.def +12 -0
  5. data/ext/gdk3/init.c +35 -0
  6. data/ext/gdk3/rbgdk.c +540 -0
  7. data/ext/gdk3/rbgdk3.h +71 -0
  8. data/ext/gdk3/rbgdk3conversions.h +118 -0
  9. data/ext/gdk3/rbgdk3private.h +93 -0
  10. data/ext/gdk3/rbgdkatom.c +122 -0
  11. data/ext/gdk3/rbgdkcairo.c +95 -0
  12. data/ext/gdk3/rbgdkcolor.c +137 -0
  13. data/ext/gdk3/rbgdkconst.c +33 -0
  14. data/ext/gdk3/rbgdkcursor.c +99 -0
  15. data/ext/gdk3/rbgdkdevice.c +197 -0
  16. data/ext/gdk3/rbgdkdisplay.c +482 -0
  17. data/ext/gdk3/rbgdkdisplaymanager.c +55 -0
  18. data/ext/gdk3/rbgdkdragcontext.c +191 -0
  19. data/ext/gdk3/rbgdkdraw.c +520 -0
  20. data/ext/gdk3/rbgdkevent.c +926 -0
  21. data/ext/gdk3/rbgdkgeometry.c +252 -0
  22. data/ext/gdk3/rbgdkkeymap.c +151 -0
  23. data/ext/gdk3/rbgdkkeyval.c +108 -0
  24. data/ext/gdk3/rbgdkpango.c +197 -0
  25. data/ext/gdk3/rbgdkpangorenderer.c +144 -0
  26. data/ext/gdk3/rbgdkpixbuf.c +176 -0
  27. data/ext/gdk3/rbgdkproperty.c +305 -0
  28. data/ext/gdk3/rbgdkrectangle.c +140 -0
  29. data/ext/gdk3/rbgdkrgb.c +199 -0
  30. data/ext/gdk3/rbgdkrgba.c +142 -0
  31. data/ext/gdk3/rbgdkscreen.c +443 -0
  32. data/ext/gdk3/rbgdkselection.c +146 -0
  33. data/ext/gdk3/rbgdkthreads.c +77 -0
  34. data/ext/gdk3/rbgdktimecoord.c +133 -0
  35. data/ext/gdk3/rbgdkvisual.c +251 -0
  36. data/ext/gdk3/rbgdkwindow.c +1044 -0
  37. data/ext/gdk3/rbgdkwindowattr.c +191 -0
  38. data/ext/gdk3/rbgdkx11.c +102 -0
  39. data/ext/gdk3/rbgdkx11x11window.c +66 -0
  40. data/extconf.rb +49 -0
  41. data/lib/gdk3.rb +3 -0
  42. data/lib/gdk3/base.rb +50 -0
  43. data/lib/gdk3/deprecated.rb +152 -0
  44. metadata +156 -0
@@ -0,0 +1,55 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright (C) 2011 Ruby-GNOME2 Project Team
4
+ * Copyright (C) 2002-2006 Ruby-GNOME2 Project Team
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., 51 Franklin Street, Fifth Floor, Boston,
19
+ * MA 02110-1301 USA
20
+ */
21
+
22
+ #include "rbgdk3private.h"
23
+
24
+ #define RG_TARGET_NAMESPACE cDisplayManager
25
+ #define _SELF(obj) RVAL2GDKDISPLAYMANAGER(obj)
26
+
27
+ static VALUE
28
+ rg_s_get(G_GNUC_UNUSED VALUE self)
29
+ {
30
+ return GOBJ2RVAL(gdk_display_manager_get());
31
+ }
32
+
33
+ static VALUE
34
+ rg_displays(VALUE self)
35
+ {
36
+ return GOBJGSLIST2RVAL_FREE(gdk_display_manager_list_displays(_SELF(self)),
37
+ g_slist_free, NULL);
38
+ }
39
+
40
+ /* Move to Gdk::Display.
41
+ static VALUE
42
+ gdkdisplaymanager_get_core_pointer(VALUE self)
43
+ {
44
+ return GOBJ2RVAL(gdk_display_get_core_pointer(_SELF(self)));
45
+ }
46
+ */
47
+
48
+ void
49
+ Init_gdk_display_manager(VALUE mGdk)
50
+ {
51
+ VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(GDK_TYPE_DISPLAY_MANAGER, "DisplayManager", mGdk);
52
+
53
+ RG_DEF_SMETHOD(get, 0);
54
+ RG_DEF_METHOD(displays, 0);
55
+ }
@@ -0,0 +1,191 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright (C) 2011 Ruby-GNOME2 Project Team
4
+ * Copyright (C) 2002,2003 Masao Mutoh
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., 51 Franklin Street, Fifth Floor, Boston,
19
+ * MA 02110-1301 USA
20
+ */
21
+
22
+ #include "rbgdk3private.h"
23
+
24
+ #define RG_TARGET_NAMESPACE cDragContext
25
+ #define _SELF(self) (RVAL2GDKDRAGCONTEXT(self))
26
+
27
+ static VALUE
28
+ rg_protocol(VALUE self)
29
+ {
30
+ return GDKDRAGPROTOCOL2RVAL(gdk_drag_context_get_protocol(_SELF(self)));
31
+ }
32
+
33
+ static VALUE
34
+ rg_source_window(VALUE self)
35
+ {
36
+ return GOBJ2RVAL(gdk_drag_context_get_source_window(_SELF(self)));
37
+ }
38
+
39
+ static VALUE
40
+ rg_dest_window(VALUE self)
41
+ {
42
+ return GOBJ2RVAL(gdk_drag_context_get_dest_window(_SELF(self)));
43
+ }
44
+
45
+ static VALUE
46
+ rg_targets(VALUE self)
47
+ {
48
+ GList *list, *cur;
49
+ VALUE ary = rb_ary_new();
50
+
51
+ list = gdk_drag_context_list_targets(_SELF(self));
52
+ for (cur = list; cur != NULL; cur = cur->next) {
53
+ rb_ary_push(ary, GDKATOM2RVAL((GdkAtom)cur->data));
54
+ }
55
+ return ary;
56
+ }
57
+
58
+ static VALUE
59
+ rg_actions(VALUE self)
60
+ {
61
+ return GDKDRAGACTION2RVAL(gdk_drag_context_get_actions(_SELF(self)));
62
+ }
63
+
64
+ static VALUE
65
+ rg_suggested_action(VALUE self)
66
+ {
67
+ return GDKDRAGACTION2RVAL(gdk_drag_context_get_suggested_action(_SELF(self)));
68
+ }
69
+
70
+ static VALUE
71
+ rg_selected_action(VALUE self)
72
+ {
73
+ return GDKDRAGACTION2RVAL(gdk_drag_context_get_selected_action(_SELF(self)));
74
+ }
75
+
76
+ static VALUE
77
+ rg_selection(VALUE self)
78
+ {
79
+ return GDKATOM2RVAL(gdk_drag_get_selection(_SELF(self)));
80
+ }
81
+
82
+ static VALUE
83
+ rg_drag_abort(VALUE self, VALUE time)
84
+ {
85
+ gdk_drag_abort(_SELF(self), NUM2UINT(time));
86
+ return self;
87
+ }
88
+
89
+ static VALUE
90
+ rg_drop_reply(VALUE self, VALUE ok, VALUE time)
91
+ {
92
+ gdk_drop_reply(_SELF(self), RVAL2CBOOL(ok), NUM2UINT(time));
93
+ return self;
94
+ }
95
+
96
+ static VALUE
97
+ rg_drag_drop(VALUE self, VALUE time)
98
+ {
99
+ gdk_drag_drop(_SELF(self), NUM2UINT(time));
100
+ return self;
101
+ }
102
+
103
+ static VALUE
104
+ rg_find_window(int argc, VALUE *argv, VALUE self)
105
+ {
106
+ VALUE drag_window, x_root, y_root;
107
+ GdkWindow *dest_window;
108
+ GdkDragProtocol prot;
109
+
110
+ if (argc == 3) {
111
+ /* deprecated
112
+ rb_scan_args(argc, argv, "30", &drag_window, &x_root, &y_root);
113
+ gdk_drag_find_window(_SELF(self),
114
+ RVAL2GDKWINDOW(drag_window),
115
+ NUM2INT(x_root), NUM2INT(y_root),
116
+ &dest_window, &prot);
117
+ */
118
+ } else {
119
+ VALUE screen;
120
+ rb_scan_args(argc, argv, "40", &drag_window, &screen, &x_root, &y_root);
121
+ gdk_drag_find_window_for_screen(_SELF(self),
122
+ RVAL2GDKWINDOW(drag_window),
123
+ RVAL2GDKSCREEN(screen),
124
+ NUM2INT(x_root), NUM2INT(y_root),
125
+ &dest_window, &prot);
126
+ }
127
+
128
+ return rb_ary_new3(2, GOBJ2RVAL(dest_window),
129
+ GDKDRAGPROTOCOL2RVAL(prot));
130
+ }
131
+
132
+ static VALUE
133
+ rg_drag_motion(VALUE self, VALUE dest_window, VALUE protocol, VALUE x_root, VALUE y_root, VALUE suggested_action, VALUE possible_actions, VALUE time)
134
+ {
135
+ gboolean ret = gdk_drag_motion(_SELF(self),
136
+ RVAL2GDKWINDOW(dest_window),
137
+ RVAL2GDKDRAGPROTOCOL(protocol),
138
+ NUM2INT(x_root), NUM2INT(y_root),
139
+ RVAL2GDKDRAGACTION(suggested_action),
140
+ RVAL2GDKDRAGACTION(possible_actions),
141
+ NUM2UINT(time));
142
+ return CBOOL2RVAL(ret);
143
+ }
144
+
145
+ static VALUE
146
+ rg_drop_finish(VALUE self, VALUE success, VALUE time)
147
+ {
148
+ gdk_drop_finish(_SELF(self), RVAL2CBOOL(success), NUM2UINT(time));
149
+ return self;
150
+ }
151
+
152
+ static VALUE
153
+ rg_drag_status(VALUE self, VALUE action, VALUE time)
154
+ {
155
+ gdk_drag_status(_SELF(self),
156
+ RVAL2GDKDRAGACTION(action), NUM2UINT(time));
157
+ return self;
158
+ }
159
+
160
+ static VALUE
161
+ rg_drag_drop_succeeded_p(VALUE self)
162
+ {
163
+ return CBOOL2RVAL(gdk_drag_drop_succeeded(_SELF(self)));
164
+ }
165
+
166
+ void
167
+ Init_gdk_dragcontext(VALUE mGdk)
168
+ {
169
+ VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(GDK_TYPE_DRAG_CONTEXT, "DragContext", mGdk);
170
+
171
+ RG_DEF_METHOD(protocol, 0);
172
+ RG_DEF_METHOD(source_window, 0);
173
+ RG_DEF_METHOD(dest_window, 0);
174
+ RG_DEF_METHOD(targets, 0);
175
+ RG_DEF_METHOD(actions, 0);
176
+ RG_DEF_METHOD(suggested_action, 0);
177
+ RG_DEF_METHOD(selected_action, 0);
178
+
179
+ RG_DEF_METHOD(selection, 0);
180
+ RG_DEF_METHOD(drag_abort, 1);
181
+ RG_DEF_METHOD(drop_reply, 2);
182
+ RG_DEF_METHOD(drag_drop, 1);
183
+ RG_DEF_METHOD(find_window, 4);
184
+ RG_DEF_METHOD(drag_motion, 7);
185
+ RG_DEF_METHOD(drop_finish, 2);
186
+ RG_DEF_METHOD(drag_status, 2);
187
+ RG_DEF_METHOD_P(drag_drop_succeeded, 0);
188
+
189
+ G_DEF_CLASS(GDK_TYPE_DRAG_PROTOCOL, "Protocol", RG_TARGET_NAMESPACE);
190
+ G_DEF_CLASS(GDK_TYPE_DRAG_ACTION, "Action", RG_TARGET_NAMESPACE);
191
+ }
@@ -0,0 +1,520 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright (C) 2011 Ruby-GNOME2 Project Team
4
+ * Copyright (C) 2002-2005 Masao Mutoh
5
+ * Copyright (C) 1998-2000 Yukihiro Matsumoto,
6
+ * Daisuke Kanda,
7
+ * Hiroshi Igarashi
8
+ *
9
+ * This library is free software; you can redistribute it and/or
10
+ * modify it under the terms of the GNU Lesser General Public
11
+ * License as published by the Free Software Foundation; either
12
+ * version 2.1 of the License, or (at your option) any later version.
13
+ *
14
+ * This library is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
+ * Lesser General Public License for more details.
18
+ *
19
+ * You should have received a copy of the GNU Lesser General Public
20
+ * License along with this library; if not, write to the Free Software
21
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
22
+ * MA 02110-1301 USA
23
+ */
24
+
25
+ /* deprecated
26
+ #include "rbgdk3private.h"
27
+ #include "rbpango.h"
28
+ #ifdef GDK_WINDOWING_X11
29
+ #include <gdk/gdkx.h>
30
+ #endif
31
+ #ifdef HAVE_RB_CAIRO_H
32
+ #include <rb_cairo.h>
33
+ #endif
34
+
35
+ #define RG_TARGET_NAMESPACE cDrawable
36
+ #define _SELF(s) RVAL2GDKDRAWABLE(s)
37
+
38
+ static VALUE
39
+ rg_visual(VALUE self)
40
+ {
41
+ return GOBJ2RVAL(_SELF(self));
42
+ }
43
+
44
+ static VALUE
45
+ rg_set_colormap(VALUE self, VALUE colormap)
46
+ {
47
+ VALUE old_colormap;
48
+
49
+ old_colormap = GOBJ2RVAL(gdk_drawable_get_colormap(_SELF(self)));
50
+ G_CHILD_REMOVE(self, old_colormap);
51
+
52
+ G_CHILD_ADD(self, colormap);
53
+ gdk_drawable_set_colormap(_SELF(self), RVAL2GDKCOLORMAP(colormap));
54
+ return self;
55
+ }
56
+
57
+ static VALUE
58
+ rg_colormap(VALUE self)
59
+ {
60
+ VALUE rb_colormap;
61
+
62
+ rb_colormap = GOBJ2RVAL(gdk_drawable_get_colormap(_SELF(self)));
63
+ G_CHILD_ADD(self, rb_colormap);
64
+ return rb_colormap;
65
+ }
66
+
67
+ static VALUE
68
+ rg_depth(VALUE self)
69
+ {
70
+ return INT2NUM(gdk_drawable_get_depth(_SELF(self)));
71
+ }
72
+
73
+ static VALUE
74
+ rg_size(VALUE self)
75
+ {
76
+ gint width, height;
77
+ gdk_drawable_get_size(_SELF(self), &width, &height);
78
+ return rb_ary_new3(2, INT2NUM(width), INT2NUM(height));
79
+ }
80
+
81
+ static VALUE
82
+ rg_clip_region(VALUE self)
83
+ {
84
+ return GDKREGION2RVAL(gdk_drawable_get_clip_region(_SELF(self)));
85
+ }
86
+
87
+ static VALUE
88
+ rg_visible_region(VALUE self)
89
+ {
90
+ return GDKREGION2RVAL(gdk_drawable_get_visible_region(_SELF(self)));
91
+ }
92
+
93
+ static VALUE
94
+ rg_draw_point(VALUE self, VALUE gc, VALUE x, VALUE y)
95
+ {
96
+ gdk_draw_point(_SELF(self), RVAL2GDKGC(gc),
97
+ NUM2INT(x), NUM2INT(y));
98
+ return self;
99
+ }
100
+
101
+ static VALUE
102
+ rg_draw_points(VALUE self, VALUE rbgc, VALUE rbpoints)
103
+ {
104
+ GdkDrawable *drawable = _SELF(self);
105
+ GdkGC *gc = RVAL2GDKGC(rbgc);
106
+ long n;
107
+ GdkPoint *points = RVAL2GDKPOINTS(rbpoints, &n);
108
+
109
+ gdk_draw_points(drawable, gc, points, n);
110
+
111
+ g_free(points);
112
+
113
+ return self;
114
+ }
115
+
116
+ static VALUE
117
+ rg_draw_line(VALUE self, VALUE gc, VALUE x1, VALUE y1, VALUE x2, VALUE y2)
118
+ {
119
+ gdk_draw_line(_SELF(self), RVAL2GDKGC(gc),
120
+ NUM2INT(x1), NUM2INT(y1),
121
+ NUM2INT(x2), NUM2INT(y2));
122
+ return self;
123
+ }
124
+
125
+ static VALUE
126
+ rg_draw_lines(VALUE self, VALUE rbgc, VALUE rbpoints)
127
+ {
128
+ GdkDrawable *drawable = _SELF(self);
129
+ GdkGC *gc = RVAL2GDKGC(rbgc);
130
+ long n;
131
+ GdkPoint *points = RVAL2GDKPOINTS(rbpoints, &n);
132
+
133
+ gdk_draw_lines(drawable, gc, points, n);
134
+
135
+ g_free(points);
136
+
137
+ return self;
138
+ }
139
+
140
+ static VALUE
141
+ rg_draw_pixbuf(VALUE self, VALUE gc, VALUE pixbuf, VALUE src_x, VALUE src_y, VALUE dest_x, VALUE dest_y, VALUE width, VALUE height, VALUE dither, VALUE x_dither, VALUE y_dither)
142
+ {
143
+ gdk_draw_pixbuf(_SELF(self),
144
+ RVAL2GDKGC(gc),
145
+ RVAL2GDKPIXBUF(pixbuf),
146
+ NUM2INT(src_x), NUM2INT(src_y),
147
+ NUM2INT(dest_x), NUM2INT(dest_y),
148
+ NUM2INT(width), NUM2INT(height),
149
+ RVAL2GDKRGBDITHER(dither),
150
+ NUM2INT(x_dither), NUM2INT(y_dither));
151
+ return self;
152
+ }
153
+
154
+ struct rbgdk_rval2gdksegments_args {
155
+ VALUE ary;
156
+ long n;
157
+ GdkSegment *result;
158
+ };
159
+
160
+ static VALUE
161
+ rbgdk_rval2gdksegments_body(VALUE value)
162
+ {
163
+ long i;
164
+ struct rbgdk_rval2gdksegments_args *args = (struct rbgdk_rval2gdksegments_args *)value;
165
+
166
+ for (i = 0; i < args->n; i++) {
167
+ VALUE segments = rb_ary_to_ary(RARRAY_PTR(args->ary)[i]);
168
+
169
+ if (RARRAY_LEN(segments) != 2)
170
+ rb_raise(rb_eArgError, "segment %ld should be array of size 4", i);
171
+
172
+ args->result[i].x1 = NUM2INT(RARRAY_PTR(segments)[0]);
173
+ args->result[i].y1 = NUM2INT(RARRAY_PTR(segments)[1]);
174
+ args->result[i].x2 = NUM2INT(RARRAY_PTR(segments)[2]);
175
+ args->result[i].y2 = NUM2INT(RARRAY_PTR(segments)[3]);
176
+ }
177
+
178
+ return Qnil;
179
+ }
180
+
181
+ static G_GNUC_NORETURN VALUE
182
+ rbgdk_rval2gdksegments_rescue(VALUE value)
183
+ {
184
+ g_free(((struct rbgdk_rval2gdksegments_args *)value)->result);
185
+
186
+ rb_exc_raise(rb_errinfo());
187
+ }
188
+
189
+ static GdkSegment *
190
+ rbgdk_rval2gdksegments(VALUE value, long *n)
191
+ {
192
+ struct rbgdk_rval2gdksegments_args args;
193
+
194
+ args.ary = rb_ary_to_ary(value);
195
+ args.n = RARRAY_LEN(args.ary);
196
+ args.result = g_new(GdkSegment, args.n + 1);
197
+
198
+ rb_rescue(rbgdk_rval2gdksegments_body, (VALUE)&args,
199
+ rbgdk_rval2gdksegments_rescue, (VALUE)&args);
200
+
201
+ if (n != NULL)
202
+ *n = args.n;
203
+
204
+ return args.result;
205
+ }
206
+
207
+ #define RVAL2GDKSEGMENTS(value, n) rbgdk_rval2gdksegments(value, n)
208
+
209
+ static VALUE
210
+ rg_draw_segments(VALUE self, VALUE rbgc, VALUE rbsegments)
211
+ {
212
+ GdkDrawable *drawable = _SELF(self);
213
+ GdkGC *gc = RVAL2GDKGC(rbgc);
214
+ long n;
215
+ GdkSegment *segments = RVAL2GDKSEGMENTS(rbsegments, &n);
216
+
217
+ gdk_draw_segments(drawable, gc, segments, n);
218
+
219
+ g_free(segments);
220
+
221
+ return self;
222
+ }
223
+
224
+ static VALUE
225
+ rg_draw_rectangle(VALUE self, VALUE gc, VALUE filled, VALUE x, VALUE y, VALUE w, VALUE h)
226
+ {
227
+ gdk_draw_rectangle(_SELF(self), RVAL2GDKGC(gc),
228
+ RVAL2CBOOL(filled),
229
+ NUM2INT(x), NUM2INT(y),
230
+ NUM2INT(w), NUM2INT(h));
231
+ return self;
232
+ }
233
+
234
+ static VALUE
235
+ rg_draw_arc(VALUE self, VALUE gc, VALUE filled, VALUE x, VALUE y, VALUE w, VALUE h, VALUE a1, VALUE a2)
236
+ {
237
+ gdk_draw_arc(_SELF(self), RVAL2GDKGC(gc),
238
+ RVAL2CBOOL(filled),
239
+ NUM2INT(x), NUM2INT(y),
240
+ NUM2INT(w), NUM2INT(h),
241
+ NUM2INT(a1), NUM2INT(a2));
242
+ return self;
243
+ }
244
+
245
+ static VALUE
246
+ rg_draw_polygon(VALUE self, VALUE rbgc, VALUE rbfilled, VALUE rbpoints)
247
+ {
248
+ GdkDrawable *drawable = _SELF(self);
249
+ GdkGC *gc = RVAL2GDKGC(rbgc);
250
+ gboolean filled = RVAL2CBOOL(rbfilled);
251
+ long n;
252
+ GdkPoint *points = RVAL2GDKPOINTS(rbpoints, &n);
253
+
254
+ gdk_draw_polygon(drawable, gc, filled, points, n);
255
+
256
+ g_free(points);
257
+
258
+ return self;
259
+ }
260
+
261
+ struct rbgdk_rval2gdktrapezoids_args {
262
+ VALUE ary;
263
+ long n;
264
+ GdkTrapezoid *result;
265
+ };
266
+
267
+ static VALUE
268
+ rbgdk_rval2gdktrapezoids_body(VALUE value)
269
+ {
270
+ long i;
271
+ struct rbgdk_rval2gdktrapezoids_args *args = (struct rbgdk_rval2gdktrapezoids_args *)value;
272
+
273
+ for (i = 0; i < args->n; i++) {
274
+ VALUE trapezoids = rb_ary_to_ary(RARRAY_PTR(args->ary)[i]);
275
+
276
+ if (RARRAY_LEN(trapezoids) != 6)
277
+ rb_raise(rb_eArgError, "trapezoid %ld should be array of size 6", i);
278
+
279
+ args->result[i].y1 = NUM2DBL(RARRAY_PTR(trapezoids)[0]);
280
+ args->result[i].x11 = NUM2DBL(RARRAY_PTR(trapezoids)[1]);
281
+ args->result[i].x21 = NUM2DBL(RARRAY_PTR(trapezoids)[2]);
282
+ args->result[i].y2 = NUM2DBL(RARRAY_PTR(trapezoids)[3]);
283
+ args->result[i].x12 = NUM2DBL(RARRAY_PTR(trapezoids)[4]);
284
+ args->result[i].x22 = NUM2DBL(RARRAY_PTR(trapezoids)[5]);
285
+ }
286
+
287
+ return Qnil;
288
+ }
289
+
290
+ static G_GNUC_NORETURN VALUE
291
+ rbgdk_rval2gdktrapezoids_rescue(VALUE value)
292
+ {
293
+ g_free(((struct rbgdk_rval2gdktrapezoids_args *)value)->result);
294
+
295
+ rb_exc_raise(rb_errinfo());
296
+ }
297
+
298
+ static GdkTrapezoid *
299
+ rbgdk_rval2gdktrapezoids(VALUE value, long *n)
300
+ {
301
+ struct rbgdk_rval2gdktrapezoids_args args;
302
+
303
+ args.ary = rb_ary_to_ary(value);
304
+ args.n = RARRAY_LEN(args.ary);
305
+ args.result = g_new(GdkTrapezoid, args.n + 1);
306
+
307
+ rb_rescue(rbgdk_rval2gdktrapezoids_body, (VALUE)&args,
308
+ rbgdk_rval2gdktrapezoids_rescue, (VALUE)&args);
309
+
310
+ if (n != NULL)
311
+ *n = args.n;
312
+
313
+ return args.result;
314
+ }
315
+
316
+ #define RVAL2GDKTRAPEZOIDS(value, n) rbgdk_rval2gdktrapezoids(value, n)
317
+
318
+ static VALUE
319
+ rg_draw_trapezoids(VALUE self, VALUE rbgc, VALUE rbtrapezoids)
320
+ {
321
+ GdkDrawable *drawable = _SELF(self);
322
+ GdkGC *gc = RVAL2GDKGC(rbgc);
323
+ long n;
324
+ GdkTrapezoid *trapezoids = RVAL2GDKTRAPEZOIDS(rbtrapezoids, &n);
325
+
326
+ gdk_draw_trapezoids(drawable, gc, trapezoids, n);
327
+
328
+ g_free(trapezoids);
329
+
330
+ return self;
331
+ }
332
+
333
+ static VALUE
334
+ rg_draw_glyphs(VALUE self, VALUE gc, VALUE font, VALUE x, VALUE y, VALUE glyphs)
335
+ {
336
+ gdk_draw_glyphs(_SELF(self), RVAL2GDKGC(gc), RVAL2PANGOFONT(font),
337
+ NUM2INT(x), NUM2INT(y),
338
+ RVAL2PANGOGLYPHSTRING(glyphs));
339
+ return self;
340
+ }
341
+
342
+ static VALUE
343
+ rg_draw_glyphs_transformed(VALUE self, VALUE gc, VALUE matrix, VALUE font, VALUE x, VALUE y, VALUE glyphs)
344
+ {
345
+ gdk_draw_glyphs_transformed(_SELF(self), RVAL2GDKGC(gc),
346
+ NIL_P(matrix) ? (PangoMatrix*)NULL : RVAL2PANGOMATRIX(matrix),
347
+ RVAL2PANGOFONT(font),
348
+ NUM2INT(x), NUM2INT(y),
349
+ RVAL2PANGOGLYPHSTRING(glyphs));
350
+ return self;
351
+ }
352
+
353
+ static VALUE
354
+ rg_draw_layout_line(int argc, VALUE *argv, VALUE self)
355
+ {
356
+ VALUE gc, x, y, line, fg, bg;
357
+
358
+ rb_scan_args(argc, argv, "42", &gc, &x, &y, &line, &fg, &bg);
359
+
360
+ gdk_draw_layout_line_with_colors(_SELF(self), RVAL2GDKGC(gc),
361
+ NUM2INT(x), NUM2INT(y),
362
+ RVAL2PANGOLAYOUTLINE(line),
363
+ RVAL2GDKCOLOR(fg),
364
+ RVAL2GDKCOLOR(bg));
365
+
366
+ return self;
367
+ }
368
+
369
+ static VALUE
370
+ rg_draw_layout(int argc, VALUE *argv, VALUE self)
371
+ {
372
+ VALUE gc, x, y, layout, fg, bg;
373
+
374
+ rb_scan_args(argc, argv, "42", &gc, &x, &y, &layout, &fg, &bg);
375
+
376
+ gdk_draw_layout_with_colors(_SELF(self), RVAL2GDKGC(gc),
377
+ NUM2INT(x), NUM2INT(y), RVAL2PANGOLAYOUT(layout),
378
+ RVAL2GDKCOLOR(fg),
379
+ RVAL2GDKCOLOR(bg));
380
+
381
+ return self;
382
+ }
383
+
384
+ static VALUE
385
+ rg_draw_drawable(VALUE self, VALUE gc, VALUE src, VALUE xsrc, VALUE ysrc, VALUE xdst, VALUE ydst, VALUE w, VALUE h)
386
+ {
387
+ gdk_draw_drawable(_SELF(self), RVAL2GDKGC(gc), _SELF(src),
388
+ NUM2INT(xsrc), NUM2INT(ysrc),
389
+ NUM2INT(xdst), NUM2INT(ydst),
390
+ NUM2INT(w), NUM2INT(h));
391
+ return self;
392
+ }
393
+
394
+ static VALUE
395
+ rg_draw_image(VALUE self, VALUE gc, VALUE image, VALUE xsrc, VALUE ysrc, VALUE xdst, VALUE ydst, VALUE w, VALUE h)
396
+ {
397
+ gdk_draw_image(_SELF(self), RVAL2GDKGC(gc),
398
+ RVAL2GDKIMAGE(image),
399
+ NUM2INT(xsrc), NUM2INT(ysrc),
400
+ NUM2INT(xdst), NUM2INT(ydst),
401
+ NUM2INT(w), NUM2INT(h));
402
+ return self;
403
+ }
404
+
405
+ static VALUE
406
+ rg_get_image(VALUE self, VALUE x, VALUE y, VALUE w, VALUE h)
407
+ {
408
+ return GOBJ2RVAL(gdk_drawable_get_image(_SELF(self),
409
+ NUM2INT(x), NUM2INT(y),
410
+ NUM2INT(w), NUM2INT(h)));
411
+ }
412
+
413
+ static VALUE
414
+ rg_copy_to_image(VALUE self, VALUE image, VALUE xsrc, VALUE ysrc, VALUE xdst, VALUE ydst, VALUE w, VALUE h)
415
+ {
416
+ return GOBJ2RVAL(gdk_drawable_copy_to_image(_SELF(self),
417
+ RVAL2GDKIMAGE(image),
418
+ NUM2INT(xsrc), NUM2INT(ysrc),
419
+ NUM2INT(xdst), NUM2INT(ydst),
420
+ NUM2INT(w), NUM2INT(h)));
421
+ }
422
+
423
+ #ifdef GDK_WINDOWING_X11
424
+ static VALUE
425
+ rg_xid(VALUE self)
426
+ {
427
+ return ULONG2NUM(GDK_DRAWABLE_XID(_SELF(self)));
428
+ }
429
+ #endif
430
+
431
+ #ifdef GDK_WINDOWING_WIN32
432
+ static VALUE
433
+ rg_handle(VALUE self)
434
+ {
435
+ HGDIOBJ handle;
436
+ handle = gdk_win32_drawable_get_handle(_SELF(self));
437
+ return ULONG2NUM(GPOINTER_TO_UINT(handle));
438
+ }
439
+ #endif
440
+
441
+ static VALUE
442
+ rg_display(VALUE self)
443
+ {
444
+ return GOBJ2RVAL(gdk_drawable_get_display(_SELF(self)));
445
+ }
446
+
447
+ static VALUE
448
+ rg_screen(VALUE self)
449
+ {
450
+ return GOBJ2RVAL(gdk_drawable_get_screen(_SELF(self)));
451
+ }
452
+
453
+ #ifdef HAVE_RB_CAIRO_H
454
+ static VALUE
455
+ rg_create_cairo_context(VALUE self)
456
+ {
457
+ VALUE rb_cr;
458
+ cairo_t *cr;
459
+ cr = gdk_cairo_create(_SELF(self));
460
+ rb_cairo_check_status(cairo_status(cr));
461
+ rb_cr = CRCONTEXT2RVAL(cr);
462
+ cairo_destroy (cr);
463
+ return rb_cr;
464
+ }
465
+ #endif
466
+
467
+ void
468
+ Init_gdk_draw(VALUE mGdk)
469
+ {
470
+ VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(GDK_TYPE_DRAWABLE, "Drawable", mGdk);
471
+
472
+ RG_DEF_METHOD(visual, 0);
473
+ RG_DEF_METHOD(set_colormap, 1);
474
+ RG_DEF_METHOD(colormap, 0);
475
+ RG_DEF_METHOD(depth, 0);
476
+ RG_DEF_METHOD(size, 0);
477
+ RG_DEF_METHOD(clip_region, 0);
478
+ RG_DEF_METHOD(visible_region, 0);
479
+ RG_DEF_METHOD(draw_point, 3);
480
+ RG_DEF_METHOD(draw_points, 2);
481
+ RG_DEF_METHOD(draw_line, 5);
482
+ RG_DEF_METHOD(draw_lines, 2);
483
+ RG_DEF_METHOD(draw_pixbuf, 11);
484
+ RG_DEF_METHOD(draw_segments, 2);
485
+ RG_DEF_METHOD(draw_rectangle, 6);
486
+ RG_DEF_METHOD(draw_arc, 8);
487
+ RG_DEF_METHOD(draw_polygon, 3);
488
+ RG_DEF_METHOD(draw_trapezoids, 2);
489
+ RG_DEF_METHOD(draw_glyphs, 5);
490
+ RG_DEF_METHOD(draw_glyphs_transformed, 6);
491
+ RG_DEF_METHOD(draw_layout_line, -1);
492
+ RG_DEF_METHOD(draw_layout, -1);
493
+ RG_DEF_METHOD(draw_drawable, 8);
494
+ RG_DEF_METHOD(draw_image, 8);
495
+ RG_DEF_METHOD(get_image, 4);
496
+ RG_DEF_METHOD(copy_to_image, 7);
497
+
498
+ #ifdef GDK_WINDOWING_X11
499
+ RG_DEF_METHOD(xid, 0);
500
+ #endif
501
+ #ifdef GDK_WINDOWING_WIN32
502
+ RG_DEF_METHOD(handle, 0);
503
+ #endif
504
+ RG_DEF_METHOD(display, 0);
505
+ RG_DEF_METHOD(screen, 0);
506
+
507
+ #ifdef HAVE_RB_CAIRO_H
508
+ RG_DEF_METHOD(create_cairo_context, 0);
509
+ #endif
510
+
511
+ #ifdef GDK_WINDOWING_X11
512
+ G_DEF_CLASS3("GdkDrawableImplX11", "DrawableImplX11", mGdk);
513
+ #elif defined(GDK_WINDOWING_WIN32)
514
+ G_DEF_CLASS3("GdkDrawableImplWin32", "DrawableImplWin32", mGdk);
515
+ #elif defined(GDK_WINDOWING_FB)
516
+ G_DEF_CLASS3("GdkDrawableFB", "DrawableFB", mGdk);
517
+ #endif
518
+ }
519
+ */
520
+