Wiki Page Content

Text Input

Why?

When I press a key on my keyboard, my program receives a character event, right?

Well, it's not always that simple. Sometimes it can take multiple key presses to produce a character. Sometimes a single key press can produce multiple characters.

Text input is not as simple as it seems, particularly when you consider International users (and you should). It's not hard to figure out why that is when you look at languages like Chinese, Japanese, and Korean. These languages, collectively referred to as the CJK, have thousands of symbols.

It would not be feasible to have a keyboard with over ten-thousand keys, would it? The solution to this is a software input method.

Terms

IME - Input Method Editor. A software input method. This is typically a program that intercepts key presses and interprets them before (eventually) passing them onto the application.

Composition - The text a user is currently inputting. This text is not yet finalized (committed) and the IME may modify it. Conventionally, this text is drawn with a solid or dotted line under it.

Candidate - An optional alternative text for the composition, gathered by the IME in the Candidate List.

Candidate List - A list of Candidates, used when there is any ambiguity.

Workflow

Step

Description

Example

1

The user activates an input method (IME). This is typically done via a hotkey or by selecting an input method in a GUI.

2

The user begins to type in their selected language, starting a Composition.

The application will receive an SDL_TextEditingEvent when a composition is changed (or started). This event contains the composition text as well as the cursor position within the composition. It also contains a length member that determines the length of the text selection, if any.

The application will receive an SDL_TextInputEvent when a composition is committed and also for normal (non-IME) text input. Receiving this event implies that a composition has been committed or a composition never began (direct text input).