かんだです

takeshi / SoftAgency.co.jpさんの書かれた、
	「[ruby-ext:00071] ruby-gtk spin button」
からの引用です。

> 村上毅と申します
> 
> ruby-gtk-0.15 用に、spin button を追加してみました
> 本メールにパッチを添付いたします。

  まだ GtkSpinButton の Cレベルでの使い方見ていないので、確認して取りこ
んでおきます。


> +    rb_scan_args(argc, argv, "03", &arg1, &arg2, &arg3);
> +
> +    if (!NIL_P(arg1)) adj = (GtkAdjustment*)get_gobject(arg1);
> +
> +    widget = gtk_spin_button_new(adj,arg2,arg3);

  arg2, arg3 も NIL_P でチェックしといたほうがよさそう。


> +static VALUE
> +sbtn_set_adjustment(self,adj)
> +    VALUE self, adj;
> +{
> +  gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(get_widget(self))
> +                           ,(GtkAdjustment*)get_gobject(adj));
> +}

  いちおう Qnil か self を return しておいた方がいいのかな。


> +static VALUE
> +sbtn_get_adjustment(self,adj)
> +    VALUE self, adj;
> +{
> +  return get_gobject(gtk_spin_button_get_adjustment(
> +                        GTK_SPIN_BUTTON(get_widget(self))
> +                      )
> +                    );
> +}

# 引数 adj は使ってないので消してしまいましょう:)

  で、これは get_gobject() でなく、make_gobject() ですね。
  get_* は ruby object から gtk object へ変換する関数で、make_* はその逆です。
  この場合は gAdjustment で返すから、

  return make_gobject(gAdjustment,
                      gtk_spin_button_get_adjustment(
                        GTK_SPIN_BUTTON(get_widget(self))
                      ));

  かな。

  あと、型が静的に決められない場合に判別して ruby object を作ってくれる
get_gtk_type(GtkObject*) っていう関数があるので、新しい widget を追加し
たらそれも追加しておいた方がいいでしょうね。

  SpinButton ってどういう widget か知らないんで、数値を指定している部分
はいいのかちょっと分かんないですけれど、それ以外では Qnil を返すように
しておくだけで大丈夫そうです。

# なぜかほぼ月イチでバージョンアップすることになってるな > ruby/gtk

-- 
  楓の街のダイ                       「ジョゼットは、体は機械だけれど…
    MAP2303 / mapletown.net              でも、心は人間なの!」
                                                -> Wonder Project J2