From 10fb8d3daebf8bfea4ee82c29f085adaf899073f Mon Sep 17 00:00:00 2001 From: David Thompson Date: Thu, 13 May 2021 09:48:25 -0400 Subject: input: mouse: Add bindings for showing/hiding/moving the mouse cursor. --- sdl2/input/mouse.scm | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'sdl2/input/mouse.scm') diff --git a/sdl2/input/mouse.scm b/sdl2/input/mouse.scm index c172909..ba0d81e 100644 --- a/sdl2/input/mouse.scm +++ b/sdl2/input/mouse.scm @@ -1,5 +1,5 @@ ;;; guile-sdl2 --- FFI bindings for SDL2 -;;; Copyright © 2017 David Thompson +;;; Copyright © 2017, 2021 David Thompson ;;; ;;; This file is part of guile-sdl2. ;;; @@ -32,7 +32,10 @@ #:export (mouse-x mouse-y mouse-button-pressed? - mouse-button-released?)) + mouse-button-released? + set-show-cursor! + cursor-visible? + warp-mouse)) (define (make-int) (make-bytevector (sizeof int))) @@ -70,3 +73,22 @@ (define (mouse-button-released? button) "Return #t if BUTTON is not currently being pressed." (not (mouse-button-pressed? button))) + +(define (set-show-cursor! show?) + "If SHOW? is #t, show the mouse cursor. Otherwise, hide it." + (when (< (ffi:sdl-show-cursor (if show? ffi:SDL_ENABLE ffi:SDL_DISABLE)) 0) + (sdl-error "set-show-cursor!" "failed to modify cursor visibility"))) + +(define (cursor-visible?) + "Return #t if the mouse cursor is currently visible." + (= (ffi:sdl-show-cursor ffi:SDL_QUERY) ffi:SDL_ENABLE)) + +(define* (warp-mouse x y #:optional window) + "Warp mouse cursor to (X, Y) relative to WINDOW. If WINDOW is not +provided, the mouse cursor is moved to the global screen +coordinates (X, Y)." + (if window + (ffi:sdl-warp-mouse-in-window ((@@ (sdl2 video) unwrap-window) window) + x y) + (unless (= (ffi:sdl-warp-mouse-global x y) 0) + (sdl-error "warp-mouse" "failed to warp mouse globally")))) -- cgit v1.2.3