;;;; examples/07-scrollarea.lisp (defpackage #:ww.examples/7 (:use #:cl) (:export #:start)) (in-package #:ww.examples/7) (defclass scrollarea-example (ww::application) ((cube :initarg :cube :accessor cube))) (ww::defhandler move-cube (ww::on-keydown (app scancode) (with-slots (cube) app (case scancode (:scancode-v (setf (ww::unit-visiblep cube) (not (ww::unit-visiblep cube)))) (:scancode-left (decf (ww::x cube) 15)) (:scancode-right (incf (ww::x cube) 15)) (:scancode-up (incf (ww::y cube) 15)) (:scancode-down (decf (ww::y cube) 15)))))) (ww::defhandler clicked (ww::on-mousedown () (format t "~a was clicked~%" target))) (defmethod ww::boot ((app scrollarea-example)) (let ((cube (make-instance 'ww::image :texture (ww::get-asset "GelatinousCube.png")))) (setf (cube app) cube) (ww::add-handler app #'move-cube) (ww::add-handler cube #'clicked) (setf (ww::x cube) 400 (ww::y cube) 300) (ww::scale-by cube 2.0) (ww::add-unit cube) (setf (ww::unit-region cube) (make-instance 'ww::region :bottom 200 :top 400 :left 200 :right 600)))) (defun start () (ww::start (make-instance 'scrollarea-example :fps 30 :width 800 :height 600 :refocus-on-mousedown-p nil :title "A scrollable area." :asset-root (merge-pathnames "examples/" (asdf:system-source-directory :wheelwork)))))