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/bindings.scm | 16 +++++++++++++++- sdl2/events.scm | 32 +++++++++++++++++++++++++++++++- sdl2/input/text.scm | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 sdl2/input/text.scm (limited to 'sdl2') 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 +;;; Copyright © 2015, 2016 David Thompson ;;; ;;; This file is part of guile-sdl2. ;;; @@ -815,6 +815,20 @@ RETURN-TYPE and accept arguments of ARG-TYPES." (define-public SDLK_EJECT (scancode->keycode SDL_SCANCODE_EJECT)) (define-public SDLK_SLEEP (scancode->keycode SDL_SCANCODE_SLEEP)) + +;;; +;;; 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 +;;; 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)) 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 +;;; +;;; 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 +;;; . + +;;; 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)) -- cgit v1.2.3