Uint32 | type | SDL_TEXTINPUT |
Uint32 | timestamp | イベントのタイムスタンプ |
Uint32 | windowID | フォーカスのあるウィンドウ (可能なら) |
char[SDL_TEXTINPUTEVENT_TEXT_SIZE] | text | NUL終端のUTF-8テキスト |
SDL_TextInputEventはSDL_Eventのメンバで, SDL_TEXTINPUTが報告されたときに使われる. eventのtextフィールドからアクセスできる.
チュートリアルはここにある.
詳細な説明 (SDLメーリングリストのJiang Jiang <gzjjgod@gmail.com>の投稿より)
典型的なGUIアプリケーションでは, OSは(SDL_TEXTEDITINGで)入力中のテキストの通知を担当することになる. IMEで"abc"と入力し, そしてUnicode文字の"X"を得たとすると, SDLアプリケーションはまず3回のSDL_TEXTEDITINGイベントで"a", "ab", "abc"を受け取り, 次にSDL_INPUTイベントでUnicode文字の"X"を受け取る. このテキストの構成中に, ユーザはファンクションキーやバックスペースキーなどの任意のキーを押せる. SDLアプリケーションとIMEは両方ともキーを受け取り, これらのキーを扱うか否かを判断する. 例えばユーザがバックスペースキーを押すと, 多くのIMEは入力中の最後の文字を削除する. そしてSDLは新しいSDL_TEXTEDITINGイベントを受信する. (ユーザがa, b, バックスペース, cと入力したならば, アプリケーションは4回のイベント'a', 'ab', 'a', 'ac'を受け取ることになる.) OSはSDL_TEXTEDITINGイベントで受け取ったテキストを表示したいかどうかはわからないため, SDL_SetTextInputRect()でOSに入力中のテキストを表示するか否かのヒントを与えることができる.
テキストはSDL_TEXTINPUTEVENT_TEXT_SIZEバイトに制限される. このサイズより大きな文字列が来た場合, SDLはそれを複数のイベントに分けて送信する. 文字列はUTF-8形式で, UTF-8の途中で分割されないことが保証されているため, どのイベントでも常にコードポイントは完全である. しかし, 複数のコードポイントで1つのグリフの場合(例えば絵文字の「サムアップ」に続く肌の色), 複数のイベントに分かれる可能性がある.
このイベントはSDL_StartTextInput()でテキスト入力が有効にならない限り発生しない. テキスト入力はデスクトップ環境ではデフォルトで有効に, モバイル環境ではデフォルトで無効になっている.