新しいクロスプラットフォームGUI toolkit XWTの簡単な紹介

個人的にいじったことはほとんどないのですが、今日はXWTの紹介を書いてみようと思います。ほとんどいじったことがないので、深入りはせず…

http://foodformonkeys.blogspot.com.es/2012/11/xwt.html

xwtは、monoチームから誕生した新しい「クロスプラットフォーム」のGUIツールキットです。

XWTのコードはgithubで公開されています。ソリューションファイルがあるので、VisualStudiomonodevelopやSharpDevelopやMSBuildでビルドできると思います。プラットフォームごとに実際に動作するコードが違うので、Windows/WPFであればWPFTest、GTK#であればGtkTest、MacであればMacTestと、環境に合ったものをビルドして実行すれば、サンプルが起動できると思います。

xwtは実は1年くらい前から存在はしていたのですが、当初はMono for Androidのレイアウト・デザイナーをMonoDevelopVisual Studio 2010で同時に実現する目的で開発されていたもので、一般向けの用途で作りこまれるということにはなっていませんでした(そんなわけで、わたしもMfAのセッションで軽く言及している程度です)。FOSDEM 2012の発表資料 (pdf)では design goals に Not for everybody と書かれています。

Xamarinでは、VS環境向けとGtk/Cocoa向けの共有コードをxwtで実装し続けていて、完成度が上がってきたようなので、改めて宣伝するフェーズに入ったのでしょう。

ここでいうクロスプラットフォームというのは、実際にはGtk/Cocoa/WPFのいずれかが動作する環境のことです。モバイルなど、これら以外の環境は考慮されていません。

XWTは、ネイティブのルックアンドフィールを実現するという観点では、EclipseSWTに近い存在とも言えます(観念上近いだけで、C#ベースのAPIJavaベースのAPIでは実態は大きく異なると思いますが…)。WxWidgetsなども近い存在と言えそうですが、XWTではウィジェットを最大公約数に絞り込むというアプローチは採らないそうです。とはいえ、ネイティブのAPIを全て公開するわけではないですし、プラットフォームによっては足りないけどほしい機能は、自前で実装する、というやり方で対処しているようです。

XWTのウィジェットは、プラットフォーム別のAPIと組み合わせて使うことも出来ます(Mono for AndroidGUIデザイナーはそうやって作られているわけです)。

XWTのAPIはGTK+をもとにしています。ただ、GTK+のAPIは直感性に欠ける部分も多く、APIの継承関係は多段に渡り、不必要にpublicな部分も多いので、XWTではその辺を単純化しています。ほとんどのウィジェットWidgetクラスから直接継承しています。Cairoライクなdrawing APIもあるので、カスタム描画が必要なコンポーネントを作ることも出来そうです。

XWTのGUIデザイナーはまだありません。マークアップ言語も無いのですが、XAMLを使いそうな感じではあります。実際System.Xaml.dllを参照してXAMLから読み書きするサンプルコードはあるようです。

まだまだAPIはコロコロ変わると明言しているので、利用するならアクティブにコードを書き換えていくか、固定のバージョンでsubmoduleすると良いと思いますが、APIがシンプルそうなので、わたしも簡単なGUIのアプリケーションはコレで書いていこうかなあと思います。まあGUIアプリケーションを書くことは滅多に無いのですが…^^;