processingの簡易な記述をgl.processingにも(with-simple-draw)

processingはdrawとsetupを書かなくても実行できたりする。こんな感じに。

processing

size(400, 400);

// The wrong way to specify the middle of the screen
ellipse(200, 200, 50, 50); 

// Always the middle, no matter how the size() line changes
ellipse(width/2, height/2, 50, 50);

これをgl.processingでもできるように、with-simple-drawというマクロを定義した。
上のprocessingのコードはこのマクロを使って以下のように書ける。

gl.processing (gauche)

;; with-simple-draw
(use gl.processing)

(with-simple-draw (400 400)
  ;; The wrong way to specify the middle of the screen
  (ellipse 200 200 50 50) 

  ;; Always the middle, no matter how the size() line changes
  (ellipse (/. *width* 2) (/. *height* 2) 50 50))

with-simple-drawの定義は以下の通り

with-simple-drawのコード

(define-syntax with-simple-draw
  (syntax-rules ()
    [(_ (w h) action ...)
     (with-simple-draw (w h "sample" 100 100) action ...)]
    [(_ (w h title) actioin ...)
     (with-simple-draw (w h title 100 100) actioin ...)]
    [(_ (w h title x y)
        action ...)
     (define main (setup$ (lambda () (window w h title x y))
                          :draw (draw$ (lambda () action ...))))]))
     
;; (put 'with-simple-draw 'scheme-indent-function 1)