Dry
|
Input subsystem. Converts operating system window messages to input state and events. More...
#include <Dry/Input/Input.h>
Public Member Functions | |
Input (Context *context) | |
Construct. | |
~Input () override | |
Destruct. | |
void | Update () |
Poll for window messages. Called by HandleBeginFrame(). | |
void | SetToggleFullscreen (bool enable) |
Set whether ALT-ENTER fullscreen toggle is enabled. | |
void | SetMouseVisible (bool enable, bool suppressEvent=false) |
Set whether the operating system mouse cursor is visible. When not visible (default), is kept centered to prevent leaving the window. Mouse visibility event can be suppressed– this also recalls any unsuppressed SetMouseVisible which can be returned by ResetMouseVisible(). | |
void | ResetMouseVisible () |
Reset last mouse visibility that was not suppressed in SetMouseVisible. | |
void | SetMouseGrabbed (bool grab, bool suppressEvent=false) |
Set whether the mouse is currently being grabbed by an operation. | |
void | ResetMouseGrabbed () |
Reset the mouse grabbed to the last unsuppressed SetMouseGrabbed call. | |
void | SetMouseMode (MouseMode mode, bool suppressEvent=false) |
Set the mouse mode. More... | |
void | ResetMouseMode () |
Reset the last mouse mode that wasn't suppressed in SetMouseMode. | |
SDL_JoystickID | AddScreenJoystick (XMLFile *layoutFile=nullptr, XMLFile *styleFile=nullptr) |
Add screen joystick. More... | |
bool | RemoveScreenJoystick (SDL_JoystickID id) |
Remove screen joystick by instance ID. More... | |
void | SetScreenJoystickVisible (SDL_JoystickID id, bool enable) |
Set whether the virtual joystick is visible. | |
void | SetScreenKeyboardVisible (bool enable) |
Show or hide on-screen keyboard on platforms that support it. When shown, keypresses from it are delivered as key events. | |
void | SetTouchEmulation (bool enable) |
Set touch emulation by mouse. Only available on desktop platforms. When enabled, actual mouse events are no longer sent and the mouse cursor is forced visible. | |
bool | RecordGesture () |
Begin recording a touch gesture. Return true if successful. The E_GESTURERECORDED event (which contains the ID for the new gesture) will be sent when recording finishes. | |
bool | SaveGestures (Serializer &dest) |
Save all in-memory touch gestures. Return true if successful. | |
bool | SaveGesture (Serializer &dest, unsigned gestureID) |
Save a specific in-memory touch gesture to a file. Return true if successful. | |
unsigned | LoadGestures (Deserializer &source) |
Load touch gestures from a file. Return number of loaded gestures, or 0 on failure. | |
bool | RemoveGesture (unsigned gestureID) |
Remove an in-memory gesture by ID. Return true if was found. | |
void | RemoveAllGestures () |
Remove all in-memory gestures. | |
void | SetMousePosition (const IntVector2 &position) |
Set the mouse cursor position. Uses the backbuffer (Graphics width/height) coordinates. | |
void | CenterMousePosition () |
Center the mouse position. | |
Key | GetKeyFromName (const String &name) const |
Return keycode from key name. | |
Key | GetKeyFromScancode (Scancode scancode) const |
Return keycode from scancode. | |
String | GetKeyName (Key key) const |
Return name of key from keycode. | |
Scancode | GetScancodeFromKey (Key key) const |
Return scancode from keycode. | |
Scancode | GetScancodeFromName (const String &name) const |
Return scancode from key name. | |
String | GetScancodeName (Scancode scancode) const |
Return name of key from scancode. | |
bool | GetKeyDown (Key key) const |
Check if a key is held down. | |
bool | GetKeyPress (Key key) const |
Check if a key has been pressed on this frame. | |
bool | GetScancodeDown (Scancode scancode) const |
Check if a key is held down by scancode. | |
bool | GetScancodePress (Scancode scancode) const |
Check if a key has been pressed on this frame by scancode. | |
bool | GetMouseButtonDown (MouseButtonFlags button) const |
Check if a mouse button is held down. | |
bool | GetMouseButtonPress (MouseButtonFlags button) const |
Check if a mouse button has been pressed on this frame. | |
bool | GetQualifierDown (Qualifier qualifier) const |
Check if a qualifier key is held down. | |
bool | GetQualifierPress (Qualifier qualifier) const |
Check if a qualifier key has been pressed on this frame. | |
QualifierFlags | GetQualifiers () const |
Return the currently held down qualifiers. | |
IntVector2 | GetMousePosition () const |
Return mouse position within window. Should only be used with a visible mouse cursor. Uses the backbuffer (Graphics width/height) coordinates. | |
IntVector2 | GetMouseMove () const |
Return mouse movement since last frame. | |
int | GetMouseMoveX () const |
Return horizontal mouse movement since last frame. | |
int | GetMouseMoveY () const |
Return vertical mouse movement since last frame. | |
int | GetMouseMoveWheel () const |
Return mouse wheel movement since last frame. | |
Vector2 | GetInputScale () const |
Return input coordinate scaling. Should return non-unity on High DPI display. | |
unsigned | GetNumTouches () const |
Return number of active finger touches. | |
TouchState * | GetTouch (unsigned index) const |
Return active finger touch by index. | |
unsigned | GetNumJoysticks () const |
Return number of connected joysticks. | |
JoystickState * | GetJoystick (SDL_JoystickID id) |
Return joystick state by ID, or null if does not exist. | |
JoystickState * | GetJoystickByIndex (unsigned index) |
Return joystick state by index, or null if does not exist. 0 = first connected joystick. | |
JoystickState * | GetJoystickByName (const String &name) |
Return joystick state by name, or null if does not exist. | |
bool | GetToggleFullscreen () const |
Return whether fullscreen toggle is enabled. | |
bool | IsScreenJoystickVisible (SDL_JoystickID id) const |
Return whether a virtual joystick is visible. | |
bool | GetScreenKeyboardSupport () const |
Return whether on-screen keyboard is supported. | |
bool | IsScreenKeyboardVisible () const |
Return whether on-screen keyboard is being shown. | |
bool | GetTouchEmulation () const |
Return whether touch emulation is enabled. | |
bool | IsMouseVisible () const |
Return whether the operating system mouse cursor is visible. | |
bool | IsMouseGrabbed () const |
Return whether the mouse is currently being grabbed by an operation. | |
bool | IsMouseLocked () const |
Return whether the mouse is locked to the window. | |
MouseMode | GetMouseMode () const |
Return the mouse mode. | |
bool | HasFocus () |
Return whether application window has input focus. | |
bool | IsMinimized () const |
Return whether application window is minimized. | |
![]() | |
Object (Context *context) | |
Construct. | |
~Object () override | |
Destruct. Clean up self from event sender & receiver structures. | |
virtual StringHash | GetType () const =0 |
Return type hash. | |
virtual const String & | GetTypeName () const =0 |
Return type name. | |
virtual const TypeInfo * | GetTypeInfo () const =0 |
Return type info. | |
virtual void | OnEvent (Object *sender, StringHash eventType, VariantMap &eventData) |
Handle event. | |
bool | IsInstanceOf (StringHash type) const |
Check current instance is type of specified type. | |
bool | IsInstanceOf (const TypeInfo *typeInfo) const |
Check current instance is type of specified type. | |
template<typename T > | |
bool | IsInstanceOf () const |
Check current instance is type of specified class. | |
template<typename T > | |
T * | Cast () |
Cast the object to specified most derived class. | |
template<typename T > | |
const T * | Cast () const |
Cast the object to specified most derived class. | |
void | SubscribeToEvent (StringHash eventType, EventHandler *handler) |
Subscribe to an event that can be sent by any sender. | |
void | SubscribeToEvent (Object *sender, StringHash eventType, EventHandler *handler) |
Subscribe to a specific sender's event. | |
void | SubscribeToEvent (StringHash eventType, const std::function< void(StringHash, VariantMap &)> &function, void *userData=nullptr) |
Subscribe to an event that can be sent by any sender. | |
void | SubscribeToEvent (Object *sender, StringHash eventType, const std::function< void(StringHash, VariantMap &)> &function, void *userData=nullptr) |
Subscribe to a specific sender's event. | |
void | UnsubscribeFromEvent (StringHash eventType) |
Unsubscribe from an event. | |
void | UnsubscribeFromEvent (Object *sender, StringHash eventType) |
Unsubscribe from a specific sender's event. | |
void | UnsubscribeFromEvents (Object *sender) |
Unsubscribe from a specific sender's events. | |
void | UnsubscribeFromAllEvents () |
Unsubscribe from all events. | |
void | UnsubscribeFromAllEventsExcept (const PODVector< StringHash > &exceptions, bool onlyUserData) |
Unsubscribe from all events except those listed, and optionally only those with userdata (script registered events.) | |
void | SendEvent (StringHash eventType) |
Send event to all subscribers. | |
void | SendEvent (StringHash eventType, VariantMap &eventData) |
Send event with parameters to all subscribers. | |
VariantMap & | GetEventDataMap () const |
Return a preallocated map for event data. Used for optimization to avoid constant re-allocation of event data maps. | |
template<typename... Args> | |
void | SendEvent (StringHash eventType, Args... args) |
Send event with variadic parameter pairs to all subscribers. The parameter pairs is a list of paramID and paramValue separated by comma, one pair after another. | |
Context * | GetContext () const |
Return execution context. | |
const Variant & | GetGlobalVar (StringHash key) const |
Return global variable based on key. | |
const VariantMap & | GetGlobalVars () const |
Return all global variables. | |
void | SetGlobalVar (StringHash key, const Variant &value) |
Set global variable with the respective key and value. | |
Object * | GetSubsystem (StringHash type) const |
Return subsystem by type. | |
Object * | GetEventSender () const |
Return active event sender. Null outside event handling. | |
EventHandler * | GetEventHandler () const |
Return active event handler. Null outside event handling. | |
bool | HasSubscribedToEvent (StringHash eventType) const |
Return whether has subscribed to an event without specific sender. | |
bool | HasSubscribedToEvent (Object *sender, StringHash eventType) const |
Return whether has subscribed to a specific sender's event. | |
bool | HasEventHandlers () const |
Return whether has subscribed to any event. | |
template<class T > | |
T * | GetSubsystem () const |
Template version of returning a subsystem. | |
const String & | GetCategory () const |
Return object category. Categories are (optionally) registered along with the object factory. Return an empty string if the object category is not registered. | |
void | SetBlockEvents (bool block) |
Block object from sending and receiving events. | |
bool | GetBlockEvents () const |
Return sending and receiving events blocking status. | |
![]() | |
RefCounted () | |
Construct. Allocate the reference count structure and set an initial self weak reference. | |
virtual | ~RefCounted () |
Destruct. Mark as expired and also delete the reference count structure if no outside weak references exist. | |
RefCounted (const RefCounted &rhs)=delete | |
Prevent copy construction. | |
RefCounted & | operator= (const RefCounted &rhs)=delete |
Prevent assignment. | |
void | AddRef () |
Increment reference count. Can also be called outside of a SharedPtr for traditional reference counting. | |
void | ReleaseRef () |
Decrement reference count and delete self if no more references. Can also be called outside of a SharedPtr for traditional reference counting. | |
int | Refs () const |
Return reference count. | |
int | WeakRefs () const |
Return weak reference count. | |
RefCount * | RefCountPtr () |
Return pointer to the reference count structure. | |
Private Member Functions | |
DRY_OBJECT (Input, Object) | |
void | Initialize () |
Initialize when screen mode initially set. | |
SDL_JoystickID | OpenJoystick (unsigned index) |
Open a joystick and return its ID. Return -1 if no joystick. | |
void | ResetJoysticks () |
Setup internal joystick structures. | |
void | GainFocus () |
Prepare input state for application gaining input focus. | |
void | LoseFocus () |
Prepare input state for application losing input focus. | |
void | ResetState () |
Clear input state. More... | |
void | ResetTouches () |
Clear touch states and send touch end events. | |
void | ResetInputAccumulation () |
Reset input accumulation. | |
unsigned | GetTouchIndexFromID (int touchID) |
Get the index of a touch based on the touch ID. | |
unsigned | PopTouchIndex () |
Used internally to return and remove the next available touch index. | |
void | PushTouchIndex (int touchID) |
Push a touch index back into the list of available when finished with it. | |
void | SendInputFocusEvent () |
Send an input focus or window minimization change event. | |
void | SetMouseButton (MouseButton button, bool newState, int clicks) |
Handle a mouse button change. | |
void | SetKey (Key key, Scancode scancode, bool newState) |
Handle a key change. | |
void | SetMouseWheel (int delta) |
Handle mouse wheel change. | |
void | SuppressNextMouseMove () |
Suppress next mouse movement. | |
void | UnsuppressMouseMove () |
Unsuppress mouse movement. | |
void | HandleScreenMode (StringHash eventType, VariantMap &eventData) |
Handle screen mode event. | |
void | HandleBeginFrame (StringHash eventType, VariantMap &eventData) |
Handle frame start event. | |
void | HandleScreenJoystickTouch (StringHash eventType, VariantMap &eventData) |
Handle touch events from the controls of screen joystick(s). | |
void | HandleSDLEvent (void *sdlEvent) |
Handle SDL event. | |
void | SetMouseModeRelative (SDL_bool enable) |
Set SDL mouse mode relative. | |
void | SetMouseModeAbsolute (SDL_bool enable) |
Set SDL mouse mode absolute. | |
Private Attributes | |
WeakPtr< Graphics > | graphics_ |
Graphics subsystem. | |
HashSet< int > | keyDown_ |
Key down state. | |
HashSet< int > | keyPress_ |
Key pressed state. | |
HashSet< int > | scancodeDown_ |
Key down state by scancode. | |
HashSet< int > | scancodePress_ |
Key pressed state by scancode. | |
HashMap< int, TouchState > | touches_ |
Active finger touches. | |
List< int > | availableTouchIDs_ |
List that maps between event touch IDs and normalised touch IDs. | |
HashMap< int, int > | touchIDMap_ |
Mapping of touch indices. | |
String | textInput_ |
String for text input. | |
HashMap< SDL_JoystickID, JoystickState > | joysticks_ |
Opened joysticks. | |
MouseButtonFlags | mouseButtonDown_ |
Mouse buttons' down state. | |
MouseButtonFlags | mouseButtonPress_ |
Mouse buttons' pressed state. | |
IntVector2 | lastMousePosition_ |
Last mouse position for calculating movement. | |
IntVector2 | lastVisibleMousePosition_ |
Last mouse position before being set to not visible. | |
IntVector2 | mouseMove_ |
Mouse movement since last frame. | |
int | mouseMoveWheel_ |
Mouse wheel movement since last frame. | |
Vector2 | inputScale_ |
Input coordinate scaling. Non-unity when window and backbuffer have different sizes (e.g. Retina display.) | |
unsigned | windowID_ |
SDL window ID. | |
bool | toggleFullscreen_ |
Fullscreen toggle flag. | |
bool | mouseVisible_ |
Operating system mouse cursor visible flag. | |
bool | lastMouseVisible_ |
The last operating system mouse cursor visible flag set by end use call to SetMouseVisible. | |
bool | mouseGrabbed_ |
Flag to indicate the mouse is being grabbed by an operation. Subsystems like UI that uses mouse should temporarily ignore the mouse hover or click events. | |
bool | lastMouseGrabbed_ |
The last mouse grabbed set by SetMouseGrabbed. | |
MouseMode | mouseMode_ |
Determines the mode of mouse behaviour. | |
MouseMode | lastMouseMode_ |
The last mouse mode set by SetMouseMode. | |
bool | sdlMouseRelative_ |
Flag to determine whether SDL mouse relative was used. | |
bool | touchEmulation_ |
Touch emulation mode flag. | |
bool | inputFocus_ |
Input focus flag. | |
bool | minimized_ |
Minimized flag. | |
bool | focusedThisFrame_ |
Gained focus on this frame flag. | |
bool | suppressNextMouseMove_ |
Next mouse move suppress flag. | |
bool | mouseMoveScaled_ |
Whether mouse move is accumulated in backbuffer scale or not (when using events directly). | |
bool | initialized_ |
Initialized flag. | |
Additional Inherited Members | |
![]() | |
static const TypeInfo * | GetTypeInfoStatic () |
Return type info static. | |
![]() | |
Context * | context_ |
Execution context. | |
Input subsystem. Converts operating system window messages to input state and events.
SDL_JoystickID Dry::Input::AddScreenJoystick | ( | XMLFile * | layoutFile = nullptr , |
XMLFile * | styleFile = nullptr |
||
) |
Add screen joystick.
Return the joystick instance ID when successful or negative on error. If layout file is not given, use the default screen joystick layout. If style file is not given, use the default style file from root UI element.
This method should only be called in main thread.
bool Dry::Input::RemoveScreenJoystick | ( | SDL_JoystickID | id | ) |
Remove screen joystick by instance ID.
Return true if successful.
This method should only be called in main thread.
|
private |
Clear input state.
void Dry::Input::SetMouseMode | ( | MouseMode | mode, |
bool | suppressEvent = false |
||
) |
Set the mouse mode.
Set the mouse mode behaviour. MM_ABSOLUTE is the default behaviour, allowing the toggling of operating system cursor visibility and allowing the cursor to escape the window when visible. When the operating system cursor is invisible in absolute mouse mode, the mouse is confined to the window. If the operating system and UI cursors are both invisible, interaction with the Dry UI will be limited (eg: drag move / drag end events will not trigger). SetMouseMode(MM_ABSOLUTE) will call SetMouseGrabbed(false).
MM_RELATIVE sets the operating system cursor to invisible and confines the cursor to the window. The operating system cursor cannot be set to be visible in this mode via SetMouseVisible(), however changes are tracked and will be restored when another mouse mode is set. When the virtual cursor is also invisible, UI interaction will still function as normal (eg: drag events will trigger). SetMouseMode(MM_RELATIVE) will call SetMouseGrabbed(true).
MM_WRAP grabs the mouse from the operating system and confines the operating system cursor to the window, wrapping the cursor when it is near the edges. SetMouseMode(MM_WRAP) will call SetMouseGrabbed(true).
MM_FREE does not grab/confine the mouse cursor even when it is hidden. This can be used for cases where the cursor should render using the operating system outside the window, and perform custom rendering (with SetMouseVisible(false)) inside.