BBを使ってGUI開発

Chicken SchemeGUIを開発する

残念ながらSchemeは元々簡潔な言語仕様を目指しており、実用的な開発に必要な機能は不足しています。
Chicken Schemeは実用性重視ですが、ポータブル性を重視しているためGUIなどの環境依存機能は標準の言語拡張には含まれていません。

しかし、GUIToolkitなしでGUIアプリケーションを開発していくことは現実的ではありません。*1
何か良い方法はないでしょうか。

BB

Chickenのeggの中にBBという非常にシンプルなGUI toolkitがあります。
FLTKをベースとして利用しており、より機能を簡潔に使用できるようラップしています。

■FLTK
http://www.fltk.org/index.php
■bb
http://wiki.call-cc.org/eggref/3/bb

FLTKのインストール

BBはFLTKを使用するため、ホスト環境にFLTKをインストールしておく必要があります。
srcを落としてきて、make installしましょう。*2

BBのインストール

Chicken Schemeのeggインストールは、chicken-installで一発です。

chicken-install -s bb

ウィンドウを作成

bbはwidgetという単位でGUIのパーツを作成していきます。
たった以下のコードで、ウィンドウを作成しメッセージループに入ることができます。

(use bb)

(bb:init)
(define w (bb:make-widget 'window 320 240))
(bb:show w)
(bb:run)

もちろん、これだけでは何もできないウィンドウなので、さらにwidgetを追加し、イベントハンドラーを設定していきます。

OpenGLを使用する

FLTKはOpenGLを使用するウィンドウを作成するための機能があるので、それを使えば簡単にOpenGLを使用して3Dグラフィックスを描画できます。
まずは、OpenGLのeggをインストールしましょう。

chicken-install -s opengl

プログラムでは、windowの代わりにglwindowのgadgetを作成します。
注意すべきな点はglwindowはredrawが必須であるため、callbackを登録しなければセグメンテーション違反になります。

(use bb gl srfi-17)

(bb:init)
(define w (make-gadget 'glwindow 320 240))
(define (redraw)
  (gl:Clear gl:COLOR_BUFFER_BIT))
(set! (bb:property w 'callback) redraw)
(bb:show w)
(bb:run)

まとめ

BBを使うと簡単にクロスプラットフォームGUIアプリケーションを実装することができます。
OpenGLを使う事もできるので、マルチメディア系ソフトウェアの開発もすぐに始めることができます。

*1:Chickenにはforeignインタフェースがあるので、C言語のライブラリをロードして呼び出すことができます。つまりプラットフォームのGUIAPIを直接利用することができます。

*2:Linux環境なら言わずもがな、macやwindowsを使う人でもGNUMakefileに習熟しておくことを推奨します。有用なオープソースプロジェクトはBuildにMakefileを使います。