Skip to content

Commit

Permalink
Everything works, except for fullscreen mode, which isn't according t…
Browse files Browse the repository at this point in the history
…o specification, yet.
  • Loading branch information
jtza8 committed Oct 31, 2011
1 parent e2bcabf commit 8580d01
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 13 deletions.
1 change: 1 addition & 0 deletions src/osx/appkit.lisp
Expand Up @@ -28,6 +28,7 @@


(defcenum ns-event-type
(:unknown 0) ;; Must fix.
(:left-mouse-down 1)
(:left-mouse-up 2)
(:right-mouse-down 3)
Expand Down
39 changes: 26 additions & 13 deletions src/osx/glop-osx.lisp
Expand Up @@ -4,6 +4,7 @@
(defparameter *opengl-bundle* nil)
(defparameter *event-stacks* (make-hash-table))
(defparameter *fullscreen-active* nil)
(defparameter *displays-captured* nil)
(declaim (special *native-video-mode*))

(defun event-stack (ns-window)
Expand Down Expand Up @@ -47,6 +48,26 @@
(defmethod current-video-mode ()
(glop-bridge:copy-display-mode (glop-bridge:main-display-id)))

(defun capture-displays ()
(unless *displays-captured*
(glop-bridge:capture-all-displays)
(setf *displays-captured* t)))

(defun key-state (key)
(key-pressed (cffi:foreign-enum-value 'glop-bridge::ns-key-code key)))

(defun release-displays ()
(when *displays-captured*
(glop-bridge:release-all-displays)
(setf *displays-captured* nil)))

(defmethod set-video-mode (mode)
(capture-displays)
(glop-bridge:set-display-mode
(glop-bridge:main-display-id)
(osx-video-mode-mode mode)
(cffi:null-pointer)))

(defun invert-screen-y (y)
(- (video-mode-height (current-video-mode)) y))

Expand All @@ -56,7 +77,7 @@
(loop for i below (glop-bridge:ns-array-count display-modes)
collect (glop-bridge:translate-to-video-mode
(glop-bridge:ns-array-object-at-index
display-modes i)))))
display-modes i)))))

(cffi:defcallback push-event-to-stack :void ((ns-event :pointer))
(let* ((event-type (glop-bridge:ns-event-type ns-event))
Expand Down Expand Up @@ -261,23 +282,16 @@
(list-video-modes)
(window-width window)
(window-height window))))
(glop-bridge:capture-all-displays)
(glop-bridge:set-display-mode
(glop-bridge:main-display-id)
(osx-video-mode-mode fullscreen-mode)
(cffi:null-pointer))
(set-video-mode fullscreen-mode)
(glop-bridge:ns-opengl-context-clear-drawable gl-context)
(glop-bridge:ns-opengl-context-set-full-screen gl-context)
(setf (window-fullscreen window) t
*fullscreen-active* t)
(push-expose-event window))
(progn
(glop-bridge:set-display-mode
(glop-bridge:main-display-id)
(osx-video-mode-mode *native-video-mode*)
(cffi:null-pointer))
(set-video-mode *native-video-mode*)
(release-displays)
(glop-bridge:ns-opengl-context-clear-drawable gl-context)
(glop-bridge:release-all-displays)
(glop-bridge:ns-opengl-context-set-view gl-context gl-view)
(setf (window-fullscreen window) nil
*fullscreen-active* nil)
Expand All @@ -290,8 +304,7 @@
for found = (or (cffi:pointer-eq ns-window
(glop-bridge:ns-event-window event))
*fullscreen-active*)
do (progn (glop-bridge:ns-event-type event)
(glop-bridge:glop-app-send-event glop-bridge:*ns-app* event)
do (progn (glop-bridge:glop-app-send-event glop-bridge:*ns-app* event)
(glop-bridge:glop-app-update-windows))
while (and blocking (or (not found) (null (event-stack ns-window))))
finally (when found (return (pop (event-stack ns-window))))))
Expand Down

0 comments on commit 8580d01

Please sign in to comment.