Fix for callbacks under windows from Andrew Lyon.
[cl-glfw.git] / examples / keytest.lisp
blob8eebadfe1bd91e29426795acd1cff926c55ec510
1 (require '#:asdf)
2 (asdf:oos 'asdf:load-op '#:cl-glfw)
3 (asdf:oos 'asdf:load-op '#:cl-glfw-opengl-version_1_0)
5 (defparameter *key-repeat* nil)
6 (defparameter *system-keys* t)
8 (defun keyfun (key action)
9 (cond
10 ((not (eql action glfw:+press+)))
12 ((eql key glfw:+key-esc+)
13 (format t "ESC => quit program~%")
14 (glfw:close-window))
16 ((eql key #\R)
17 (setf *key-repeat* (not *key-repeat*))
18 (funcall (if *key-repeat* #'glfw:enable #'glfw:disable) glfw:+key-repeat+)
19 (format t "R => Key repeat: ~s~%" (if *key-repeat* "ON" "OFF")))
21 ((eql key #\S)
22 (setf *system-keys* (not *system-keys*))
23 (funcall (if *system-keys* #'glfw:enable #'glfw:disable) glfw:+system-keys+)
24 (format t "S => System keys: ~s~%" (if *system-keys* "ON" "OFF")))
26 ((characterp key)
27 (format t "character ~s~%" key))
29 ((symbolp key)
30 (format t "symbol ~s~%" key))
32 (t
33 ;; shouldn't ever be called
34 (format t "??? ~s~%" key)))
35 (force-output))
37 (glfw:do-window (:title "Press some keys!" :width 250 :height 100)
38 ((glfw:set-key-callback 'keyfun))
40 (destructuring-bind (width height) (glfw:get-window-size)
41 (gl:viewport 0 0 width height))
43 (gl:clear-color (+ 0.5 (* 0.5 (sin (* 3 (glfw:get-time)))))
44 0 0 0)
45 (gl:clear gl:+color-buffer-bit+)
47 (sleep 0.04))