51 lines
1.2 KiB
Racket
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)))))
|