Skip to content

Instantly share code, notes, and snippets.

@fouric
Created October 22, 2019 06:15
Show Gist options
  • Save fouric/8068a1ce3e9a0ae8ce664c2b182b2e1d to your computer and use it in GitHub Desktop.
Save fouric/8068a1ce3e9a0ae8ce664c2b182b2e1d to your computer and use it in GitHub Desktop.
(defun outer (renderer)
(unless sdl2::*event-loop*
(setf sdl2::*event-loop* t)
(sdl2:in-main-thread (:background nil)
(unwind-protect
(inner renderer nil)
(setf sdl2::*event-loop* nil)))))
(defun inner (renderer quit?)
(flet ((idle-function ()
(sdl2:set-render-draw-color renderer 255 255 255 255)
(sdl2:render-clear renderer)
(sdl2:render-present renderer)))
(sdl2:with-sdl-event (event)
(cond
((not (zerop (sdl2:next-event event :poll nil)))
(let* ((event-type (sdl2:get-event-type event))
(event-id (and (sdl2::user-event-type-p event-type) (event :user :code))))
(case event-type
(:lisp-message
(sdl2::get-and-handle-messages))
(:keydown
(let ((keysym (plus-c:c-ref event sdl2-ffi:sdl-event :key :keysym)))
(when (sdl2:scancode= (sdl2:scancode-value keysym) :scancode-q)
(sdl2:push-event :quit))))
(:idle
(idle-function))
(:quit
(setf quit? (funcall (lambda () t)))))
(when (and event-id (not (eq event-type :lisp-message)))
(sdl2::free-user-data event-id))))
(quit?
(return-from inner))
(t
(idle-function)))))
(inner renderer quit?))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment