Difference between revisions of "The Zandalar project"
| m (→GUI navigation) | |||
| Line 120: | Line 120: | ||
| === Navigate a form === | === Navigate a form === | ||
| − | Prerequisite: first  | + | Prerequisite: first control in the current window is focused; navigation is configured. | 
| * Pressed("Tab") = focus next ("next") | * Pressed("Tab") = focus next ("next") | ||
| * Pressed("CTRL + Tab") = focus previous ("previous") | * Pressed("CTRL + Tab") = focus previous ("previous") | ||
| Line 128: | Line 128: | ||
| === Navigate a 2D Menu === | === Navigate a 2D Menu === | ||
| − | Prerequisite: first  | + | Prerequisite: first control in the current window is focused; navigation is configured: | 
| * Pressed("left") = go left ("left") | * Pressed("left") = go left ("left") | ||
| * Pressed("right") = go left ("right") | * Pressed("right") = go left ("right") | ||
Revision as of 21:49, 9 July 2013
The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.
Input Aggregator & events
Use Cases
The use cases are described by steps. For each step there might be some actions done at different levels:
- Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).
-  Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters
- For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.
 
- InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.
Clicking a button using a mouse
| Step description | Raw input | Input Injection | InputEvent fed to CEGUI | 
|---|---|---|---|
| Move the mouse over the button | Mouse movement | injectMouseMove/injectMousePosition | MovementInputEvent | 
| Press the LMB | Mouse button press | injectMouseButtonDown(LMB) | PressedButtonInputEvent(Mouse_LMB) | 
| Release the LMB | Mouse button release | injectMouseButtonUp(LMB) | ReleasedButtonInputEvent(Mouse_LMB) | 
| The button is clicked (Click event is triggered) | N/A | N/A | N/A | 
Clicking/activating a button using the keyboard (new feature)
| Step description | Raw input | Input Injection | InputEvent fed to CEGUI | 
|---|---|---|---|
| Focus the button | Uses the use case "Focus a button using the keyboard/gamepad" | ||
| Press the ENTER key (1) | Key Button press | injectKeyDown(Enter) | PressedButtonInputEvent(Keyb_Enter) | 
| Release the ENTER key | Key Button release | injectKeyUp(Enter) | ReleasedButtonInputEvent(Keyb_Enter) | 
| The button is clicked (Click event is triggered) | N/A | N/A | N/A | 
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.
Clicking/activating a button using a gamepad
The same as previous Clicking/activating a button using the keyboard, but with the difference that it uses a Gamepad button instead of a Keyboard one.
Type text into a textbox
| Step description | Raw input | Input Injection | InputEvent fed to CEGUI | 
|---|---|---|---|
| Focus the textbox | Uses the use case "Focus a textbox using the keyboard/gamepad" | ||
| Press a character key | Char press | injectChar(chr) | TextInputEvent(chr) | 
| Press a non-character key | Key Button press | injectKeyDown(key) | PressedButtonInputEvent(Keyb_key) | 
| Release a non-character key | Key Button release | injectKeyUp(key) | ReleasedButtonInputEvent(Keyb_key | 
Scroll horizontally with the mouse wheel
| Step description | Raw input | Input Injection | InputEvent fed to CEGUI | 
|---|---|---|---|
| Rotate the wheel | Wheel rotation delta | injectMouseWheelChange(delta) | ScrollInputEvent(direction, delta) | 
Proposed design
Events
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:
| Input Event name | Data | Functions covered | 
|---|---|---|
| MovementInputEvent | 
 | 
 | 
| PressedButtonInputEvent | 
 | 
 | 
| ReleasedButtonInputEvent | 
 | 
 | 
| ActivatedInputEvent | 
 | 
 | 
| TextInputEvent | 
 | 
 | 
| ScrollInputEvent | 
 | 
 | 
Unmapped (yet) functions:
- injectMouseLeaves
Use cases
Focus a button using the keyboard/gamepad
Just calling focus()
Prerequisite: first control in the current window is focused; navigation is configured.
- Pressed("Tab") = focus next ("next")
- Pressed("CTRL + Tab") = focus previous ("previous")
Steps:
- Press `Tab`
- The next control is focused.
Prerequisite: first control in the current window is focused; navigation is configured:
- Pressed("left") = go left ("left")
- Pressed("right") = go left ("right")
- Pressed("top") = go left ("top")
- Pressed("up") = go left ("up")
- ^The same items but with the gamepad's D-Pad configuration instead of the keys
Steps
- Press a configured key/gamepad button.
- The control in the specified direction is focused.

