Mx を試してみる

これまで、Clutter を中心に書いてきましたが、 Clutter だけだと実用的なアプリケーションを作成するのはちょっと厳しいと思います。高レベルのウィジェットが無いので、ボタンやスクロールバーを自前で作らなければなりません。
そこで登場するのが Mx toolkit です。これも、Clutter と同様に Intes 社が中心となって開発しているライブラリで、下位に Clutter を利用しています。つまり、 Mx tookkit を使うと Clutter ライクなアプリケーションができるということです。Gkt+ が X の toolkit だとすると、 Mx は opengl の toolkit と考えれば良いと思います。Mx の Web が見つからないので、 https://github.com/clutter-project/mx を紹介しておきます。
Momonga の libmx のバージョンは 1.3.1 と古いので、 Fedora 18 alpha の 1.4.7 で試していきます。

では早速、C プログラム

#include <mx/mx.h>

int
main (int argc, char *argv[])
{
	MxApplication *application;
	MxWindow *window;

	application = mx_application_new (&argc, &argv, "application", MX_APPLICATION_SINGLE_INSTANCE);
	window = mx_application_create_window (application);
	mx_window_set_window_size (window, 640, 480);
	mx_window_set_has_toolbar (window, FALSE);
//	mx_window_set_window_rotation (window, MX_WINDOW_ROTATION_90);
	g_signal_connect (window, "destroy", G_CALLBACK (mx_application_quit), NULL);

	mx_window_show (window);
	mx_application_run (application);
	return 0;
}

基本的には、 clutter や gtk などと同じで、初期化、表示、実行ループになります。
Web のサンプルでは ClutterStage を作成して、そこに MxWidget を配置するものが多いのですが、ここでは王道と思われる、 mx_application_new() をつかいます。引数等は devhelp で確認してください。mx の初期化が終われば、 mx_application_create_window() で window を作成し、mx_window_set_window_size() で大きさを指定し、 mx_window_set_has_toolbar() を使って Toolbar を非表示にしています。この行をコメントアウトすると、 Toolbar が表示され個人的には不恰好に感じる window になります。しかし、次のコメントアウトしている行 mx_window_set_window_rotation() を使って、90°回転した window を利用したい場合は、 Toolbar を表示してください。非表示の場合は回転してくれません。
後は、 g_signal_connect() で window を閉じる時に mx_application_quit() が呼び出されるようにします。
最後に mx_window_show() で window を表示し、 mx_application_run() で実行ループに入ります。

ついでに、Makefile を書いておきます。

# pkg-config --cflags mx-1.0
CFLAGS = -pthread -I/usr/include/mx-1.0 -I/usr/include/clutter-1.0 -I/usr/include/pango-1.0 -I/usr/include/cogl -I/usr/include/cairo -I/usr/include/atk-1.0 -I/usr/include/json-glib-1.0 -I/usr/include/gtk-3.0 -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libdrm -I/usr/include/libpng12 -I/usr/include/pixman-1 -I/usr/include/gio-unix-2.0/  

# pkg-config --libs mx-1.0
LDFLAGS = -pthread -lmx-1.0 -lclutter-1.0 -latk-1.0 -lcogl-pango -ljson-glib-1.0 -lgdk-3 -lXi -lcogl -ldrm -lX11 -lXext -lXdamage -lXcomposite -lgmodule-2.0 -lrt -lgio-2.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 -lXfixes  

make して実行するとClutterStage のような window が開けば完成です。
しばらく休む予定でしたが、ネタが見つかったので、のんびり更新します。