やすしです。

From: Hiroshi IGARASHI <igarashi / ueda.info.waseda.ac.jp>
Subject: [ruby-ext:00747] Gdk::Visual (Re:  Gdk::Colormap#new)
Date: Sat, 18 Dec 1999 06:19:40 +0900

> ところでGdk::Colormap#newに与えるGdk::Visualの取得手段がなかった
> ので、Gdk::Visualの定数・クラスメソッドを定義しました(添付パッチ)。

ばっちり動いてます。
# うちでは、makerだけ作って、Gdk::GLから取ってたのですっかり忘れてました。

> GdkVisual構造体のメンバについては何も定義していません。
> メンバ全部にアクセスできた方がいいですか? 

いくつか質問。

- enumを pしたときに数字じゃなくて文字列を出す方法はありますか?
  e.g
  v = Gdk::Visual.whatever
  p v.type
   => Gdk::Visual::STATIC_GRAY

- guint32の maskとかって INT2NUMで良いでしょうか?
--
         yashi

--- rbgdkcolor.c 1999/12/19 06:07:59 1.2 +++ rbgdkcolor.c 1999/12/19 07:33:41 @@ -202,6 +202,146 @@ NUM2INT(depth), (GdkVisualType)NUM2INT(type))); } +static VALUE +gdkvisual_type(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return FIX2INT(visual->type); +} + +static VALUE +gdkvisual_depth(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return INT2NUM(visual->depth); +} + +static VALUE +gdkvisual_byte_order(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return INT2FIX(visual->byte_order); +} + +static VALUE +gdkvisual_colormap_size(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return INT2FIX(visual->colormap_size); +} + +static VALUE +gdkvisual_bits_per_rgb(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return INT2FIX(visual->bits_per_rgb); +} + +static VALUE +gdkvisual_red_mask(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return INT2NUM(visual->red_mask); +} + +static VALUE +gdkvisual_red_shift(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return INT2FIX(visual->red_shift); +} + +static VALUE +gdkvisual_red_prec(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return INT2FIX(visual->red_prec); +} + +static VALUE +gdkvisual_green_mask(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return INT2NUM(visual->green_mask); +} + +static VALUE +gdkvisual_green_shift(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return INT2FIX(visual->green_shift); +} + +static VALUE +gdkvisual_green_prec(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return INT2FIX(visual->green_prec); +} + +static VALUE +gdkvisual_blue_mask(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return INT2NUM(visual->blue_mask); +} + +static VALUE +gdkvisual_blue_shift(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return INT2FIX(visual->blue_shift); +} + +static VALUE +gdkvisual_blue_prec(self) + VALUE self; +{ + GdkVisual *visual; + + visual = get_gdkvisual(self); + return INT2FIX(visual->blue_prec); +} + void Init_gtk_gdk_visual() { @@ -209,6 +349,21 @@ * Gdk::Visual */ gdkVisual = rb_define_class_under(mGdk, "Visual", rb_cData); + + rb_define_method(gdkVisual, "type", gdkvisual_type, 0); + rb_define_method(gdkVisual, "depth", gdkvisual_depth, 0); + rb_define_method(gdkVisual, "byte_order", gdkvisual_byte_order, 0); + rb_define_method(gdkVisual, "colormap_size", gdkvisual_colormap_size, 0); + rb_define_method(gdkVisual, "bits_per_rgb", gdkvisual_bits_per_rgb, 0); + rb_define_method(gdkVisual, "red_mask", gdkvisual_red_mask, 0); + rb_define_method(gdkVisual, "red_shift", gdkvisual_red_shift, 0); + rb_define_method(gdkVisual, "red_prec", gdkvisual_red_prec, 0); + rb_define_method(gdkVisual, "green_mask", gdkvisual_green_mask, 0); + rb_define_method(gdkVisual, "green_shift", gdkvisual_green_shift, 0); + rb_define_method(gdkVisual, "green_prec", gdkvisual_green_prec, 0); + rb_define_method(gdkVisual, "blue_mask", gdkvisual_blue_mask, 0); + rb_define_method(gdkVisual, "blue_shift", gdkvisual_blue_shift, 0); + rb_define_method(gdkVisual, "blue_prec", gdkvisual_blue_prec, 0); /* GdkVisualType */ rb_define_const(gdkVisual, "STATIC_GRAY", INT2FIX(GDK_VISUAL_STATIC_GRAY));