summaryrefslogtreecommitdiff
path: root/sly/event.scm
diff options
context:
space:
mode:
Diffstat (limited to 'sly/event.scm')
-rw-r--r--sly/event.scm42
1 files changed, 32 insertions, 10 deletions
diff --git a/sly/event.scm b/sly/event.scm
index c5e57cb..90fae3b 100644
--- a/sly/event.scm
+++ b/sly/event.scm
@@ -22,16 +22,16 @@
;;; Code:
(define-module (sly event)
- #:use-module ((sdl sdl) #:prefix SDL:)
+ #:use-module ((sdl2 events) #:prefix sdl2:)
#:export (process-events
register-event-handler))
-(define process-events
- (let ((e (SDL:make-event)))
- (lambda ()
- "Process all events in the input event queue."
- (while (SDL:poll-event e)
- (handle-event e)))))
+(define (process-events)
+ "Process all events in the input event queue."
+ (let ((e (sdl2:poll-event)))
+ (when e
+ (handle-event e)
+ (process-events))))
(define event-handlers (make-hash-table))
@@ -40,6 +40,28 @@
(define (handle-event e)
"Run the relevant hook for the event E."
- (let ((handle (hashq-get-handle event-handlers (SDL:event:type e))))
- (when handle
- ((cdr handle) e))))
+ (define (event-type e)
+ (cond
+ ((sdl2:keyboard-down-event? e)
+ 'key-down)
+ ((sdl2:keyboard-up-event? e)
+ 'key-up)
+ ((sdl2:mouse-button-down-event? e)
+ 'mouse-button-down)
+ ((sdl2:mouse-button-up-event? e)
+ 'mouse-button-up)
+ ((sdl2:mouse-motion-event? e)
+ 'mouse-motion)
+ ((sdl2:joystick-button-down-event? e)
+ 'joy-button-down)
+ ((sdl2:joystick-button-up-event? e)
+ 'joy-button-up)
+ ((sdl2:joystick-axis-event? e)
+ 'joy-axis-motion)
+ ((sdl2:window-resized-event? e)
+ 'window-resize)
+ ((sdl2:quit-event? e)
+ 'quit)))
+
+ (let ((handler (hashq-ref event-handlers (event-type e))))
+ (and handler (handler e))))