Input subsystem. Converts operating system window messages to input state and events. More...

#include <Urho3D/Input/Input.h>

Inheritance diagram for Urho3D::Input:
[legend]
Collaboration diagram for Urho3D::Input:
[legend]

Public Member Functions

 Input (Context *context)
 Construct.
 
virtual ~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.
 
int GetKeyFromName (const String &name) const
 Return keycode from key name.
 
int GetKeyFromScancode (int scancode) const
 Return keycode from scancode.
 
String GetKeyName (int key) const
 Return name of key from keycode.
 
int GetScancodeFromKey (int key) const
 Return scancode from keycode.
 
int GetScancodeFromName (const String &name) const
 Return scancode from key name.
 
String GetScancodeName (int scancode) const
 Return name of key from scancode.
 
bool GetKeyDown (int key) const
 Check if a key is held down.
 
bool GetKeyPress (int key) const
 Check if a key has been pressed on this frame.
 
bool GetScancodeDown (int scancode) const
 Check if a key is held down by scancode.
 
bool GetScancodePress (int scancode) const
 Check if a key has been pressed on this frame by scancode.
 
bool GetMouseButtonDown (int button) const
 Check if a mouse button is held down.
 
bool GetMouseButtonPress (int button) const
 Check if a mouse button has been pressed on this frame.
 
bool GetQualifierDown (int qualifier) const
 Check if a qualifier key is held down.
 
bool GetQualifierPress (int qualifier) const
 Check if a qualifier key has been pressed on this frame.
 
int 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.
 
TouchStateGetTouch (unsigned index) const
 Return active finger touch by index.
 
unsigned GetNumJoysticks () const
 Return number of connected joysticks.
 
JoystickStateGetJoystick (SDL_JoystickID id)
 Return joystick state by ID, or null if does not exist.
 
JoystickStateGetJoystickByIndex (unsigned index)
 Return joystick state by index, or null if does not exist. 0 = first connected joystick.
 
JoystickStateGetJoystickByName (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.
 
- Public Member Functions inherited from Urho3D::Object
 Object (Context *context)
 Construct.
 
virtual ~Object () override
 Destruct. Clean up self from event sender & receiver structures.
 
virtual StringHash GetType () const =0
 Return type hash.
 
virtual const StringGetTypeName () const =0
 Return type name.
 
virtual const TypeInfoGetTypeInfo () 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.
 
VariantMapGetEventDataMap () 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.
 
ContextGetContext () const
 Return execution context.
 
const VariantGetGlobalVar (StringHash key) const
 Return global variable based on key.
 
const VariantMapGetGlobalVars () const
 Return all global variables.
 
void SetGlobalVar (StringHash key, const Variant &value)
 Set global variable with the respective key and value.
 
ObjectGetSubsystem (StringHash type) const
 Return subsystem by type.
 
ObjectGetEventSender () const
 Return active event sender. Null outside event handling.
 
EventHandlerGetEventHandler () 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 StringGetCategory () 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.
 
- Public Member Functions inherited from Urho3D::RefCounted
 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.
 
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.
 
RefCountRefCountPtr ()
 Return pointer to the reference count structure.
 

Private Member Functions

 URHO3D_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 (int button, bool newState)
 Handle a mouse button change.
 
void SetKey (int key, int 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< Graphicsgraphics_
 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, TouchStatetouches_
 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.
 
unsigned mouseButtonDown_
 Mouse buttons' down state.
 
unsigned 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 Public Member Functions inherited from Urho3D::Object
static const TypeInfoGetTypeInfoStatic ()
 Return type info static.
 
- Protected Attributes inherited from Urho3D::Object
Contextcontext_
 Execution context.
 

Detailed Description

Input subsystem. Converts operating system window messages to input state and events.

Member Function Documentation

SDL_JoystickID Urho3D::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.

Todo:
After a real joystick has been plugged in 1073741824 times, the ranges will overlap
Todo:
Axis emulation for screen joystick is not fully supported yet.

Here is the call graph for this function:

bool Urho3D::Input::RemoveScreenJoystick ( SDL_JoystickID  id)

Remove screen joystick by instance ID.

Return true if successful.

This method should only be called in main thread.

Here is the call graph for this function:

void Urho3D::Input::ResetState ( )
private

Clear input state.

Todo:
Check if resetting joystick state on input focus loss is even necessary

Here is the call graph for this function:

Here is the caller graph for this function:

void Urho3D::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 Urho 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.

Here is the call graph for this function:

Here is the caller graph for this function:


The documentation for this class was generated from the following files:
  • Source/Urho3D/Input/Input.h
  • Source/Urho3D/Input/Input.cpp