gdk3 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,305 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright (C) 2011 Ruby-GNOME2 Project Team
4
+ * Copyright (C) 2002-2004 Ruby-GNOME2 Project Team
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
+ #include "rbgdk3private.h"
26
+
27
+ #define RG_TARGET_NAMESPACE mProperty
28
+
29
+ /* deprecated
30
+ static VALUE
31
+ rg_s_text_property_to_text_list(int argc, VALUE *argv, G_GNUC_UNUSED VALUE self)
32
+ {
33
+ gint num, i;
34
+ gchar** list;
35
+ VALUE ret = Qnil;
36
+
37
+ if (argc == 3) {
38
+ VALUE encoding, format, text;
39
+ rb_scan_args(argc, argv, "30", &encoding, &format, &text);
40
+ StringValue(text);
41
+
42
+ num = gdk_text_property_to_text_list(RVAL2ATOM(encoding),
43
+ NUM2INT(format),
44
+ (const guchar*)RVAL2CSTR(text),
45
+ RSTRING_LEN(text), &list);
46
+ } else {
47
+ VALUE display, encoding, format, text;
48
+ rb_scan_args(argc, argv, "40", &display, &encoding, &format, &text);
49
+ StringValue(text);
50
+
51
+ num = gdk_text_property_to_text_list_for_display(RVAL2GDKDISPLAYOBJECT(display),
52
+ RVAL2ATOM(encoding),
53
+ NUM2INT(format),
54
+ (const guchar*)RVAL2CSTR(text),
55
+ RSTRING_LEN(text),
56
+ &list);
57
+ }
58
+
59
+ ret = rb_ary_new2(num);
60
+ for (i =0; i < num; i++){
61
+ rb_ary_push(ret, CSTR2RVAL(list[i]));
62
+ }
63
+ gdk_free_text_list(list);
64
+ return ret;
65
+ }
66
+ */
67
+
68
+ /* TODO
69
+ static VALUE
70
+ rg_s_text_property_to_utf8_list(int argc, VALUE *argv, G_GNUC_UNUSED VALUE self)
71
+ {
72
+ gint num, i;
73
+ gchar** list;
74
+ VALUE ret = Qnil;
75
+
76
+ if (argc == 3) {
77
+ VALUE encoding, format, text;
78
+ rb_scan_args(argc, argv, "30", &encoding, &format, &text);
79
+ StringValue(text);
80
+
81
+ num = gdk_text_property_to_utf8_list(RVAL2ATOM(encoding),
82
+ NUM2INT(format),
83
+ (const guchar*)RVAL2CSTR(text),
84
+ RSTRING_LEN(text), &list);
85
+ } else {
86
+ VALUE display, encoding, format, text;
87
+ rb_scan_args(argc, argv, "40", &display, &encoding, &format, &text);
88
+ StringValue(text);
89
+
90
+ num = gdk_text_property_to_utf8_list_for_display(RVAL2GDKDISPLAYOBJECT(display),
91
+ RVAL2ATOM(encoding),
92
+ NUM2INT(format),
93
+ (const guchar*)RVAL2CSTR(text),
94
+ RSTRING_LEN(text),
95
+ &list);
96
+ }
97
+
98
+ ret = rb_ary_new2(num);
99
+ for (i =0; i < num; i++){
100
+ rb_ary_push(ret, CSTR2RVAL(list[i]));
101
+ }
102
+ g_strfreev(list);
103
+ return ret;
104
+ }
105
+ */
106
+
107
+ /* deprecated
108
+ static VALUE
109
+ rg_s_string_to_compound_text(int argc, VALUE *argv, G_GNUC_UNUSED VALUE self)
110
+ {
111
+ gint num;
112
+ GdkAtom encoding;
113
+ gint format;
114
+ guchar *ctext;
115
+ gint length;
116
+
117
+ if (argc == 1) {
118
+ VALUE str;
119
+ rb_scan_args(argc, argv, "10", &str);
120
+ num = gdk_string_to_compound_text(RVAL2CSTR(str),
121
+ &encoding, &format,
122
+ &ctext, &length);
123
+ } else {
124
+ VALUE display, str;
125
+
126
+ rb_scan_args(argc, argv, "20", &display, &str);
127
+ num = gdk_string_to_compound_text_for_display(RVAL2GDKDISPLAYOBJECT(display),
128
+ RVAL2CSTR(str),
129
+ &encoding, &format,
130
+ &ctext, &length);
131
+ }
132
+
133
+ if (num == 0){
134
+ VALUE ret = CSTR2RVAL((const char*)ctext);
135
+ gdk_free_compound_text(ctext);
136
+ return rb_ary_new3(3, GDKATOM2RVAL(encoding),
137
+ INT2NUM(format), ret);
138
+ } else {
139
+ rb_raise(rb_eRuntimeError, "failed to converts a string %d\n", num);
140
+ }
141
+ return Qnil;
142
+ }
143
+ */
144
+
145
+ static VALUE
146
+ rg_s_utf8_to_string_target(G_GNUC_UNUSED VALUE self, VALUE str)
147
+ {
148
+ return CSTR2RVAL((const char*)gdk_utf8_to_string_target(RVAL2CSTR(str)));
149
+ }
150
+
151
+ /* deprecated
152
+ static VALUE
153
+ rg_s_utf8_to_compound_text(int argc, VALUE *argv, G_GNUC_UNUSED VALUE self)
154
+ {
155
+ GdkAtom encoding;
156
+ gint format;
157
+ guchar *ctext;
158
+ gint length;
159
+ gint ret;
160
+
161
+ if (argc == 1) {
162
+ VALUE str;
163
+ rb_scan_args(argc, argv, "10", &str);
164
+
165
+ ret = gdk_utf8_to_compound_text(RVAL2CSTR(str),
166
+ &encoding, &format,
167
+ &ctext, &length);
168
+ } else {
169
+ VALUE display, str;
170
+
171
+ rb_scan_args(argc, argv, "20", &display, &str);
172
+ ret = gdk_utf8_to_compound_text_for_display(RVAL2GDKDISPLAYOBJECT(display),
173
+ RVAL2CSTR(str),
174
+ &encoding, &format,
175
+ &ctext, &length);
176
+ }
177
+
178
+ if (ret){
179
+ VALUE val = CSTR2RVAL((const char*)ctext);
180
+ gdk_free_compound_text(ctext);
181
+ return rb_ary_new3(3, GDKATOM2RVAL(encoding),
182
+ INT2NUM(format), val);
183
+ } else {
184
+ rb_raise(rb_eRuntimeError, "failed to converts a string %d\n", ret);
185
+ }
186
+ return Qnil;
187
+ }
188
+ */
189
+
190
+ /* TODO
191
+ static VALUE
192
+ rg_s_change(int argc, VALUE *argv, VALUE self)
193
+ {
194
+ int fmt, len;
195
+ void* dat;
196
+ GdkAtom ntype;
197
+ VALUE win, property, type, size= Qnil, mode, src;
198
+
199
+ if(6 == argc)
200
+ rb_scan_args(argc, argv, "60", &win, &property, &type, &size, &mode, &src);
201
+ else
202
+ rb_scan_args(argc, argv, "50", &win, &property, &type, &mode, &src);
203
+
204
+ rbgtk_atom2selectiondata(type, size, src, &ntype, &dat, &fmt, &len);
205
+
206
+ gdk_property_change(RVAL2GDKWINDOW(win), RVAL2ATOM(property),
207
+ ntype, fmt, RVAL2GDKPROPMODE(mode), dat, len);
208
+
209
+ rbgtk_atom2selectiondata_free(ntype, dat);
210
+
211
+ return self;
212
+ }
213
+ */
214
+
215
+ static VALUE
216
+ rg_s_get(int argc, VALUE *argv, G_GNUC_UNUSED VALUE self)
217
+ {
218
+ /* for argument processing */
219
+ GdkAtom rtype;
220
+ gint rfmt, rlen;
221
+ guchar* rdat;
222
+ VALUE win, property, type, offset=INT2FIX(0), length=INT2FIX(9999), delete;
223
+
224
+ /* for inner processing */
225
+ gint i;
226
+ size_t j;
227
+ VALUE ret = 0;
228
+
229
+ if(6 == argc)
230
+ rb_scan_args(argc, argv, "60", &win, &property, &type, &offset, &length, &delete);
231
+ else
232
+ rb_scan_args(argc, argv, "40", &win, &property, &type, &delete);
233
+
234
+ if(gdk_property_get(RVAL2GDKWINDOW(win), RVAL2ATOM(property), RVAL2ATOM(type),
235
+ NUM2INT(offset), NUM2INT(length),
236
+ RVAL2CBOOL(delete), &rtype, &rfmt, &rlen, &rdat) == FALSE){
237
+ return Qnil;
238
+ }
239
+
240
+ switch(rfmt){
241
+ case 8:
242
+ default:
243
+ ret = RBG_STRING_SET_UTF8_ENCODING(rb_str_new((const char*)rdat, rlen));
244
+ break;
245
+
246
+ case 16:
247
+ ret = rb_ary_new();
248
+
249
+ for( i = 0; i < rlen; i++){
250
+ rb_ary_push(ret, rb_Integer(((unsigned short*)rdat)[i]));
251
+ }
252
+ break;
253
+
254
+ case 32:
255
+ ret = rb_ary_new();
256
+
257
+ if(rtype != GDK_SELECTION_TYPE_ATOM){
258
+ for(j = 0; j < (rlen/sizeof(unsigned long)); j++){
259
+ rb_ary_push(ret, INT2FIX(((unsigned long*)rdat)[j]));
260
+ }
261
+ } else {
262
+ for(j = 0; j < (rlen/sizeof(unsigned long)); j++){
263
+ rb_ary_push(ret, GDKATOM2RVAL((GdkAtom)((unsigned long*)rdat)[j]));
264
+ }
265
+ }
266
+ break;
267
+ }
268
+
269
+ return rb_ary_new3(3, GDKATOM2RVAL(rtype),
270
+ ret, INT2NUM(rlen));
271
+ }
272
+
273
+ static VALUE
274
+ rg_s_delete(VALUE self, VALUE win, VALUE property)
275
+ {
276
+ gdk_property_delete(RVAL2GDKWINDOW(win), RVAL2ATOM(property));
277
+ return self;
278
+ }
279
+
280
+ void
281
+ Init_gdk_property(VALUE mGdk)
282
+ {
283
+ VALUE RG_TARGET_NAMESPACE = rb_define_module_under(mGdk, "Property");
284
+
285
+ /* deprecated
286
+ RG_DEF_SMETHOD(text_property_to_text_list, -1);
287
+ */
288
+ /* TODO
289
+ RG_DEF_SMETHOD(text_property_to_utf8_list, -1);
290
+ */
291
+ /* deprecated
292
+ RG_DEF_SMETHOD(string_to_compound_text, -1);
293
+ */
294
+ RG_DEF_SMETHOD(utf8_to_string_target, 1);
295
+ /* deprecated
296
+ RG_DEF_SMETHOD(utf8_to_compound_text, -1);
297
+ */
298
+ /* TODO
299
+ RG_DEF_SMETHOD(change, -1);
300
+ */
301
+ RG_DEF_SMETHOD(get, -1);
302
+ RG_DEF_SMETHOD(delete, 2);
303
+
304
+ G_DEF_CLASS(GDK_TYPE_PROP_MODE, "PropMode", RG_TARGET_NAMESPACE);
305
+ }
@@ -0,0 +1,140 @@
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
+ * 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
+ #include "rbgdk3private.h"
26
+
27
+ #define RG_TARGET_NAMESPACE cRectangle
28
+ #define _SELF(r) (RVAL2GDKRECTANGLE(r))
29
+
30
+ static VALUE
31
+ rg_initialize(VALUE self, VALUE x, VALUE y, VALUE width, VALUE height)
32
+ {
33
+ GdkRectangle new;
34
+
35
+ new.x = NUM2INT(x);
36
+ new.y = NUM2INT(y);
37
+ new.width = NUM2INT(width);
38
+ new.height = NUM2INT(height);
39
+
40
+ G_INITIALIZE(self, &new);
41
+ return Qnil;
42
+ }
43
+
44
+ static VALUE
45
+ rg_intersect(VALUE self, VALUE other)
46
+ {
47
+ GdkRectangle dest;
48
+ gboolean ret = gdk_rectangle_intersect(_SELF(self), _SELF(other), &dest);
49
+ return ret ? GDKRECTANGLE2RVAL(&dest) : Qnil;
50
+ }
51
+
52
+ static VALUE
53
+ rg_union(VALUE self, VALUE other)
54
+ {
55
+ GdkRectangle dest;
56
+ gdk_rectangle_union(_SELF(self), _SELF(other), &dest);
57
+ return GDKRECTANGLE2RVAL(&dest);
58
+ }
59
+
60
+ /* Struct accessors */
61
+ static VALUE
62
+ rg_x(VALUE self)
63
+ {
64
+ return INT2NUM(_SELF(self)->x);
65
+ }
66
+
67
+ static VALUE
68
+ rg_y(VALUE self)
69
+ {
70
+ return INT2NUM(_SELF(self)->y);
71
+ }
72
+
73
+ static VALUE
74
+ rg_width(VALUE self)
75
+ {
76
+ return INT2NUM(_SELF(self)->width);
77
+ }
78
+
79
+ static VALUE
80
+ rg_height(VALUE self)
81
+ {
82
+ return INT2NUM(_SELF(self)->height);
83
+ }
84
+
85
+ static VALUE
86
+ rg_set_x(VALUE self, VALUE x)
87
+ {
88
+ _SELF(self)->x = NUM2INT(x);
89
+ return self;
90
+ }
91
+
92
+ static VALUE
93
+ rg_set_y(VALUE self, VALUE y)
94
+ {
95
+ _SELF(self)->y = NUM2INT(y);
96
+ return self;
97
+ }
98
+
99
+ static VALUE
100
+ rg_set_width(VALUE self, VALUE width)
101
+ {
102
+ _SELF(self)->width = NUM2INT(width);
103
+ return self;
104
+ }
105
+
106
+ static VALUE
107
+ rg_set_height(VALUE self, VALUE height)
108
+ {
109
+ _SELF(self)->height = NUM2INT(height);
110
+ return self;
111
+ }
112
+
113
+ static VALUE
114
+ rg_to_a(VALUE self)
115
+ {
116
+ GdkRectangle* a = _SELF(self);
117
+ return rb_ary_new3(4, INT2FIX(a->x), INT2FIX(a->y),
118
+ INT2FIX(a->width), INT2FIX(a->height));
119
+ }
120
+
121
+ void
122
+ Init_gdk_rectangle(VALUE mGdk)
123
+ {
124
+ VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(GDK_TYPE_RECTANGLE, "Rectangle", mGdk);
125
+
126
+ RG_DEF_METHOD(initialize, 4);
127
+ RG_DEF_METHOD(intersect, 1);
128
+ RG_DEF_ALIAS("&", "intersect");
129
+ RG_DEF_METHOD(union, 1);
130
+ RG_DEF_ALIAS("|", "union");
131
+ RG_DEF_METHOD(x, 0);
132
+ RG_DEF_METHOD(y, 0);
133
+ RG_DEF_METHOD(width, 0);
134
+ RG_DEF_METHOD(height, 0);
135
+ RG_DEF_METHOD(set_x, 1);
136
+ RG_DEF_METHOD(set_y, 1);
137
+ RG_DEF_METHOD(set_width, 1);
138
+ RG_DEF_METHOD(set_height, 1);
139
+ RG_DEF_METHOD(to_a, 0);
140
+ }
@@ -0,0 +1,199 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright (C) 2011 Ruby-GNOME2 Project Team
4
+ * Copyright (C) 2002,2003 Ruby-GNOME2 Project Team
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
+
28
+ #define RG_TARGET_NAMESPACE mRGB
29
+ #define RVAL2DRAW(s) RVAL2GDKDRAWABLE(s)
30
+
31
+ static VALUE
32
+ rg_s_draw_rgb_image(int argc, VALUE *argv, VALUE self)
33
+ {
34
+ VALUE win, gc, x, y, w, h, dither, buf, rowstride, xdith, ydith;
35
+
36
+ rb_scan_args(argc, argv, "92", &win, &gc, &x, &y, &w, &h, &dither,
37
+ &buf, &rowstride, &xdith, &ydith);
38
+
39
+ if (argc == 9){
40
+ gdk_draw_rgb_image(RVAL2DRAW(win), RVAL2GDKGC(gc),
41
+ NUM2INT(x), NUM2INT(y),
42
+ NUM2INT(w), NUM2INT(h),
43
+ RVAL2GDKRGBDITHER(dither),
44
+ (guchar*)RVAL2CSTR(buf),
45
+ NUM2INT(rowstride));
46
+ } else {
47
+ gdk_draw_rgb_image_dithalign(RVAL2DRAW(win), RVAL2GDKGC(gc),
48
+ NUM2INT(x), NUM2INT(y),
49
+ NUM2INT(w), NUM2INT(h),
50
+ RVAL2GDKRGBDITHER(dither),
51
+ (guchar*)RVAL2CSTR(buf),
52
+ NUM2INT(rowstride),
53
+ NUM2INT(xdith), NUM2INT(ydith));
54
+ }
55
+
56
+ return self;
57
+ }
58
+
59
+ static VALUE
60
+ rg_s_draw_indexed_image(VALUE self, VALUE win, VALUE rbgc, VALUE rbx, VALUE rby,
61
+ VALUE rbwidth, VALUE rbheight, VALUE rbdither,
62
+ VALUE rbbuf, VALUE rbrowstride, VALUE rbcolors)
63
+ {
64
+ GdkDrawable *drawable = RVAL2DRAW(win);
65
+ GdkGC *gc = RVAL2GDKGC(rbgc);
66
+ gint x = NUM2INT(rbx);
67
+ gint y = NUM2INT(rby);
68
+ gint width = NUM2INT(rbwidth);
69
+ gint height = NUM2INT(rbheight);
70
+ GdkRgbDither dither = RVAL2GDKRGBDITHER(rbdither);
71
+ const guchar *buf = (const guchar *)RVAL2CSTR(rbbuf);
72
+ gint rowstride = NUM2INT(rbrowstride);
73
+ long n;
74
+ guint32 *colors = RVAL2GUINT32S(rbcolors, n);
75
+ GdkRgbCmap *cmap;
76
+
77
+ if (n < 0 || n > 255) {
78
+ g_free(colors);
79
+
80
+ rb_raise(rb_eArgError, "colors: out of range (0 - 255)");
81
+ }
82
+
83
+ cmap = gdk_rgb_cmap_new(colors, n);
84
+
85
+ g_free(colors);
86
+
87
+ gdk_draw_indexed_image(drawable, gc, x, y, width, height, dither, buf, rowstride, cmap);
88
+
89
+ gdk_rgb_cmap_free(cmap);
90
+
91
+ return self;
92
+ }
93
+
94
+ static VALUE
95
+ rg_s_draw_gray_image(VALUE self, VALUE win, VALUE gc, VALUE x, VALUE y, VALUE w, VALUE h, VALUE dither, VALUE buf, VALUE rowstride)
96
+ {
97
+ gdk_draw_gray_image(RVAL2DRAW(win), RVAL2GDKGC(gc),
98
+ NUM2INT(x), NUM2INT(y),
99
+ NUM2INT(w), NUM2INT(h),
100
+ RVAL2GDKRGBDITHER(dither),
101
+ (guchar*)RVAL2CSTR(buf),
102
+ NUM2INT(rowstride));
103
+ return self;
104
+ }
105
+
106
+ static VALUE
107
+ rg_s_draw_rgb_32_image(int argc, VALUE *argv, VALUE self)
108
+ {
109
+ VALUE win, gc, x, y, w, h, dither, buf, rowstride, xdith, ydith;
110
+
111
+ rb_scan_args(argc, argv, "92", &win, &gc, &x, &y, &w, &h, &dither,
112
+ &buf, &rowstride, &xdith, &ydith);
113
+
114
+ if (argc == 9){
115
+ gdk_draw_rgb_32_image(RVAL2DRAW(win), RVAL2GDKGC(gc),
116
+ NUM2INT(x), NUM2INT(y),
117
+ NUM2INT(w), NUM2INT(h),
118
+ RVAL2GDKRGBDITHER(dither),
119
+ (guchar*)RVAL2CSTR(buf),
120
+ NUM2INT(rowstride));
121
+ } else {
122
+ gdk_draw_rgb_32_image_dithalign(RVAL2DRAW(win), RVAL2GDKGC(gc),
123
+ NUM2INT(x), NUM2INT(y),
124
+ NUM2INT(w), NUM2INT(h),
125
+ RVAL2GDKRGBDITHER(dither),
126
+ (guchar*)RVAL2CSTR(buf),
127
+ NUM2INT(rowstride), NUM2INT(xdith), NUM2INT(ydith));
128
+ }
129
+ return self;
130
+ }
131
+
132
+ static VALUE
133
+ rg_s_find_color(VALUE self, VALUE colormap, VALUE color)
134
+ {
135
+ gdk_rgb_find_color(RVAL2GDKCOLORMAP(colormap),
136
+ RVAL2GDKCOLOR(color));
137
+ return self;
138
+ }
139
+
140
+ static VALUE
141
+ rg_s_set_install(VALUE self, VALUE install)
142
+ {
143
+ gdk_rgb_set_install(RVAL2CBOOL(install));
144
+ return self;
145
+ }
146
+
147
+ static VALUE
148
+ rg_s_set_min_colors(VALUE self, VALUE min_colors)
149
+ {
150
+ gdk_rgb_set_min_colors(NUM2INT(min_colors));
151
+ return self;
152
+ }
153
+
154
+ static VALUE
155
+ rg_s_visual(G_GNUC_UNUSED VALUE self)
156
+ {
157
+ return GOBJ2RVAL(gdk_rgb_get_visual());
158
+ }
159
+
160
+ static VALUE
161
+ rg_s_colormap(G_GNUC_UNUSED VALUE self)
162
+ {
163
+ return GOBJ2RVAL(gdk_rgb_get_colormap());
164
+ }
165
+
166
+ static VALUE
167
+ rg_s_ditherable_p(G_GNUC_UNUSED VALUE self)
168
+ {
169
+ return CBOOL2RVAL(gdk_rgb_ditherable());
170
+ }
171
+
172
+ static VALUE
173
+ rg_s_set_verbose(VALUE self, VALUE verbose)
174
+ {
175
+ gdk_rgb_set_verbose(RVAL2CBOOL(verbose));
176
+ return self;
177
+ }
178
+
179
+ void
180
+ Init_gdk_rgb(VALUE mGdk)
181
+ {
182
+ VALUE RG_TARGET_NAMESPACE = rb_define_module_under(mGdk, "RGB");
183
+
184
+ RG_DEF_SMETHOD(draw_rgb_image, -1);
185
+ RG_DEF_SMETHOD(draw_indexed_image, 10);
186
+ RG_DEF_SMETHOD(draw_gray_image, 9);
187
+ RG_DEF_SMETHOD(draw_rgb_32_image, -1);
188
+ RG_DEF_SMETHOD(find_color, 2);
189
+ RG_DEF_SMETHOD(set_install, 1);
190
+ RG_DEF_SMETHOD(set_min_colors, 0);
191
+ RG_DEF_SMETHOD(visual, 0);
192
+ RG_DEF_SMETHOD(colormap, 0);
193
+ RG_DEF_SMETHOD_P(ditherable, 0);
194
+ RG_DEF_SMETHOD(set_verbose, 1);
195
+
196
+ G_DEF_CLASS(GDK_TYPE_RGB_DITHER, "Dither", RG_TARGET_NAMESPACE);
197
+ }
198
+ */
199
+