;;; 01-image-display-and-drag.lisp (defpackage #:ww.examples/1 (:use #:cl) (:export #:start)) (in-package :ww.examples/1) (defclass image-display-and-drag (ww::application ) ()) (ww::defhandler dragging-unit (ww::on-mousemotion (app x y) (let ((unit (elt (ww::application-scene app) 0))) (setf (ww:x unit) x (ww:y unit) y)))) (ww:defhandler start-drag (ww:on-mousedown (target) (ww::add-handler ww::*application* #'dragging-unit))) (ww:defhandler stop-drag (ww::on-mouseup (app) (ww::remove-handler app #'dragging-unit))) (defmethod ww::boot ((app image-display-and-drag)) (let ((bm (make-instance 'ww::image :texture (ww::get-asset "Fezghoul.png")))) (describe (ww::model-matrix bm)) (describe bm) (describe app) (ww::add-unit bm) (ww::add-handler bm #'start-drag) (ww::add-handler app #'stop-drag) (format t "CLICK AND DRAG THE GHOUL~%") )) (defun start () (ww::start (make-instance 'image-display-and-drag :mouse-button-events-bubble-p t :mouse-motion-events-bubble-p t :asset-root (merge-pathnames "examples/" (asdf:system-source-directory :wheelwork)))))