newlisp/guiserver/drag-demo.lsp

83 lines
2.3 KiB
Text

#!/usr/local/bin/newlisp
;;
;; drag-demo.lsp - demonstrate dragging of objects with the mouse
;;
;;;; initialization
(set-locale "C")
(load (append (env "NEWLISPDIR") "/guiserver.lsp"))
(gs:init)
;(gs:set-trace true)
;;;; describe the GUI
(gs:frame 'DragDemo 100 100 600 500 "Drag demo")
;(gs:set-resizable 'DragDemo nil)
(gs:canvas 'MyCanvas)
(gs:set-background 'MyCanvas gs:white)
(gs:add-to 'DragDemo 'MyCanvas)
(gs:mouse-clicked 'MyCanvas 'mouse-clicked-action true)
(gs:mouse-pressed 'MyCanvas 'mouse-pressed-action true)
(gs:mouse-released 'MyCanvas 'mouse-released-action true)
(gs:mouse-dragged 'MyCanvas 'mouse-dragged-action)
;(gs:set-scale 0.5 0.5) ; only for testing, dragging would fail
(gs:set-font 'MyCanvas "Lucida Sans Oblique" 18 "plain")
(gs:draw-text 'T "Drag objects with the mouse, click right for popup menu" 20 250 gs:darkGray)
(gs:fill-circle 'C 100 100 50 gs:red)
(gs:fill-circle 'C 60 60 30 gs:black)
(gs:fill-circle 'C 140 60 30 gs:black)
(gs:fill-circle 'C 100 110 8 gs:yellow)
(gs:draw-polygon 'P '(300 200 400 50 500 200) gs:blue)
(gs:draw-image 'I "/local/newLISP128.png" 300 300 128 128)
(gs:menu-popup 'EditMenuPopup "Edit")
(gs:menu-item 'EditCut 'gs:no-action "Cut")
(gs:menu-item 'EditCopy 'gs:no-action "Copy")
(gs:menu-item 'EditPaste 'gs:no-action "Paste")
(gs:disable 'EditCut 'EditCopy 'EditPaste)
(gs:add-to 'EditMenuPopup 'EditCut 'EditCopy 'EditPaste)
; comment out to test reorder
;(gs:reorder-tags '(I P C T))
(gs:set-visible 'DragDemo true)
;(gs:update)
;; actions
(set 'mouse-down-tags '())
(define (mouse-clicked-action x y button cnt modifiers tags)
(gs:set-text 'DragDemo (string x ":" y " " button " " cnt " " tags))
(if (or (= 3 button) (= modifiers 18)) ; check for ctrl-button1-click on Mac
(gs:show-popup 'EditMenuPopup 'MyCanvas x y))
)
(define (mouse-pressed-action x y button modifiers tags)
(gs:set-text 'DragDemo (string x ":" y " " button " " modifiers " " tags))
(set 'mouse-down-tags tags)
(set 'mouse-old-x x)
(set 'mouse-old-y y)
)
(define (mouse-released-action x y button modifiers tags)
(gs:set-text 'DragDemo (string x ":" y " " button " " modifiers " " tags))
(set 'mouse-down-tags '())
)
(define (mouse-dragged-action x y)
(dolist (t mouse-down-tags)
(gs:move-tag t (- x mouse-old-x) (- y mouse-old-y)))
(set 'mouse-old-x x)
(set 'mouse-old-y y)
)
(gs:listen)
;; eof