2016-07-16 20:07:34 +00:00
|
|
|
#lang syndicate/actor
|
2015-11-10 01:16:50 +00:00
|
|
|
|
2016-06-14 07:49:47 +00:00
|
|
|
(require syndicate/big-bang)
|
2016-07-16 20:07:34 +00:00
|
|
|
(require racket/math)
|
2015-11-10 01:16:50 +00:00
|
|
|
|
|
|
|
(define (button #:background [background "grey"]
|
|
|
|
#:foreground [foreground "white"]
|
|
|
|
#:font-size [font-size 22]
|
|
|
|
name x y label callback)
|
|
|
|
(define label-image (text label font-size foreground))
|
2017-02-15 23:18:19 +00:00
|
|
|
(spawn (on (message (inbound (mouse-event _ _ name "button-down"))) (callback))
|
2016-08-24 16:35:38 +00:00
|
|
|
(assert (outbound
|
|
|
|
(window name x y 0
|
|
|
|
(seal
|
|
|
|
(overlay label-image
|
|
|
|
(rectangle (+ (image-width label-image) 20)
|
|
|
|
(+ (image-height label-image) 20)
|
|
|
|
"solid"
|
|
|
|
background))))))))
|
2015-11-10 01:16:50 +00:00
|
|
|
|
|
|
|
(define (draggable-shape name orig-x orig-y image)
|
2016-06-14 07:49:47 +00:00
|
|
|
(define (window-at x y) (window name x y 10 (seal image)))
|
|
|
|
(define (mouse-left-event-type? t) (member t '("leave" "button-up")))
|
2016-07-09 20:35:29 +00:00
|
|
|
(define (idle ticks0 x0 y0)
|
|
|
|
(react (field [ticks ticks0] [x x0] [y y0])
|
2016-07-30 17:53:45 +00:00
|
|
|
(assert (outbound (window-at (x) (y))))
|
|
|
|
(on (message (inbound (tick-event)))
|
2016-07-09 20:35:29 +00:00
|
|
|
(ticks (+ (ticks) 1))
|
|
|
|
(y (+ (y) (* (cos (* (ticks) 10 1/180 pi)) 4))))
|
2016-07-30 17:53:45 +00:00
|
|
|
(stop-when (message (inbound (mouse-event $mx $my name "button-down")))
|
2016-07-09 20:35:29 +00:00
|
|
|
(dragging mx my (- mx (x)) (- my (y))))))
|
|
|
|
(define (dragging mx0 my0 dx dy)
|
|
|
|
(react (field [mx mx0] [my my0])
|
2016-07-30 17:53:45 +00:00
|
|
|
(assert (outbound (window-at (- (mx) dx) (- (my) dy))))
|
|
|
|
(on (message (inbound (mouse-event $nmx $nmy _ "drag")))
|
2016-07-09 20:35:29 +00:00
|
|
|
(mx nmx)
|
|
|
|
(my nmy))
|
2016-07-30 17:53:45 +00:00
|
|
|
(stop-when (message (inbound (mouse-event $mx $my _ (? mouse-left-event-type? $t))))
|
2016-07-09 20:35:29 +00:00
|
|
|
(idle 0 (- mx dx) (- my dy)))))
|
2017-02-15 23:18:19 +00:00
|
|
|
(spawn* (idle 0 orig-x orig-y)))
|
2015-11-10 01:16:50 +00:00
|
|
|
|
2017-02-15 23:18:19 +00:00
|
|
|
(spawn (during (inbound (active-window $id))
|
2016-08-24 16:35:38 +00:00
|
|
|
(assert (outbound (window 'active-window-label 300 0 0
|
|
|
|
(seal (text (format "~v" id) 22 "black")))))))
|
2016-07-16 20:07:34 +00:00
|
|
|
(button #:background "red" 'stop-button 0 0 "Exit"
|
2016-07-30 17:53:45 +00:00
|
|
|
(lambda () (assert! (outbound 'stop))))
|
2016-07-16 20:07:34 +00:00
|
|
|
(draggable-shape 'c1 50 50 (circle 30 "solid" "orange"))
|
|
|
|
(draggable-shape 's1 100 100 (star 40 "solid" "firebrick"))
|
2015-11-10 01:16:50 +00:00
|
|
|
|
2016-07-16 20:07:34 +00:00
|
|
|
(module+ main
|
|
|
|
(current-ground-dataspace
|
|
|
|
(big-bang-dataspace #:width 640
|
|
|
|
#:height 480)))
|