SDL2 でテキスト入力ボックスを作る 1

 テキスト入力ボックスを作ります。日本語の入力も出来るようにするには、SDL_StartTextInput() で入力を開始し、SDL_StopTextInput() で終了するらしいです。

 SDL_StartTextInput() を呼び出すと、イベント SDL_TEXTINPUT と SDL_TEXTEDITING が発生するようになります。確定文字は、SDL_TEXTINPUT で受け取ることができます。

 IME で変換途中は、SDL_TEXTEDITING で受け取るようです。IME は後回しにして、SDL_TEXTINPUT で入力文字を受け取ってみたところ、通常文字しか受け取れないようです。 Backspace や Enter は受け取れませんでした。Backspace や Enter は SDL_KEY_DOWN で受け取る必要がありそうです。

 SDL_SetTextInputRect() という関数があり、これを設定すると、IME の候補が下に表示されるようです。

 変換中の文字列は、SDL_TEXTEDITING イベントで受け取れました。確定すると、確定文字が SDL_TEXTINPUT で送られてきます。確定文字と変換中文字を組み合わせて表示するように作らないといけないようです。また、キャレット位置の管理も必要になるでしょう。文字列のバッファも必要なので、メモリも必要となるし、かなりのコードを書くことになりそうです。

 試してみたところ、SDL_TEXTEDITING で送られる文字列は終端を含めて、MAX 32 バイトのようです。長い文字列の場合は、複数回イベントが発生するようです。

 カーソルキーでキャレットも動かしたいし、Backspace や Delete も実装したいので、なかなか終わりません。

SDL2

Posted by sirius