Gauche:FLTK2バインディング

Gauche:FLTK2バインディング

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

[image]

;; 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)))

helloask.scm

最初の画面は hello.scm と変わりませんがESC キーを押すと本当に終了するか 聞いてきます。

[image]

;; 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)))

callback.scm

[image]

(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)))

実装に関してのメモやToDoとか

コメント

何かあればどうぞ。

Post a comment

Name:


Last modified : 2010/06/03 00:22:03 JST