summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-02-20 08:28:51 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-02-20 08:28:51 +0000
commit861095398453d08ed3b104c1f3bad4d970552fab (patch)
treed3c9cc8b01c7cdbdd51c7b122bc3ef6eddb76f34 /ext
parent869a0bb90a901b11a8683d251f1b36e5a82729cd (diff)
1.1b8pre2
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@85 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r--ext/Setup1
-rw-r--r--ext/gtk/gtk.c504
-rw-r--r--ext/kconv/kconv.c8
3 files changed, 359 insertions, 154 deletions
diff --git a/ext/Setup b/ext/Setup
index d772f65d9a..9e3a2474c3 100644
--- a/ext/Setup
+++ b/ext/Setup
@@ -11,4 +11,3 @@
#tkutil
#tcltklib
#gtk
-mandel
diff --git a/ext/gtk/gtk.c b/ext/gtk/gtk.c
index ca98982615..70d9550616 100644
--- a/ext/gtk/gtk.c
+++ b/ext/gtk/gtk.c
@@ -248,13 +248,6 @@ make_widget(klass, widget)
return make_gobject(klass, GTK_OBJECT(widget));
}
-static void
-free_gstyle(style)
- GtkStyle *style;
-{
- gtk_style_unref(style);
-}
-
static VALUE
make_gstyle(style)
GtkStyle *style;
@@ -262,7 +255,7 @@ make_gstyle(style)
VALUE obj;
gtk_style_ref(style);
- obj = Data_Wrap_Struct(gStyle, 0, free_gstyle, style);
+ obj = Data_Wrap_Struct(gStyle, 0, gtk_style_unref, style);
rb_funcall(obj, id_init, 0, 0);
return obj;
@@ -283,13 +276,6 @@ get_gstyle(style)
return gstyle;
}
-static void
-free_gaccel(tbl)
- GtkAcceleratorTable *tbl;
-{
- gtk_accelerator_table_unref(tbl);
-}
-
static VALUE
make_gtkacceltbl(tbl)
GtkAcceleratorTable *tbl;
@@ -297,7 +283,8 @@ make_gtkacceltbl(tbl)
VALUE obj;
gtk_accelerator_table_ref(tbl);
- obj = Data_Wrap_Struct(gAcceleratorTable, 0, free_gaccel, tbl);
+ obj = Data_Wrap_Struct(gAcceleratorTable, 0,
+ gtk_accelerator_table_unref, tbl);
rb_funcall(obj, id_init, 0, 0);
return obj;
@@ -319,18 +306,11 @@ get_gtkacceltbl(value)
return tbl;
}
-static void
-free_gtkprevinfo(info)
- GtkPreviewInfo *info;
-{
- /* no need to free() */
-}
-
static VALUE
make_gtkprevinfo(info)
GtkPreviewInfo *info;
{
- VALUE obj = Data_Wrap_Struct(gPreviewInfo, 0, free_gtkprevinfo, info);
+ VALUE obj = Data_Wrap_Struct(gPreviewInfo, 0, 0, info);
rb_funcall(obj, id_init, 0, 0);
return obj;
}
@@ -351,13 +331,6 @@ get_gtkprevinfo(value)
return info;
}
-static void
-free_ttips(tips)
- GtkTooltips *tips;
-{
- gtk_tooltips_unref(tips);
-}
-
static VALUE
make_ttips(klass, tips)
VALUE klass;
@@ -366,7 +339,7 @@ make_ttips(klass, tips)
VALUE obj;
gtk_tooltips_ref(tips);
- obj = Data_Wrap_Struct(klass, 0, free_ttips, tips);
+ obj = Data_Wrap_Struct(klass, 0, gtk_tooltips_unref, tips);
rb_funcall(obj, id_init, 0, 0);
return obj;
}
@@ -387,13 +360,6 @@ get_ttips(tips)
return gtips;
}
-static void
-free_gdkfont(font)
- GdkFont *font;
-{
- gdk_font_unref(font);
-}
-
static VALUE
make_gdkfont(font)
GdkFont *font;
@@ -401,7 +367,7 @@ make_gdkfont(font)
VALUE obj;
gdk_font_ref(font);
- obj = Data_Wrap_Struct(gdkFont, 0, free_gdkfont, font);
+ obj = Data_Wrap_Struct(gdkFont, 0, gdk_font_unref, font);
rb_funcall(obj, id_init, 0, 0);
return obj;
}
@@ -488,19 +454,12 @@ get_tobj(obj, klass)
#define make_gdkrectangle(r) make_tobj(r, gdkRectangle, sizeof(GdkRectangle))
#define get_gdkrectangle(r) ((GdkRectangle*)get_tobj(r, gdkRectangle))
-static void
-free_gdkcmap(cmap)
- GdkColormap *cmap;
-{
- gdk_colormap_unref(cmap);
-}
-
static VALUE
make_gdkcmap(cmap)
GdkColormap *cmap;
{
gdk_colormap_ref(cmap);
- return Data_Wrap_Struct(gdkColormap, 0, free_gdkcmap, cmap);
+ return Data_Wrap_Struct(gdkColormap, 0, gdk_colormap_unref, cmap);
}
static GdkColormap*
@@ -519,19 +478,12 @@ get_gdkcmap(cmap)
return gcmap;
}
-static void
-free_gdkvisual(visual)
- GdkVisual *visual;
-{
- gdk_visual_unref(visual);
-}
-
static VALUE
make_gdkvisual(visual)
GdkVisual *visual;
{
gdk_visual_ref(visual);
- return Data_Wrap_Struct(gdkVisual, 0, free_gdkvisual, visual);
+ return Data_Wrap_Struct(gdkVisual, 0, gdk_visual_unref, visual);
}
static GdkVisual*
@@ -550,68 +502,45 @@ get_gdkvisual(visual)
return gvisual;
}
-static void
-free_gdkwindow(window)
- GdkWindow *window;
-{
- gdk_window_unref(window);
-}
-
static VALUE
-make_gdkwindow(window)
- GdkWindow *window;
+make_gdkdraw(klass, draw, ref, unref)
+ VALUE klass;
+ GdkDrawable *draw;
+ void (*ref)();
+ void (*unref)();
{
- gdk_window_ref(window);
- return Data_Wrap_Struct(gdkWindow, 0, free_gdkwindow, window);
+ (*ref)(draw);
+ return Data_Wrap_Struct(gdkWindow, 0, unref, draw);
}
+#define make_gdkwindow2(c,w) make_gdkdraw(c,(w),gdk_window_ref,gdk_window_unref)
+#define make_gdkbitmap2(c,w) make_gdkdraw(c,(w),gdk_bitmap_ref,gdk_bitmap_unref)
+#define make_gdkpixmap2(c,w) make_gdkdraw(c,(w),gdk_pixmap_ref,gdk_pixmap_unref)
+#define make_gdkwindow(w) make_gdkwindow0(gdkWindow,(w))
+#define make_gdkbitmap(w) make_gdkbitmap0(gdkBitmap,(w))
+#define make_gdkpixmap(w) make_gdkpixmap0(gdkPixmap,(w))
+
static GdkWindow*
-get_gdkwindow(window)
- VALUE window;
+get_gdkdraw(draw, klass, kname)
+ VALUE draw, klass;
+ char *kname;
{
- GdkWindow *gwindow;
+ GdkDrawable *d;
- if (NIL_P(window)) return NULL;
+ if (NIL_P(draw)) return NULL;
- if (!obj_is_kind_of(window, gdkWindow)) {
- TypeError("not a GdkWindow");
+ if (!obj_is_kind_of(draw, klass)) {
+ TypeError("not a %s", kname);
}
- Data_Get_Struct(window, GdkWindow, gwindow);
+ Data_Get_Struct(draw, GdkDrawable, d);
- return gwindow;
+ return d;
}
-static void
-free_gdkpixmap(pixmap)
- GdkPixmap *pixmap;
-{
- gdk_pixmap_unref(pixmap);
-}
-
-static VALUE
-make_gdkpixmap(klass, pixmap)
- VALUE klass;
- GdkPixmap *pixmap;
-{
- gdk_pixmap_ref(pixmap);
- return Data_Wrap_Struct(klass, 0, free_gdkpixmap, pixmap);
-}
-
-static GdkPixmap*
-get_gdkpixmap(pixmap)
- VALUE pixmap;
-{
- GdkPixmap *gpixmap;
-
- if (NIL_P(pixmap)) return NULL;
-
- if (!obj_is_kind_of(pixmap, gdkPixmap)) {
- TypeError("not a GdkPixmap");
- }
- Data_Get_Struct(pixmap, GdkPixmap, gpixmap);
-
- return gpixmap;
-}
+#define get_gdkdrawable(w) get_gdkdraw((w),gdkDrawable,"GdkDrawable")
+#define get_gdkwindow(w) get_gdkdraw((w),gdkWindow,"GdkWindow")
+#define get_gdkpixmap(w) get_gdkdraw((w),gdkPixmap,"GdkPixmap")
+#define get_gdkbitmap(w) get_gdkdraw((w),gdkBitmap,"GdkBitmap")
static VALUE
gdkpmap_s_new(self, win, w, h, depth)
@@ -621,7 +550,7 @@ gdkpmap_s_new(self, win, w, h, depth)
GdkWindow *window = get_gdkwindow(win);
new = gdk_pixmap_new(window, NUM2INT(w), NUM2INT(h), NUM2INT(depth));
- return make_gdkpixmap(self, new);
+ return make_gdkpixmap2(self,new);
}
static VALUE
@@ -638,7 +567,7 @@ gdkpmap_create_from_data(self, win, data, w, h, depth, fg, bg)
NUM2INT(depth),
get_gdkcolor(fg),
get_gdkcolor(bg));
- return make_gdkpixmap(self, new);
+ return make_gdkpixmap2(self,new);
}
static VALUE
@@ -656,8 +585,8 @@ gdkpmap_create_from_xpm(self, win, tcolor, fname)
if (!new) {
ArgError("Pixmap not created from %s", RSTRING(fname)->ptr);
}
- return assoc_new(make_gdkpixmap(self, new),
- make_gdkpixmap(gdkBitmap, mask));
+ return assoc_new(make_gdkpixmap2(self,new),
+ make_gdkbitmap(mask));
}
static VALUE
@@ -681,8 +610,8 @@ gdkpmap_create_from_xpm_d(self, win, tcolor, data)
get_gdkcolor(tcolor),
buf);
- return assoc_new(make_gdkpixmap(self, new),
- make_gdkpixmap(gdkBitmap, mask));
+ return assoc_new(make_gdkpixmap2(self,new),
+ make_gdkbitmap(mask));
}
static VALUE
@@ -693,7 +622,7 @@ gdkbmap_s_new(self, win, w, h)
GdkWindow *window = get_gdkwindow(win);
new = gdk_pixmap_new(window, NUM2INT(w), NUM2INT(h), 1);
- return make_gdkpixmap(self, new);
+ return make_gdkpixmap2(self,new);
}
static VALUE
@@ -707,20 +636,14 @@ gdkbmap_create_from_data(self, win, data, w, h)
new = gdk_bitmap_create_from_data(window,
RSTRING(data)->ptr,
NUM2INT(w), NUM2INT(h));
- return make_gdkpixmap(self, (GdkPixmap*)new);
-}
-
-static void
-free_gdkimage(image)
- GdkImage *image;
-{
+ return make_gdkbitmap2(self,new);
}
static VALUE
make_gdkimage(image)
GdkImage *image;
{
- return Data_Wrap_Struct(gdkImage, 0, free_gdkimage, image);
+ return Data_Wrap_Struct(gdkImage, 0, gdk_image_destroy, image);
}
static GdkImage*
@@ -735,6 +658,9 @@ get_gdkimage(image)
TypeError("not a GdkImage");
}
Data_Get_Struct(image, GdkImage, gimage);
+ if (gimage == 0) {
+ ArgError("destroyed GdkImage");
+ }
return gimage;
}
@@ -800,22 +726,16 @@ gdkimage_destroy(self)
VALUE self;
{
gdk_image_destroy(get_gdkimage(self));
+ DATA_PTR(self) = 0;
return Qnil;
}
-static void
-free_gdkevent(event)
- GdkEvent *event;
-{
- gdk_event_free(event);
-}
-
static VALUE
make_gdkevent(event)
GdkEvent *event;
{
event = gdk_event_copy(event);
- return Data_Wrap_Struct(gdkEvent, 0, free_gdkevent, event);
+ return Data_Wrap_Struct(gdkEvent, 0, gdk_event_free, event);
}
static GdkEvent*
@@ -835,6 +755,56 @@ get_gdkevent(event)
}
static VALUE
+make_gdkgc(gc)
+ GdkGC *gc;
+{
+ return Data_Wrap_Struct(gdkGC, 0, gdk_gc_destroy, gc);
+}
+
+static GdkGC*
+get_gdkgc(gc)
+ VALUE gc;
+{
+ GdkGC *ggc;
+
+ if (NIL_P(gc)) return NULL;
+
+ if (!obj_is_instance_of(gc, gdkGC)) {
+ TypeError("not a GdkGC");
+ }
+ Data_Get_Struct(gc, GdkGC, ggc);
+ if (ggc == 0) {
+ ArgError("destroyed GdkGC");
+ }
+
+ return ggc;
+}
+
+static VALUE
+gdkgc_s_new(self, win)
+ VALUE self, win;
+{
+ return make_gdkgc(gdk_gc_new(get_widget(win)->window));
+}
+
+static VALUE
+gdkgc_copy(self, copy)
+ VALUE copy;
+{
+ gdk_gc_copy(get_gdkgc(self), get_gdkgc(copy));
+ return copy;
+}
+
+static VALUE
+gdkgc_destroy(self)
+ VALUE self;
+{
+ gdk_gc_destroy(get_gdkgc(self));
+ DATA_PTR(self) = 0;
+ return Qnil;
+}
+
+static VALUE
glist2ary(list)
GList *list;
{
@@ -951,7 +921,7 @@ arg_to_value(arg)
#endif
#ifdef GTK_TYPE_GDK_PIXMAP
else if (arg->type == GTK_TYPE_GDK_PIXMAP) {
- return make_gdkpixmap(gdkPixmap, GTK_VALUE_BOXED(*arg));
+ return make_gdkpixmap(GTK_VALUE_BOXED(*arg));
}
#endif
#ifdef GTK_TYPE_GDK_VISUAL
@@ -3662,7 +3632,7 @@ image_get(self)
gtk_image_get(GTK_IMAGE(widget), &val, &mask);
return assoc_new(make_gdkimage(self, val),
- make_gdkpixmap(self, mask));
+ make_gdkpixmap(mask));
}
static VALUE
@@ -3673,7 +3643,6 @@ preview_initialize(self, type)
return Qnil;
}
-
static VALUE
preview_size(self, w, h)
VALUE self, w, h;
@@ -3684,11 +3653,65 @@ preview_size(self, w, h)
return self;
}
-#if 0
- rb_define_method(gPixmap, "put", preview_size, 8);
- rb_define_method(gPixmap, "put_row", preview_size, 5);
- rb_define_method(gPixmap, "draw_row", preview_size, 4);
-#endif
+static VALUE
+preview_put(self, win, gc, srcx, srcy, dstx, dsty, w, h)
+ VALUE self, win, gc, srcx, srcy, dstx, dsty, w, h;
+{
+ GtkWidget *widget = get_widget(self);
+
+ gtk_preview_put(GTK_PREVIEW(widget), get_gdkwindow(win), get_gdkgc(gc),
+ NUM2INT(srcx), NUM2INT(srcy),
+ NUM2INT(dstx), NUM2INT(dsty),
+ NUM2INT(w), NUM2INT(h));
+ return self;
+}
+
+static VALUE
+preview_put_row(self, src, dst, x, y, w)
+ VALUE self, src, dst, x, y, w;
+{
+ GtkWidget *widget = get_widget(self);
+ int width = NUM2INT(w);
+ int dlen = width;
+
+ if (GTK_PREVIEW(widget)->type == GTK_PREVIEW_COLOR) {
+ dlen *= 3;
+ }
+ Check_Type(src, T_STRING);
+ if (RSTRING(src)->len < dlen) {
+ ArgError("src too short");
+ }
+ Check_Type(dst, T_STRING);
+ if (RSTRING(dst)->len < dlen) {
+ ArgError("dst too short");
+ }
+ str_modify(dst);
+ gtk_preview_put_row(GTK_PREVIEW(widget),
+ RSTRING(src)->ptr, RSTRING(dst)->ptr,
+ NUM2INT(x), NUM2INT(y), width);
+ return self;
+}
+
+static VALUE
+preview_draw_row(self, data, x, y, w)
+ VALUE self, data, x, y, w;
+{
+ GtkWidget *widget = get_widget(self);
+ int width = NUM2INT(w);
+ int dlen = width;
+
+ if (GTK_PREVIEW(widget)->type == GTK_PREVIEW_COLOR) {
+ dlen *= 3;
+ }
+ Check_Type(data, T_STRING);
+ if (RSTRING(data)->len < dlen) {
+ ArgError("data too short");
+ }
+
+ gtk_preview_draw_row(GTK_PREVIEW(widget), RSTRING(data)->ptr,
+ NUM2INT(x), NUM2INT(y), width);
+ return self;
+}
static VALUE
preview_set_expand(self, expand)
@@ -3723,7 +3746,7 @@ static VALUE
preview_set_install_cmap(self, cmap)
VALUE self, cmap;
{
- gtk_preview_set_install_cmap(NUM2INT(cmap));
+ gtk_preview_set_install_cmap(RTEST(cmap));
return Qnil;
}
@@ -3739,16 +3762,14 @@ static VALUE
preview_get_visual(self)
VALUE self;
{
- GdkVisual *v = gtk_preview_get_visual();
- return make_gdkvisual(v);
+ return make_gdkvisual(gtk_preview_get_visual());
}
static VALUE
preview_get_cmap(self)
VALUE self;
{
- GdkColormap *c = gtk_preview_get_cmap();
- return make_gdkcmap(c);
+ return make_gdkcmap(gtk_preview_get_cmap());
}
static VALUE
@@ -4754,8 +4775,8 @@ pixmap_get(self)
gtk_pixmap_get(GTK_PIXMAP(widget), &val, &mask);
- return assoc_new(make_gdkpixmap(self, val),
- make_gdkpixmap(self, mask));
+ return assoc_new(make_gdkpixmap(val),
+ make_gdkbitmap(mask));
}
static VALUE
@@ -5387,6 +5408,168 @@ gtk_m_main(self)
return Qnil;
}
+
+static VALUE
+gdkdraw_draw_point(self, gc, x, y)
+ VALUE self, gc, x, y;
+{
+ gdk_draw_point(get_gdkdrawable(self), get_gdkgc(gc),
+ NUM2INT(x), NUM2INT(y));
+ return self;
+}
+
+static VALUE
+gdkdraw_draw_line(self, gc, x1, y1, x2, y2)
+ VALUE self, gc, x1, y1, x2, y2;
+{
+ gdk_draw_line(get_gdkdrawable(self), get_gdkgc(gc),
+ NUM2INT(x1), NUM2INT(y1),
+ NUM2INT(x2), NUM2INT(y2));
+ return self;
+}
+
+static VALUE
+gdkdraw_draw_rect(self, gc, filled, x, y, w, h)
+ VALUE self, gc, filled, x, y, w, h;
+{
+ gdk_draw_rectangle(get_gdkdrawable(self), get_gdkgc(gc),
+ RTEST(filled),
+ NUM2INT(x), NUM2INT(y),
+ NUM2INT(w), NUM2INT(h));
+ return self;
+}
+
+static VALUE
+gdkdraw_draw_arc(self, gc, filled, x, y, w, h, a1, a2)
+ VALUE gc, filled, x, y, w, h, a1, a2;
+{
+ gdk_draw_arc(get_gdkdrawable(self), get_gdkgc(gc),
+ RTEST(filled),
+ NUM2INT(x), NUM2INT(y),
+ NUM2INT(w), NUM2INT(h),
+ NUM2INT(a1), NUM2INT(a2));
+ return self;
+}
+
+static VALUE
+gdkdraw_draw_poly(self, gc, filled, pnts)
+ VALUE self, gc, filled, pnts;
+{
+ GdkPoint *points;
+ int i;
+
+ Check_Type(pnts, T_ARRAY);
+ points = ALLOCA_N(GdkPoint,RARRAY(pnts)->len);
+ for (i=0; i<RARRAY(pnts)->len; i++) {
+ Check_Type(RARRAY(pnts)->ptr[i], T_ARRAY);
+ if (RARRAY(RARRAY(pnts)->ptr[i])->len < 2) {
+ ArgError("point %d should be array of size 2", i);
+ }
+ points[i].x = NUM2INT(RARRAY(RARRAY(pnts)->ptr[i])->ptr[0]);
+ points[i].y = NUM2INT(RARRAY(RARRAY(pnts)->ptr[i])->ptr[1]);
+ }
+ gdk_draw_polygon(get_gdkdrawable(self), get_gdkgc(gc),
+ RTEST(filled),
+ points,
+ RARRAY(pnts)->len);
+ return self;
+}
+
+static VALUE
+gdkdraw_draw_text(self, font, gc, x, y, str)
+ VALUE self, font, gc, x, y, str;
+{
+ Check_Type(str, T_STRING);
+ gdk_draw_text(get_gdkdrawable(self), get_gdkfont(font), get_gdkgc(gc),
+ NUM2INT(x), NUM2INT(y),
+ RSTRING(str)->ptr, RSTRING(str)->len);
+ return self;
+}
+
+static VALUE
+gdkdraw_draw_pmap(self, gc, src, xsrc, ysrc, xdst, ydst, w, h)
+ VALUE self, gc, src, xsrc, ysrc, xdst, ydst, w, h;
+{
+ gdk_draw_pixmap(get_gdkdrawable(self), get_gdkgc(gc),
+ get_gdkdrawable(src),
+ NUM2INT(xsrc), NUM2INT(ysrc),
+ NUM2INT(xdst), NUM2INT(ydst),
+ NUM2INT(w), NUM2INT(h));
+ return self;
+}
+
+static VALUE
+gdkdraw_draw_bmap(self, gc, src, xsrc, ysrc, xdst, ydst, w, h)
+ VALUE self, gc, src, xsrc, ysrc, xdst, ydst, w, h;
+{
+ gdk_draw_bitmap(get_gdkdrawable(self), get_gdkgc(gc),
+ get_gdkdrawable(src),
+ NUM2INT(xsrc), NUM2INT(ysrc),
+ NUM2INT(xdst), NUM2INT(ydst),
+ NUM2INT(w), NUM2INT(h));
+ return self;
+}
+
+static VALUE
+gdkdraw_draw_image(self, gc, image, xsrc, ysrc, xdst, ydst, w, h)
+ VALUE self, gc, image, xsrc, ysrc, xdst, ydst, w, h;
+{
+ gdk_draw_image(get_gdkdrawable(self), get_gdkgc(gc),
+ get_gdkimage(image),
+ NUM2INT(xsrc), NUM2INT(ysrc),
+ NUM2INT(xdst), NUM2INT(ydst),
+ NUM2INT(w), NUM2INT(h));
+ return self;
+}
+
+static VALUE
+gdkdraw_draw_pnts(self, gc, pnts)
+ VALUE self, gc, pnts;
+{
+ GdkPoint *points;
+ int i;
+
+ Check_Type(pnts, T_ARRAY);
+ points = ALLOCA_N(GdkPoint,RARRAY(pnts)->len);
+ for (i=0; i<RARRAY(pnts)->len; i++) {
+ Check_Type(RARRAY(pnts)->ptr[i], T_ARRAY);
+ if (RARRAY(RARRAY(pnts)->ptr[i])->len < 2) {
+ ArgError("point %d should be array of size 2", i);
+ }
+ points[i].x = NUM2INT(RARRAY(RARRAY(pnts)->ptr[i])->ptr[0]);
+ points[i].y = NUM2INT(RARRAY(RARRAY(pnts)->ptr[i])->ptr[1]);
+ }
+ gdk_draw_points(get_gdkdrawable(self), get_gdkgc(gc),
+ points,
+ RARRAY(pnts)->len);
+ return self;
+}
+
+static VALUE
+gdkdraw_draw_segs(self, gc, segs)
+ VALUE self, gc, segs;
+{
+ GdkSegment *segments;
+ int i;
+
+ Check_Type(segs, T_ARRAY);
+ segments = ALLOCA_N(GdkSegment,RARRAY(segs)->len);
+ for (i=0; i<RARRAY(segs)->len; i++) {
+ Check_Type(RARRAY(segs)->ptr[i], T_ARRAY);
+ if (RARRAY(RARRAY(segs)->ptr[i])->len < 4) {
+ ArgError("segment %d should be array of size 4", i);
+ }
+ segments[i].x1 = NUM2INT(RARRAY(RARRAY(segs)->ptr[i])->ptr[0]);
+ segments[i].y1 = NUM2INT(RARRAY(RARRAY(segs)->ptr[i])->ptr[1]);
+ segments[i].x2 = NUM2INT(RARRAY(RARRAY(segs)->ptr[i])->ptr[2]);
+ segments[i].y2 = NUM2INT(RARRAY(RARRAY(segs)->ptr[i])->ptr[3]);
+ }
+ gdk_draw_segments(get_gdkdrawable(self), get_gdkgc(gc),
+ segments,
+ RARRAY(segs)->len);
+ return self;
+}
+
static gint
idle()
{
@@ -6126,9 +6309,9 @@ Init_gtk()
/* Preview */
rb_define_method(gPreview, "initialize", preview_initialize, 1);
rb_define_method(gPreview, "size", preview_size, 2);
- rb_define_method(gPreview, "put", preview_size, 8);
- rb_define_method(gPreview, "put_row", preview_size, 5);
- rb_define_method(gPreview, "draw_row", preview_size, 4);
+ rb_define_method(gPreview, "put", preview_put, 8);
+ rb_define_method(gPreview, "put_row", preview_put_row, 5);
+ rb_define_method(gPreview, "draw_row", preview_draw_row, 4);
rb_define_method(gPreview, "set_expand", preview_set_expand, 1);
rb_define_singleton_method(gPreview, "set_gamma", preview_set_gamma, 1);
rb_define_singleton_method(gPreview, "set_color_cube",
@@ -6233,10 +6416,19 @@ Init_gtk()
/* GdkFont */
rb_define_method(gdkFont, "==", gdkfnt_equal, 1);
- /* GdkBitmap */
- rb_define_singleton_method(gdkBitmap, "new", gdkbmap_s_new, 3);
- rb_define_singleton_method(gdkBitmap, "create_from_data",
- gdkbmap_create_from_data, 4);
+ /* GdkDrawable */
+ rb_define_method(gdkDrawable, "draw_point", gdkdraw_draw_point, 3);
+ rb_define_method(gdkDrawable, "draw_line", gdkdraw_draw_line, 5);
+ rb_define_method(gdkDrawable, "draw_rectangle", gdkdraw_draw_rect, 6);
+ rb_define_method(gdkDrawable, "draw_arc", gdkdraw_draw_arc, 8);
+ rb_define_method(gdkDrawable, "draw_polygon", gdkdraw_draw_poly, 3);
+ rb_define_method(gdkDrawable, "draw_string", gdkdraw_draw_text, 5);
+ rb_define_method(gdkDrawable, "draw_text", gdkdraw_draw_text, 5);
+ rb_define_method(gdkDrawable, "draw_pixmap", gdkdraw_draw_pmap, 8);
+ rb_define_method(gdkDrawable, "draw_bitmap", gdkdraw_draw_bmap, 8);
+ rb_define_method(gdkDrawable, "draw_image", gdkdraw_draw_image, 8);
+ rb_define_method(gdkDrawable, "draw_points", gdkdraw_draw_pnts, 2);
+ rb_define_method(gdkDrawable, "draw_segments", gdkdraw_draw_segs, 2);
/* GdkPixmap */
rb_define_singleton_method(gdkPixmap, "new", gdkpmap_s_new, 4);
@@ -6247,8 +6439,18 @@ Init_gtk()
rb_define_singleton_method(gdkPixmap, "create_from_xpm_d",
gdkpmap_create_from_xpm_d, 3);
+ /* GdkBitmap */
+ rb_define_singleton_method(gdkBitmap, "new", gdkbmap_s_new, 3);
+ rb_define_singleton_method(gdkBitmap, "create_from_data",
+ gdkbmap_create_from_data, 4);
+
/* GdkWindow */
+ /* GdkGC */
+ rb_define_singleton_method(gdkGC, "new", gdkgc_s_new, 1);
+ rb_define_method(gdkGC, "copy", gdkgc_copy, 1);
+ rb_define_method(gdkGC, "destroy", gdkgc_destroy, 0);
+
/* GdkImage */
rb_define_singleton_method(gdkImage, "new_bitmap", gdkimage_s_newbmap, 4);
rb_define_singleton_method(gdkImage, "new", gdkimage_s_new, 4);
diff --git a/ext/kconv/kconv.c b/ext/kconv/kconv.c
index 011b8b6b61..5762e3531f 100644
--- a/ext/kconv/kconv.c
+++ b/ext/kconv/kconv.c
@@ -1780,15 +1780,19 @@ kconv_kconv(argc, argv)
VALUE src, dst;
VALUE in, out;
int in_code, out_code;
+ char *codename = 0;
rb_scan_args(argc, argv, "12", &src, &out, &in);
Check_Type(src, T_STRING);
if (NIL_P(out)) {
- out_code = _JIS;
+ codename = rb_get_kcode();
+ goto codeselect;
}
else if (TYPE(out) == T_STRING) {
- switch (RSTRING(out)->ptr[0]) {
+ codename = RSTRING(out)->ptr;
+ codeselect:
+ switch (codename[0]) {
case 'E': case 'e':
out_code = _EUC;
break;