はじめまして、五十嵐@早大 です。
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);