aboutsummaryrefslogtreecommitdiffhomepage
path: root/examples/13-menus.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/13-menus.lisp')
-rw-r--r--examples/13-menus.lisp47
1 files changed, 47 insertions, 0 deletions
diff --git a/examples/13-menus.lisp b/examples/13-menus.lisp
new file mode 100644
index 0000000..66d455c
--- /dev/null
+++ b/examples/13-menus.lisp
@@ -0,0 +1,47 @@
+;;;; menus.lisp
+
+(defpackage #:ww.examples/13
+ (:use #:cl)
+ (:export #:start))
+
+(in-package :ww.examples/13)
+
+(defclass menus-demo (ww::application) ())
+
+(defclass numbered-image (ww::image)
+ ((n :initarg :num :reader num)))
+
+(ww:defhandler option-clicked
+ (ww::on-mousedown (img)
+ (format t "~a was clicked~%" (num img))))
+
+(defmethod ww::boot ((app menus-demo))
+ (let ((vscroller
+ (make-instance 'ww::vscroller
+ :scroll-speed 10
+ :region (make-instance 'ww::region
+ :left 0 :right 100
+ :top 250 :bottom 0))))
+ (loop for i to 10
+ for img = (make-instance 'numbered-image
+ :num i
+ :texture (ww:get-asset "Fezghoul.png"))
+ do
+ (ww::add-handler img #'option-clicked)
+ (ww::add-menu-option vscroller img))
+ (ww:add-unit vscroller)
+ (ww:refocus-on vscroller)))
+
+
+(defun start (&optional (scale 1.0) (side 500))
+ (ww:start
+ (make-instance
+ 'menus-demo
+ :fps 30
+ :width (round (* scale side))
+ :height (round (* scale side))
+ :scale scale
+ :title "Canvas demo"
+ :asset-root (merge-pathnames
+ "examples/"
+ (asdf:system-source-directory :wheelwork)))))