From: Hiroshi Igarashi Date: 1998-07-02T06:56:14+09:00 Subject: [ruby-list:8611] patch for ruby-gtk-0.08 はじめまして、五十嵐@早大 です。 Rubyは1年半ほど利用させてもらっています。Rubyにはかなりお世話に なったので少しずつでも還元していきたいです。 たいしたものはありませんが、今までに作ったスクリプトを http://www.ueda.info.waseda.ac.jp/~igarashi/work/ruby/index.html に置いてあります。まだRubyで書かれたスクリプト自体があまり世に 出回ってなくて貴重なので、いくらかの価値はあるでしょうか? 現在私が主に使っている言語は Ruby:Java:KL1:Prolog = 1:1:1:1 という感じです。その時々で必要に応じ組み合わせて使っています。 Perlにはまっていた時期もありましたが、Rubyを知り捨てました^_^; 本題ですが、gtk拡張モジュールへメソッドを追加するパッチです (メイル末尾にあります)。取り込んでいただけないでしょうか? 次のようにして非矩形ウィンドウが作れます。 require 'gtk' window = Gtk::Window::new(Gtk::WINDOW_TOPLEVEL) gdk_pixmap, gdk_pixmap_mask = Gdk::Pixmap::create_from_xpm(window.window, nil, pixmap_filename) pixmap_x, pixmap_y, pixmap_width, pixmap_height, pixmap_depth = gdk_pixmap.get_geometry fixed = Gtk::Fixed::new() window.add(fixed) fixed.set_usize(pixmap_width, pixmap_height) pixmap = Gtk::Pixmap::new(gdk_pixmap, gdk_pixmap_mask) fixed.put(pixmap, 0, 0) window.shape_combine_mask(gdk_pixmap_mask, 0, 0) ---- 五十嵐 宏 (Hiroshi Igarashi) [早稲田大学理工学部 情報学科4年 上田研究室配属] *** gtk.c.orig Fri Jun 26 18:04:19 1998 --- gtk.c Wed Jul 1 04:18:51 1998 *************** *** 511,516 **** --- 511,528 ---- #define get_gdkbitmap(w) get_gdkdraw((w),gdkBitmap,"GdkBitmap") static VALUE + gdkdraw_get_geometry(self) + VALUE self; + { + gint x, y, width, height, depth; + + gdk_window_get_geometry(get_gdkdrawable(self), + &x, &y, &width, &height, &depth); + return ary_new3(5, INT2NUM(x), INT2NUM(y), + INT2NUM(width), INT2NUM(height), INT2NUM(depth)); + } + + static VALUE gdkpmap_s_new(self, win, w, h, depth) VALUE self, win, w, h, depth; { *************** *** 2055,2060 **** --- 2067,2082 ---- } static VALUE + widget_shape_combine_mask(self, gdk_pixmap_mask, x, y) + VALUE self, gdk_pixmap_mask, x, y; + { + gtk_widget_shape_combine_mask(get_widget(self), + get_gdkpixmap(gdk_pixmap_mask), + NUM2INT(x), NUM2INT(y)); + return self; + } + + static VALUE bbox_get_child_size_default(self) VALUE self; { *************** *** 6086,6091 **** --- 6132,6138 ---- rb_define_method(gWidget, "ancestor?", widget_is_ancestor, 1); rb_define_method(gWidget, "child?", widget_is_child, 1); rb_define_method(gWidget, "window", widget_window, 0); + rb_define_method(gWidget, "shape_combine_mask", widget_shape_combine_mask, 3); rb_define_singleton_method(gWidget, "push_colomap", widget_push_cmap, 1); rb_define_singleton_method(gWidget, "push_visual", widget_push_visual, 1); *************** *** 6706,6711 **** --- 6756,6762 ---- 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); + rb_define_method(gdkDrawable, "get_geometry", gdkdraw_get_geometry, 0); /* GdkPixmap */ rb_define_singleton_method(gdkPixmap, "new", gdkpmap_s_new, 4);