From: matz@... (Yukihiro Matsumoto) Date: 1999-01-28T12:44:20+09:00 Subject: [ruby-list:11777] Re: ruby-gtk spin button まつもと ゆきひろです In message "[ruby-list:11776] ruby-gtk spin button" on 99/01/28, takeshi@SoftAgency.co.jp writes: |はじめまして。村上毅と申します。 | |ruby と ruby-gtk を最近利用しはじめたのですが、 |ruby-gtk-0.13 に spin button が無かったので、 |以下(添付)のように付け加えてみました。 |自分自身では一部の関数しか使用してませんが、 |いかがなものでしょう? 追加するかどうかはメンテナの神田さんに任せます.ただ,このま まだとまずそうな部分が散見されます. ざっとみるかぎり気になるのは |+ widget = gtk_spin_button_new(adj,arg2,arg3); 引数が与えられないとarg2, arg3はQnil(=4)なので問題ありそう. |+static VALUE |+sbtn_get_adjustment(self,adj) |+ VALUE self, adj; |+{ |+ return (GtkWidget *)get_gobject(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(get_widget(self)))); |+} このキャスト(GtkWidget *)は要らない気がする. |+static VALUE |+sbtn_get_value_as_float(self) |+ VALUE self; |+{ |+ float w; |+ w = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(get_widget(self))); |+ return w; |+} as_intを呼ぶのは違うんじゃないかと.さらにfloat wをそのまま VALUEとして返してますが,float_new(w)とする必要があります. |+ gfloat k; |+ k = (gfloat)RFLOAT(rb_Float(n))->value; k = NUM2DBL(v); なんてマクロがあります. |+static VALUE |+sbtn_set_update_policy(self,w) |+ VALUE self, w; |+{ |+ (void)gtk_spin_button_set_update_policy(GTK_SPIN_BUTTON(get_widget(self)) |+ ,(GtkSpinButtonUpdatePolicy)get_gobject(w) ); |+} GtkSpinButtonUpdatePolicyってenumじゃありませんか? だとする とget_gobjectではなく,NUM2INTを呼ぶべきでしょう. |+static VALUE |+sbtn_spin(self,n,m) |+ VALUE self, n, m; |+{ |+ (void)gtk_spin_button_spin(GTK_SPIN_BUTTON(get_widget(self)) |+ , NUM2INT(n) |+ ,(gfloat)RFLOAT(m)->value); |+} これもNUM2DBLを使うべきです.でないと,mにFloat以外のものを 指定した時に落ちます.