diff options
author | David Thompson <dthompson@vistahigherlearning.com> | 2016-12-30 11:19:48 -0500 |
---|---|---|
committer | David Thompson <dthompson@vistahigherlearning.com> | 2016-12-30 15:51:58 -0500 |
commit | b833f588b3d9528e7fc650d841ee7a46b6c0ba78 (patch) | |
tree | e0a393cca717153abd6bbe0e59505f1901393469 | |
parent | 2fb7f399f322122f2d5e5f436673fe386242505e (diff) |
Add bindings for text input event handling.
* sdl2/bindings.scm (sdl-start-text-input, sdl-stop-text-input,
sdl-is-text-input-active): New procedures.
* sdl2/events.scm (<text-input-event>): New record type.
(make-text-input-event, text-input-event?, text-input-event-timestamp,
text-input-event-window-id, text-input-event-text,
parse-text-input-event): New procedures.
* sdl2/input/text.scm: New file.
* Makefile.am (SOURCES): Add it.
-rw-r--r-- | Makefile.am | 5 | ||||
-rw-r--r-- | sdl2/bindings.scm | 16 | ||||
-rw-r--r-- | sdl2/events.scm | 32 | ||||
-rw-r--r-- | sdl2/input/text.scm | 43 |
4 files changed, 92 insertions, 4 deletions
diff --git a/Makefile.am b/Makefile.am index 5428b13..9bddc71 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,5 @@ # guile-sdl2 --- FFI bindings for SDL2 -# Copyright © 2015 David Thompson <davet@gnu.org> +# Copyright © 2015, 2016 David Thompson <davet@gnu.org> # # This file is part of guile-sdl2. # @@ -47,7 +47,8 @@ SOURCES = \ sdl2/surface.scm \ sdl2/render.scm \ sdl2/video.scm \ - sdl2/events.scm + sdl2/events.scm \ + sdl2/input/text.scm if WITH_LIBSDL2_IMAGE diff --git a/sdl2/bindings.scm b/sdl2/bindings.scm index e3167a0..e48ce64 100644 --- a/sdl2/bindings.scm +++ b/sdl2/bindings.scm @@ -1,5 +1,5 @@ ;;; guile-sdl2 --- FFI bindings for SDL2 -;;; Copyright © 2015 David Thompson <davet@gnu.org> +;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org> ;;; ;;; This file is part of guile-sdl2. ;;; @@ -817,6 +817,20 @@ RETURN-TYPE and accept arguments of ARG-TYPES." ;;; +;;; Text Input +;;; + +(define-foreign sdl-start-text-input + void "SDL_StartTextInput" '()) + +(define-foreign sdl-stop-text-input + void "SDL_StopTextInput" '()) + +(define-foreign sdl-is-text-input-active + sdl-bool "SDL_IsTextInputActive" '()) + + +;;; ;;; Mouse ;;; diff --git a/sdl2/events.scm b/sdl2/events.scm index aa08fff..c9e391b 100644 --- a/sdl2/events.scm +++ b/sdl2/events.scm @@ -1,5 +1,5 @@ ;;; guile-sdl2 --- FFI bindings for SDL2 -;;; Copyright © 2015 David Thompson <davet@gnu.org> +;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org> ;;; ;;; This file is part of guile-sdl2. ;;; @@ -70,6 +70,12 @@ keyboard-event-scancode keyboard-event-modifiers + make-text-input-event + text-input-event? + text-input-event-timestamp + text-input-event-window-id + text-input-event-text + make-mouse-button-event mouse-button-event? mouse-button-down-event? @@ -812,6 +818,28 @@ ;;; +;;; Text Input +;;; + +(define-record-type <text-input-event> + (make-text-input-event timestamp window-id text) + text-input-event? + (timestamp text-input-event-timestamp) + (window-id text-input-event-window-id) + (text text-input-event-text)) + +(define (parse-text-input-event ptr) + ;; Separate the first 3 struct fields which are all uint32s from the + ;; 32-byte UTF-8 encoded character buffer at the end of the struct. + (let* ((len (* (sizeof uint32) 3)) + (bv (pointer->bytevector ptr len)) + (timestamp (u32vector-ref bv 1)) + (window-id (u32vector-ref bv 2)) + (text (pointer->string (make-pointer (+ (pointer-address ptr) len))))) + (make-text-input-event timestamp window-id text))) + + +;;; ;;; Mouse ;;; @@ -991,6 +1019,8 @@ ((or (= type ffi:SDL_KEYDOWN) (= type ffi:SDL_KEYUP)) (parse-keyboard-event ptr)) + ((= type ffi:SDL_TEXTINPUT) + (parse-text-input-event ptr)) ((or (= type ffi:SDL_MOUSEBUTTONDOWN) (= type ffi:SDL_MOUSEBUTTONUP)) (parse-mouse-button-event ptr)) diff --git a/sdl2/input/text.scm b/sdl2/input/text.scm new file mode 100644 index 0000000..ea441d5 --- /dev/null +++ b/sdl2/input/text.scm @@ -0,0 +1,43 @@ +;;; guile-sdl2 --- FFI bindings for SDL2 +;;; Copyright © 2016 David Thompson <davet@gnu.org> +;;; +;;; This file is part of guile-sdl2. +;;; +;;; Guile-sdl2 is free software; you can redistribute it and/or modify +;;; it under the terms of the GNU Lesser General Public License as +;;; published by the Free Software Foundation; either version 3 of the +;;; License, or (at your option) any later version. +;;; +;;; Guile-sdl2 is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; General Public License for more details. +;;; +;;; You should have received a copy of the GNU Lesser General Public +;;; License along with guile-sdl2. If not, see +;;; <http://www.gnu.org/licenses/>. + +;;; Commentary: +;; +;; Unicode text input. +;; +;;; Code: + +(define-module (sdl2 input text) + #:use-module (system foreign) + #:use-module ((sdl2 bindings) #:prefix ffi:) + #:export (start-text-input + stop-text-input + text-input-active?)) + +(define (start-text-input) + "Enable text input events." + (ffi:sdl-start-text-input)) + +(define (stop-text-input) + "Disable text input events." + (ffi:sdl-stop-text-input)) + +(define (text-input-active?) + "Return #t if text input events are enabled." + (= (ffi:sdl-is-text-input-active) 1)) |