TOKUNAGA Hiroyuki
tkng****@xem*****
2004年 9月 13日 (月) 17:33:51 JST
徳永と申します。 GaucheからCairo(http://cairographics.org/)を使うための拡張ライブラリを 作って見ました。まだ基本的な部分がちょっと動くという段階ですが、とりあえ ず公開してみることにしました。以下のURLからダウンロードできます。 http://xem.jp/~tkng/gauche-cairo-0.0.0.tar.gz ビルドにはCairoとGauche 0.8以上が必要です。Cairoもそれなりに新しくない とまずいかもしれません。 まだドキュメントの整備などが全然追いついてないのですが、使い方は同梱の sample.scmを見ていただければなんとなくわかって頂けると思います。わからな ければ質問していただければ分かる範囲で答えます。 CとSchemeの対応ですが、構造体に関してはcairo_tが<cairo>, cairo_surface_tが<cairo-surface>という風に、関数に関してはcairo_createが cairo-createに、という風に対応しています。 * 注意事項 - 使えるバックエンドは現在のところPNGバックエンドのみです。 - 各関数の仕様はこれから変更される可能性があります。 - まだ動かない関数がいくつかあります。 - GCとかはまだ全然考慮されていません。 ライセンスはとりあえず3ClauseのBSDLにしていますが、不都合があるようで したら他のライセンスへ変更できます。 以下、作っていていくつかわからないところがあったので質問させてください。 * C側からの6つ以上の多値の返し方 cairo_matrix_get_affine (cairo_matrix_t matrix, double *a, double *b, double *c, double *d, double *tx, double *ty) という関数があって、この関 数は後ろの6つの引数で指定されたアドレスに数字を格納します。Scheme側では 多値を使って (receive (a b c d tx ty) (cairo-matrix-get-affine matrix) ... という形で使えるようにしたいと思うのですが、Scm_ValuesXはScm_Values5まで しか用意されていないようです。C側から6つ以上の多値を返したいときはどうす れば良いのでしょうか? # コードをちょっとみた感じでは戻り値をlistにしてScm_Valuesに渡せば良いのか # なと思えましたが、自信がないです。 * FILE構造体のScheme側での扱い方 cairo_surface_t * cairo_png_surface_create (FILE *file, cairo_format_t format, int width, int height); という関数があるのですが、対応するScheme側の関数をどうすればいいのかがわ かりません。 今はFILEの代わりにファイル名を渡すようにしてC側でfopenするようにしてい るのですが、これではFILE構造体がScheme側から完全に隠蔽されてしまうので、 Scheme側でファイルを閉じることができません。こういう場合、どういう仕様に すれば良いでしょうか? -- 徳永拓之 tkng****@xem***** http://kodou.net/