Gauche-gtk が現在 Windows 非対応なので FLTK2 でバインディングやってみ ました。
まずは Document にある example と test フォルダ以下にあるデモプログラ ムをGauche 版でも動くようにする(デモプログラムから FLUID も起動するけ どさすがにそれは除外させて)
以下の環境を想定してます
正直動くようにするまでかなりメンドくさいです。Gauche もソースからビル ドしないといけないですし。それでも試してみたい場合はこちら をダウンロードして
$ ./configure $ make
とした後に gauche_fltk2.dll ができていればとりあえず OK です。 (当分α版だと思いますのでリビジョンはしばらく上げません)
FLTK2 Document にある example1 と example2a がそれぞれ
$ gosh -I. example/[filename]
とすれば動きます。[filename] の部分には以下で紹介してる ファイル名を入れて下さい。
;; hello.scm
(use fltk2)
(define (main args)
(let1 w (make-fl-window 300 180 (x->string args))
(fl-window-begin w)
(let1 b (make-fl-widget 20 40 260 100 "こんにちは, 世界!")
(fl-widget-box b *up-box*)
(fl-widget-labelfont b *helvetica-bold-italic*)
(fl-widget-labelsize b 36)
(fl-widget-labeltype b *shadow-label*))
(fl-window-end w)
(fl-window-show w args)
(fl-run)))
最初の画面は hello.scm と変わりませんがESC キーを押すと本当に終了するか 聞いてきます。
;; helloask.scm
(use fltk2)
(define (main args)
(let1 w (make-fl-window 300 180 (x->string args))
(fl-add-callback w (lambda (w)
(if (ask "終了しますか?")
(fl-window-hide w))))
(fl-window-begin w)
(let1 b (make-fl-widget 20 40 260 100 "こんにちは、世界!")
(fl-widget-box b *up-box*)
(fl-widget-labelfont b *helvetica-bold-italic*)
(fl-widget-labelsize b 36)
(fl-widget-labeltype b *shadow-label*))
(fl-window-end w)
(fl-window-show w args)
(fl-run)))
(use fltk2)
(define intinput #f)
(define (slider-callback w)
(fl-intinput-set-value
intinput
(x->integer (fl-slider-get-value w))))
(define (copy-callback _ p)
(fl-slider-set-value
p (fl-intinput-get-ivalue intinput)))
(define (make-button-change-cb op)
(lambda (w)
(fl-slider-set-value w (x->integer (op (fl-slider-get-value w) 1)))
(fl-intinput-set-value intinput (x->integer (fl-slider-get-value w)))))
(define (down-callback _ p) ((make-button-change-cb -) p))
(define (up-callback _ p) ((make-button-change-cb +) p))
(define (main args)
(let1 w (make-fl-window 320 90 (x->string args))
(fl-window-begin w)
(set! intinput (make-fl-intinput 10 10 100 20))
(let ((copy-b (make-fl-button 110 10 100 20 "copy to slider"))
(down-b (make-fl-button 50 60 50 20 "down"))
(up-b (make-fl-button 150 60 50 20 "up"))
(exit-b (make-fl-button 250 60 50 20 "exit"))
(slider (make-fl-slider 10 35 300 20)))
(fl-intinput-set-value intinput 0)
(fl-slider-set-type slider *slider-tick-above*)
(fl-slider-set-clear-flag slider *layout-vertical*)
(fl-slider-set-range slider -10 10)
(fl-slider-set-step slider 1)
(fl-slider-set-value slider (fl-intinput-get-ivalue intinput))
(fl-slider-add-callback slider slider-callback)
(fl-button-add-callback copy-b copy-callback slider)
(fl-button-add-callback down-b down-callback slider)
(fl-button-add-callback up-b up-callback slider)
(fl-button-add-callback exit-b (lambda _ (exit 0))))
(fl-window-end w)
(fl-window-show w args)
(fl-run)))
何かあればどうぞ。
Post a comment