2006/03/08

gtk+-2.8なwidgetの中にcairoを使って絵を書こう(1)

gtk+2.8以降に使えるcairoの詳細を読んでいく。以下のコードはこの Writing a Widget Using Cairo and GTK+2.8から来ています。cairoで描写する時計を描くプログラムを作っていく。コードそのものはここで手にはいる。

始めに概念や全体の説明があるけど斜め読みしてstep.1へ。いきなり、main関数を見てみましょうか。

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

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

clock = egg_clock_face_new ();
gtk_container_add (GTK_CONTAINER (window), clock);

g_signal_connect (window, "destroy",
G_CALLBACK (gtk_main_quit), NULL);

gtk_widget_show_all (window);

gtk_main ();
}

とってもシンプル。この中で特殊なのがegg_clock_face_new()だけ。他はgtk では良く有る話なのでとりあえず無視。このegg_clock_face_newは EggClockFace というGTK_TYPE_DRAWING_AREA なGTK_OBJECT をnewして返す関数であり、

GtkWidget *
egg_clock_face_new (void)
{
return g_object_new (EGG_TYPE_CLOCK_FACE, NULL);
}

となっている。EggClockFace は新しく定義した GTK_OBJECT なんで、

G_DEFINE_TYPE (EggClockFace, egg_clock_face, GTK_TYPE_DRAWING_AREA);

から下に定義しているコードがつづいている。GTK_TYPE_DRAWING オブジェクト はいろいろ便利な機能がそろっているので、これをベースに cairo な clock 用の オブジェクト を作っているらしい。詳細は本文を見てください。

これで準備が終ったので、step.2へ