75 lines
2.2 KiB
Text
75 lines
2.2 KiB
Text
#!/usr/local/bin/newlisp
|
|
;;
|
|
;; mouse-demo.lsp - demonstrate mouse handlers and gs:delete-tag
|
|
|
|
;;;; initialization
|
|
(set-locale "C")
|
|
(load (append (env "NEWLISPDIR") "/guiserver.lsp"))
|
|
|
|
(gs:init)
|
|
|
|
(set 'colors (list gs:black gs:blue gs:cyan gs:darkGray gs:gray
|
|
gs:green gs:lightGray gs:magenta gs:orange gs:pink gs:red gs:yellow))
|
|
|
|
;;;; describe the GUI
|
|
(gs:frame 'MouseDemo 100 100 640 640 "Canvas Demo")
|
|
(gs:canvas 'MyCanvas 'MouseDemo)
|
|
(gs:add-to 'MouseDemo 'MyCanvas)
|
|
(gs:set-background 'MyCanvas gs:white)
|
|
(gs:mouse-pressed 'MyCanvas 'mouse-pressed-action true)
|
|
(gs:mouse-released 'MyCanvas 'mouse-released-action true)
|
|
(gs:mouse-clicked 'MyCanvas 'mouse-clicked-action true)
|
|
(gs:mouse-moved 'MyCanvas 'mouse-moved-action)
|
|
(gs:mouse-dragged 'MyCanvas 'mouse-dragged-action)
|
|
(gs:mouse-wheel 'MyCanvas 'mouse-wheel-action)
|
|
(gs:set-anti-aliasing true)
|
|
(println (time-of-day))
|
|
(for (row 0 620 20)
|
|
(for (col 0 620 20)
|
|
(let (r (rand (length colors)))
|
|
(gs:fill-rect (string "R" r) col row 20 20 (colors r))
|
|
)
|
|
)
|
|
)
|
|
(println (time-of-day))
|
|
(gs:set-visible 'MouseDemo true)
|
|
|
|
;; define actions
|
|
|
|
(define (mouse-pressed-action x y button modifiers tags)
|
|
(gs:set-text 'MouseDemo
|
|
(string "pressed row: " (/ y 20) " col:" (/ x 20) " button: " button " key:" modifiers " tags:" tags))
|
|
)
|
|
|
|
(define (mouse-released-action x y button modifiers tags)
|
|
(gs:set-text 'MouseDemo
|
|
(string "released row: " (/ y 20) " col:" (/ x 20) " button: " button " key:" modifiers " tags:" tags))
|
|
)
|
|
|
|
(define (mouse-clicked-action x y button cnt modifiers tags)
|
|
(gs:set-text 'MouseDemo
|
|
(string "clicked row: " (/ y 20) " col:" (/ x 20)
|
|
" button: " button " count:" cnt " key:" modifiers " tags:" tags))
|
|
(if tags (gs:delete-tag (tags 0)))
|
|
)
|
|
|
|
(define (mouse-moved-action x y)
|
|
(gs:set-text 'MouseDemo
|
|
(string "moved row: " (/ y 20) " col:" (/ x 20)))
|
|
)
|
|
|
|
(define (mouse-dragged-action x y button modifiers)
|
|
(gs:set-text 'MouseDemo
|
|
(string "dragged row: " (/ y 20) " col:" (/ x 20) " button: " button " key:" modifiers))
|
|
)
|
|
|
|
(define (mouse-wheel-action x y wheel)
|
|
(gs:set-text 'MouseDemo
|
|
(string "cursor row: " (/ y 20) " col:" (/ x 20) " wheel: " wheel))
|
|
)
|
|
|
|
;;;; listen for incoming action requests and dispatch
|
|
(gs:listen)
|
|
|
|
;; eof
|
|
|