The Zandalar project

From CEGUI Wiki - Crazy Eddie's GUI System (Open Source)
Revision as of 06:27, 9 July 2013 by Timotei (Talk | contribs)

Jump to: navigation, search

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)

Focus a button using the keyboard/gamepad

TODO - This should go into the GUI Navigation part.

Proposed design

Events

For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:

Input Event name Data Functions covered
MovementInputEvent
  • Position : Vector2
  • Delta : Vector2
  • injectMouseMove
  • injectMousePosition
PressedButtonInputEvent
  • Button : Buttons Enum/integer or long for maximum flexibility
  • injectMouseButtonDown
  • injectKeyDown
ReleasedButtonInputEvent
  • Button : Buttons Enum/integer or long for maximum flexibility
  • injectMouseButtonUp
  • injectKeyUp
ActivatedInputEvent
  • Count (1+) : int
  • injectMouseButtonClick
  • injectMouseButtonDoubleClick
  • injectMouseButtonTripleClick
TextInputEvent
  • Text : string/char
  • injectChar
ScrollInputEvent
  • Delta : int
  • Direction : ScrollDirection(0 - horizontal, 1 - vertical)
  • injectMouseWheelChange

Unmapped (yet) functions:

  • injectMouseLeaves

GUI navigation

Use cases

Navigate between a set textboxes

Prerequisite: first textbox is focused

  • Press `Tab`
  • The next textbox is focused