« GW半ば | メイン | プログラミング速度を上げる方法 »

2010年05月07日

独自UI

バイナリをダウンロード(Windows/Macosx10.6)


さて、GWの中盤の成果は独自UIの実装だ。ここまで賞味3日間の成果。
描画系はOpenGLでマルチプラットフォームだ。
よくソフトウェアシンセサイザなどのソフトは独自UIなものが多いが、
それ以外の一般ソフトではあまり独自UIはみかけない。
一番の理由は、他のソフトと見た目が違うためにとっつきやすさがなくなる
という理由で敬遠される・・というのがよく言われるだが、
よくできた独自UIはカッコイイし、そのアプリに特化して、使いやすければ
むしろ違うことが正しいのである。
まぁプログラマが上記のような理由を述べるときはたいてい「めんどうだから」である。
かくいう私も面倒で今までやってこなかった。

そんな私が重い腰をあげ実装に至った理由は3つ。

1つめ
数年前から次期システムはモジュラー型のプログラミングシステムが
欲しいなと思い、次期skFrameworkのシステムの中核にすえることを考えていたが、
このモジュラーのようなUIをもったUIライブラリに出会えなかった。
なのでこのモジュラー部分に関しては作らざるを得ないと考えていた。
参考になるのはMacOSXのQuartz Composerとかまぁそんなの。

2つめ。
次期デモ開発システムのskFrameworkの仕様として、
マルチプラットフォーム対応があるのだが、マルチプラットフォームになると
とたんに使えるライブラリ減る。
ちょっとしたアプリにさっとつかえるUIがなかったのだ。*注1
今回は利便性も考え、ヘッダをインクルードするだけで使えるようにした。

3つめ。
以前仕事でFlashをつかって独自UIを作ったことがあったのだが、
C/C++プログラマとしてFlashなら簡単に独自UIが作れるだろうと思っていた。
しかし、実際の作業はほとんどコーディング作業で、Flashのいいところは
UIのコンポーネントの図形や画像をマウスで作成できるところにある。
細かい動作の部分はActionScriptで制御する必要があった。
これならC/C++で実装してもかわらないんじゃないか・・?
と思い、Flashで図形を書いていた部分をGLの命令におきかえればいいんじゃね?
という非常に短絡的な思考で開発を始めるに至った。


実装した結論としては
やってよかったと思う。むしろFlashのActionScriptのような軟体言語よりは
はるかにC++のほうが実装しやすかったように感じる。
UIのコンポーネントもデザインをシンプルなものに絞っていたので、
まぁマウスで描くように簡単に・・・とはいかないまでもまぁいい感じだろう。
テキストサービスはまだ使えるようなレベルではないが、まぁこれからかな・・。
あとは念願のモジュラーUIを獲得したので、しばらくこれで遊べるといいなぁ。
ちゃんとマルチプラットフォーム対応だし。
思ったより作業量は少ない。
最初からすべての機能を実装する必要はない。
ボタン上でホイールとかシフト押しながらどうとかなど、
ほとんど使わないような機能は実装する必要がない。
これで半分くらい描画系にさいているが、全部で1500行くらいだ。
ぜひ独自UIをつくるか作らないか思い悩んでるひとはやってみるのがいいだろう。
それほどの開発工数を必要とせずに実装することができるだろう。

例としては国内で有名なのはMTFrameworkとかかな。
やっぱり独自UIだとオリジナルの世界観があっていいよね・・・。
と思うのはオタクプログラマだけかねw


注1について
今回のUIを実装するに至っては、フリーのライブラリもいくつか検討した。
仕事でも使ったことがあるのはwxWidget。まぁ悪くないけどライブラリがでかいし、
ちょっとしたものをつくるのも面倒だし、なによりダサい・・。
OSネイティブUIを重視しているために細かいところの融通が利かない。
CG系でははやりのQtは商用利用は有料だがLGPLのフリー版がある。
社内の内製ツールなどには自由につかえるとのことだ。
最近ではMaya2011がQtに対応したらしい。
Qtは最近は非常に開発が活発でNOKIAがかなり力をいれているようだ。
最新版の4.7ではFlash的なUIのトランジションアニメーションをつくけるような
仕組みも備えている。が、このライブラリは非常にでかく
WebKitのBrowser機能まで含んでおり、ライブラリのビルドに4時間以上かかったorz
OpenGLともうまくやれる仕組みはあるのだが、ソースコードがかなりQtべったり
な感じになるのがいまいちな感じ。このへんはまだwxのほうがマシか。
あとはオープンソースなプロジェクトでClutterというものがある。
なんか結構当たらしめなプロジェクトのようでまだver1.0である。
だが、まだちゃんと使えるようにはなっていないようで、とりあえず動きます。
だしましたっ。って感じ。スクリーンショットとかもないし・・・。
しかもこいつは大量のライブラリに依存してるときた・・・。あぁ微妙。

まぁそんなこんなで、結局欲しい機能がない&いまいちダサいという理由で
上記のものは却下。まぁもっと汎用UIでいいよというものであれば、
wxかQtを利用するだろう。
まぁ今回つくったライブラリは既存UIライブラリとも共存可能なので
まぁそのあたりはうまくやっていこうかと思う。

投稿者 kioku : 2010年05月07日 04:02