lux/examples/val-demo.rkt

51 lines
1.2 KiB
Racket

#lang racket/base
(require racket/match
racket/fixnum
racket/gui/base
racket/class
(prefix-in pict: pict)
(prefix-in image: 2htdp/image)
lux
lux/chaos/gui
lux/chaos/gui/val)
(define MODES
'(pict image))
(struct demo
(mode)
#:methods gen:word
[(define (word-label s ft)
(lux-standard-label "Values" ft))
(define (word-tick w es)
(match-define (demo mode-n) w)
(define closed? #f)
(for ([e es])
(match e
['close
(set! closed? #t)]
[(? (λ (x) (is-a? x key-event%)) ke)
(unless (eq? 'release (send ke get-key-code))
(set! mode-n (fxmodulo (fx+ 1 mode-n) (length MODES))))]
[_
(void)]))
(match closed?
[#t
(values #f w)]
[#f
(values
(demo mode-n)
(match (list-ref MODES mode-n)
['pict
(pict:arrowhead 30 0)]
['image
(image:add-line
(image:rectangle 100 100 "solid" "darkolivegreen")
25 25 75 75
(image:make-pen "goldenrod" 30 "solid" "round" "round"))]))]))])
(module+ main
(call-with-chaos
(make-gui/value (make-gui 60.0))
(λ () (fiat-lux (demo 0)))))