新規作成  編集  Ruby-GNOME2 Project Website  ページ一覧  検索  更新履歴  編集履歴  RSS  ログイン

とりあえず使いたい!

ドキュメントがないけどとりあえず使いたい!

ここで書いている内容はRuby-GNOME2 naming/conversion rulesを抜粋して+αして日本語化したものです。

どうやって勉強しよう?

  • このページ - まだまだ始まったばかりですが雰囲気はつかめると思います。
  • gtk-demo - まずはgtk-demoを使ってみてください。現状、Ruby/Gtk3 が提供している主なウィジェットがわかります。
  • それから、サンプルやテスト。値をいろいろ変えてみると良いでしょう。
  • 上記でもまだまだ情報は不十分です....その場合は、このページを読んでGNOMEのドキュメントDevHelpを使って実現したい機能を探し当ててください。最初は難しいですが慣れると結構簡単です。
  • さらには....ソースを読んでください(T_T)。

基本的な考え方

通常のメソッド

Ruby-GNOME2はGNOME2ライブラリ群のラッパです。基本的にはGNOME2のAPIをそのまま頭の中で置換して使うことができます。

void gtk_widget_queue_draw_area(GtkWidget *w, gint x, gint y, gint width, gint height)

=> Gtk::Widget#queue_draw_area(x, y, width, height)

この場合、GNOME2での1つ目の引数を無くした形式がRuby-GNOME2でのメソッドとなります。

プロパティ

GNOME2では「プロパティ」という考え方が導入されました。GNOME2のAPIリファレンスのPropertiesの欄を見てください。 これらは、Ruby-GNOME2からは以下の形式でアクセスできます。

GtkWindowのプロパティ例

"title"                gchararray           : Read / Write

 Gtk::Window#set_title(v)  #Readの場合:v = 文字列
 Gtk::Window#title = v     #Readの場合:v = 文字列
 Gtk::Window#title         #Writeの場合:戻り値は文字列

Gtk::Window#set_titleGtk::Window#title=は同じ意味です。Gtk::Window#title=の方がRuby的な印象を受けますが継承を使ったクラスでは(1)の方が使いやすい場合があります。

実は、プロパティはそのウィジェットの関数を呼び出すようになっています。 上記例では、gtk_window_set_title(), gtk_window_get_title()が実際使われる関数です。

次に、"window-position"の例です。

"window-position"      GtkWindowPosition    : Read / Write

 Gtk::Window#set_window_position(v) #Readの場合: v = 数値
 Gtk::Window#window_position = v    #Readの場合: v = 数値
 Gtk::Window#window_position        #Writeの場合: 戻り値は数値

'-'は'_'に変換されます。GtkWindowPositionはenum型の定数値ですのでRubyでは数値(ほとんどの場合Fixnum)になります。ただ、この場合は実際の数字を使うのではなく、定義済みの定数を使うべきです(ここではGtk::WindowPosition::CENTER?等)。

で、実は、"window-postion"で使われる関数は、GTK+では、gtk_window_set_position(), gtk_window_get_postion()です。

従って、そのウィジェットに何らかの値を設定したい場合は、まず、このプロパティの欄を見て、該当するプロパティが無い場合は普通の関数を調べていくという風にすると良いでしょう。

余談ですが、Ruby-GNOME2 のメソッドは自動的に生成されますので、ソースコードを追ってもこの辺は出てきません。

メソッド名の付け方

プロパティの章でもちょこっと述べましたが、メソッド名称の付け方には以下のようなルールがあります。

Setter/Getter

  • 1つの引数を持つメソッド
    • setter1: hoge=(a) #戻り値はa
    • setter2: set_hoge(a) #戻り値はself
    • getter: hoge #戻り値はhogeの値
  • 2つ以上の引数を持つメソッド
    • setter: set_fuga(a, b) #戻り値はself
    • getter: get_fuga(a, b) #戻り値はfugaの値
  • 引数を持たないメソッド
    • getter: fuga #戻り値はfugaの値

is_*メソッド

is_foo()はfoo?になります。戻り値はtrue/falseです。

has_*, use_*, その他のgbooleanを返すメソッド

サフィックスに?をつけます。こちらも戻り値はtrue/falseになります。

has_foo -> has_foo?
use_bar -> use_bar?

たまにget_が先頭についてる関数もありますが、それも上記にあわせてしまいます。 set_はそのままです。

get_has_foo -> has_foo?
set_has_foo -> has_foo=(a), set_has_foo(a)
get_use_foo -> use_foo?
set_use_foo -> use_foo=(a), set_use_foo(a)

classname_foo_set_bar, classname_foo_get_bar ...

ちょっと気持ち悪いのですが、GNOME2のAPIにはクラス名_名詞_get/set_foo()のような関数があります。 ただ、そういったモノは数が少ないので、そのまま機械的にRubyのメソッドにします。

gtk_classname_foo_set_bar -> Gtk::ClassName#foo_set_bar
gtk_classname_foo_get_bar -> Gtk::ClassName#foo_get_bar
gtk_classname_foo_get_bar -> Gtk::ClassName#foo_get_bar?
gtk_classname_foo_is_bar -> Gtk::ClassName#foo_is_bar?
gtk_classname_foo_has_bar -> Gtk::ClassName#foo_has_bar?
gtk_classname_foo_use_bar -> Gtk::ClassName#foo_use_bar?

「破壊的な」メソッド

「破壊的」というのはちょっと違うかもしれませんが、オブジェクト自身の情報を書き換えるようなメソッドはサフィックスに!をつけます。 たとえば、Gtk::TreeIter#first, #next!, Gtk::TreePath#prev!, #next!, #up!, #down!などです。

foreachメソッド

eachになります。

true/falseを返すメソッドで?をつけないメソッド

true/falseを返す場合でも、「何らかの動作をした結果、成功したかどうかをtrue/falseを返す」場合は?をつけない場合があります。

定数

Ruby-GNOME2ではRuby-GNOMEと異なりなるべくその定数を使う、あるいはその定数を持つべきクラスに定義します。

モジュール・クラスメソッド

モジュール・クラスメソッドはほぼ、GNOME2のAPIリファレンスを読み替えれば良いと思います。

gboolean gtk_stock_lookup(const gchar *stock_id, GtkStockItem *item);

 => Gtk::Stock.lookup(stock_id, item)

シグナル周り

Ruby-GNOMEでは、シグナルの定数値が用意されていたのですがRuby-GNOME2では文字列(あるいはシンボル)を指定する形にします。 これらは、GNOMEのAPIリファレンスに載っているものと同じですのでそちらを見てください。

その他

希にGNOMEとは引数の数・順番が異なったり、GNOMEには無いメソッドがあったりします。 これらはソースを読んでください。

更新日時:2018/11/06 22:19:11
キーワード:
参照:[Ruby-GNOME2 API Reference]