2009年2月26日木曜日

GTK+ on Mac OS X 入門

GTK+ が Mac OS X の X11 上じゃなくて,Quartz 上で使えるようになった.GTK+ on OSX から,GTK+ OS X Framework をダウンロードしよう♪


使い方はこんなかんじ.

1. Download Framework をクリックしてダウンロード.

2. パッケージをインストール.

3. Xcode を起動して,新規プロジェクトから GTK+ Application を選択してプロジェクトを作成



最近 GTK+ を使ってないので,全然覚えてないので正確性に欠けそうだが,とりあえず Hello, world! っぽいものをつくろう.デフォルトの状態でコンパイルするとウィンドウがひとつ表示されるだけのコードが書かれてるので,ウィンドウに Hello, world! と書かれたラベルを表示することにする.

と,その前に,main.c の内容についてざっと説明する.いかにも,C というかんじのプログラムであることは,なんとなくわかってもらえるかなぁと思う.(Win32API とか C のプログラムに見えなくなってくるからねw)#include の行はおまじないwということで,GTK+ を使うときにはこうやって書く必要がある.main 関数の定義は,C とまったく同じなので問題ないよね.GtkWidget 型ってなんじゃって思うかもしれないけど,これはウィンドウやボタン,ラベルなどの部品のための型なんだな.まぁ,こういう Gtk~ 型がいろいろと定義されてるんだよね.C の FILE 型みたいなもんで,実体は構造体だったりする.いわゆる隠蔽(カプセル化)の手法.gtk_init() は,おまじ……といいたいところだが,まあ初期化して,GTK+ 向けの引数を処理してくれるらしい.次の3行は,ウィンドウを作成して,ウィンドウが消されたらプログラムを終了するようにして,ウィンドウを表示するという意味.gtk_main() でマウスクリックやキーボード入力のイベントを待ち受ける状態になる.というかんじ.
#include <gtk/gtk.h>

int
main (int argc, char **argv)
{
GtkWidget *window;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show_all (window);

/* Add your widgets to the window here. */

/* Run the main loop. */
gtk_main ();

return 0;
}

これを次のように書き換えよう.ラベル変数を宣言して,ラベルを作成して,ウィンドウのコンテナに追加して,ラベルを表示する.なんとなく,わかってもらえるだろうか.
#include <gtk/gtk.h>

int
main (int argc, char **argv)
{
GtkWidget *window;
GtkWidget *label;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show_all (window);

/* Add your widgets to the window here. */
label = gtk_label_new ("Hello, world!");
gtk_container_add (GTK_CONTAINER (window), label);
gtk_widget_show (label);

/* Run the main loop. */
gtk_main ();

return 0;
}

これで,コンパイルして実行すると,Hello, world! という文字列が表示されたウィンドウが表示されるはずだ.

GTK+ の基本的なプログラミングは,部品 (GtkWidget) を作成して,部品のシグナル(マウスクリックなどのイベントによって生じる.)に関数を指定して,部品をコンテナに入れて(パッキング),表示して,イベント待ちをするってかんじ.

C で GUI プログラミングをするにはもってこいだと思う.大学の課題で,GUI プログラミングの課題が出たら,Xlib や Win32API で組むよりは,GTK+ で組んだ方がだいぶ楽だと個人的には思う.(実際のところ,僕は Win32API でプログラムを組むことが多かったがw)もしくは,GLUT という選択肢もある.ボタンやダイアログを使うなら GTK+ で,画像表示だけなら GLUT ってのがいいのかな.普通の GTK+ なら,OpenGL を中に表示させるライブラリもあるんだけど,ちょっとこの Mac OS X 版で使えるかどうかは不明.だれか教えてください(*- -)(*_ _)

追記(2009年2月26日):
コメントに,日本語の文字列の表示の仕方の説明をいただいたたので紹介.どうやら,そのままでは日本語フォントが設定されてなくて日本語の文字列が表示できないのだ.GTK+ on OS Xで日本語を表示するにはに方法が説明されているので参考にしてね♪

参考文献:
GTK+ 2.0 Tutorial
GTK+ 2.0 チュートリアル (2003-01-24版)

2 件のコメント:

匿名 さんのコメント...

このGTK+ on Mac OS Xはデフォルトのフォントが日本語表示に対応していないので,そのままでは表示できません。

(やっつけで)日本語を表示する方法をワタシのブログにも以前書いたので、参考になれば幸いです。

http://d.hatena.ne.jp/paella/20090217/1234865008

Takuya Tsuchida さんのコメント...

> paella さん
おおっ,日本語の表示については盲点でした.
情報ありがとうございます.