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 /sdl2/events.scm | |
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.
Diffstat (limited to 'sdl2/events.scm')
-rw-r--r-- | sdl2/events.scm | 32 |
1 files changed, 31 insertions, 1 deletions
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)) |