From b833f588b3d9528e7fc650d841ee7a46b6c0ba78 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Fri, 30 Dec 2016 11:19:48 -0500 Subject: 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 (): 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. --- sdl2/events.scm | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'sdl2/events.scm') 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 +;;; Copyright © 2015, 2016 David Thompson ;;; ;;; 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? @@ -810,6 +816,28 @@ (scancode->symbol scancode) (mod->list mod))))) + +;;; +;;; Text Input +;;; + +(define-record-type + (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)) -- cgit v1.2.3