diff --git a/demos/03-demo.lisp b/demos/03-demo.lisp index e766f78..8b5364b 100644 --- a/demos/03-demo.lisp +++ b/demos/03-demo.lisp @@ -7,7 +7,7 @@ (defclass app-data () ((body :accessor body - :documentation "Store top level access on new window") + :documentation "Top level access to browser window") (drag-mutex :reader drag-mutex :initform (bordeaux-threads:make-lock) @@ -26,31 +26,34 @@ (defun on-mouse-down (obj data) (let ((app (connection-data-item obj "app-data"))) (bordeaux-threads:with-lock-held ((drag-mutex app)) - (setf (z-index obj) 1) (unless (in-drag-p app) (setf (in-drag-p app) t) - (let* ((mouse-x (getf data ':screen-x)) - (mouse-y (getf data ':screen-y)) - (obj-top (parse-integer (top obj) :junk-allowed t)) - (obj-left (parse-integer (left obj) :junk-allowed t))) - (setf (drag-x app) (- mouse-x obj-left)) - (setf (drag-y app) (- mouse-y obj-top)) - (if (eq (getf data ':event-type) :touch) - (progn - (set-on-touch-move obj 'on-mouse-move) - (set-on-touch-end obj 'stop-obj-grab) - (set-on-touch-cancel obj 'on-mouse-leave)) - (progn - (set-on-mouse-move obj 'on-mouse-move) - (set-on-mouse-up obj 'stop-obj-grab) - (set-on-mouse-leave obj 'on-mouse-leave)))))))) + (let* ((id-drag (attribute obj "data-drag-obj")) + (drag-obj (attach-as-child obj id-drag)) + (mouse-x (getf data ':screen-x)) + (mouse-y (getf data ':screen-y)) + (obj-top (parse-integer (top drag-obj) :junk-allowed t)) + (obj-left (parse-integer (left drag-obj) :junk-allowed t))) + (setf (z-index drag-obj) 1) + (setf (drag-x app) (- mouse-x obj-left)) + (setf (drag-y app) (- mouse-y obj-top)) + (if (eq (getf data ':event-type) :touch) + (progn + (set-on-touch-move obj 'on-mouse-move) + (set-on-touch-end obj 'stop-obj-grab) + (set-on-touch-cancel obj 'on-mouse-leave)) + (progn + (set-on-mouse-move obj 'on-mouse-move) + (set-on-mouse-up obj 'stop-obj-grab) + (set-on-mouse-leave obj 'on-mouse-leave)))))))) (defun on-mouse-move (obj data) (let* ((app (connection-data-item obj "app-data")) + (drag-obj (attach-as-child obj (attribute obj "data-drag-obj"))) (x (getf data ':screen-x)) (y (getf data ':screen-y))) - (setf (top obj) (format nil "~Apx" (- y (drag-y app)))) - (setf (left obj) (format nil "~Apx" (- x (drag-x app)))))) + (setf (top drag-obj) (format nil "~Apx" (- y (drag-y app)))) + (setf (left drag-obj) (format nil "~Apx" (- x (drag-x app)))))) (defun on-mouse-leave (obj) (let ((app (connection-data-item obj "app-data"))) @@ -84,27 +87,34 @@ (let* ((app (connection-data-item obj "app-data")) (win (create-child (body app) (format nil - "