summaryrefslogtreecommitdiff
path: root/sly/window.scm
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2015-12-22 14:35:44 -0500
committerDavid Thompson <dthompson2@worcester.edu>2015-12-22 16:28:18 -0500
commit8b9b5d371d1dc1c780e227ce9a555cf6c88a85c8 (patch)
treef1b6524f92aaa329667f08f4a010a7b5e6925ae8 /sly/window.scm
parent60d601cbb5eb142d01f880b5902329ada93fc91a (diff)
Upgrade to SDL2!
This commit is massive and crazy and I'm not going to do the usual GNU ChangeLog thing because it's just too much. Let's just be happy that the port is completed!
Diffstat (limited to 'sly/window.scm')
-rw-r--r--sly/window.scm67
1 files changed, 35 insertions, 32 deletions
diff --git a/sly/window.scm b/sly/window.scm
index 0ee28cb..de52daa 100644
--- a/sly/window.scm
+++ b/sly/window.scm
@@ -22,9 +22,11 @@
;;; Code:
(define-module (sly window)
+ #:use-module (ice-9 match)
#:use-module (srfi srfi-9)
- #:use-module ((sdl sdl) #:prefix SDL:)
- #:use-module ((sdl mixer) #:prefix SDL:)
+ #:use-module ((sdl2) #:prefix sdl2:)
+ #:use-module ((sdl2 events) #:prefix sdl2:)
+ #:use-module ((sdl2 video) #:prefix sdl2:)
#:use-module (sly event)
#:use-module (sly signal)
#:use-module (sly math transform)
@@ -38,11 +40,12 @@
window-height
window-size
window-projection
- open-window
- close-window
with-window
window-resize-hook
- window-close-hook))
+ window-close-hook
+
+ init-window
+ swap-window))
(define-record-type <window>
(%make-window title resolution fullscreen?)
@@ -57,21 +60,17 @@
(fullscreen? #f))
(%make-window title resolution fullscreen?))
-(define window-resize-hook (make-hook 2))
+(define window-resize-hook (make-hook 1))
(register-event-handler
- 'video-resize
+ 'window-resize
(lambda (e)
- (let ((width (SDL:event:resize:w e))
- (height (SDL:event:resize:h e)))
- ;; Reset video mode.
- (SDL:set-video-mode width height 24 '(opengl))
- (run-hook window-resize-hook width height))))
+ (match (sdl2:window-event-vector e)
+ ((width height)
+ (run-hook window-resize-hook (vector2 width height))))))
(define-signal window-size
- (hook->signal window-resize-hook
- (vector2 0 0)
- vector2))
+ (hook->signal window-resize-hook (vector2 0 0) identity))
(define-signal window-width (signal-map vx window-size))
(define-signal window-height (signal-map vy window-size))
@@ -89,26 +88,30 @@
(lambda (e)
(run-hook window-close-hook)))
-(define* (open-window #:optional (window (make-window #:title "")))
- "Open the game window using the settings in WINDOW."
- (let ((flags (if (window-fullscreen? window) '(opengl fullscreen) 'opengl))
- (width (vx (window-resolution window)))
- (height (vy (window-resolution window))))
- (signal-set! window-size (vector2 width height))
- ;; Initialize everything
- (SDL:enable-unicode #t)
- (SDL:init 'everything)
- ;; Open SDL window in OpenGL mode.
- (unless (SDL:set-video-mode width height 24 flags)
- (error "Failed to open window:" width height flags))
- (SDL:set-caption (window-title window))))
+(define %sdl-window #f)
+(define %gl-context #f)
+
+(define (init-window)
+ (set! %sdl-window (sdl2:make-window #:opengl? #t #:show? #t))
+ (set! %gl-context (sdl2:make-gl-context %sdl-window)))
+
+(define (open-window window)
+ (let ((res (window-resolution window)))
+ (sdl2:set-window-title! %sdl-window (window-title window))
+ (sdl2:set-window-size! %sdl-window (list (vx res) (vy res)))
+ (sdl2:show-window! %sdl-window)
+ (signal-set! window-size res)))
(define (close-window)
- "Close the currently open window."
- (SDL:quit))
+ (sdl2:hide-window! %sdl-window)
+ (sdl2:sdl-quit))
(define-syntax-rule (with-window window body ...)
(dynamic-wind
- (lambda () (open-window window))
+ (lambda ()
+ (open-window window))
(lambda () body ...)
- (lambda () (close-window))))
+ close-window))
+
+(define (swap-window)
+ (sdl2:swap-gl-window %sdl-window))