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.
 
 ~Input () override
 Destruct.
 
void Update ()
 Poll for window messages. Called by HandleBeginFrame().
 
void SetToggleFullscreen (bool enable)
 
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)
 
void SetScreenKeyboardVisible (bool enable)
 
void SetTouchEmulation (bool enable)
 
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)
 
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
 
bool GetKeyPress (Key key) const
 
bool GetScancodeDown (Scancode scancode) const
 
bool GetScancodePress (Scancode scancode) const
 
bool GetMouseButtonDown (MouseButtonFlags button) const
 
bool GetMouseButtonPress (MouseButtonFlags button) const
 
bool GetQualifierDown (Qualifier qualifier) const
 
bool GetQualifierPress (Qualifier qualifier) const
 
QualifierFlags GetQualifiers () const
 
IntVector2 GetMousePosition () const
 
IntVector2 GetMouseMove () const
 
int GetMouseMoveX () const
 
int GetMouseMoveY () const
 
int GetMouseMoveWheel () const
 
Vector2 GetInputScale () const
 
unsigned GetNumTouches () const
 
TouchStateGetTouch (unsigned index) const
 
unsigned GetNumJoysticks () const
 
JoystickStateGetJoystick (SDL_JoystickID id)
 
JoystickStateGetJoystickByIndex (unsigned index)
 
JoystickStateGetJoystickByName (const String &name)
 
bool GetToggleFullscreen () const
 
bool IsScreenJoystickVisible (SDL_JoystickID id) const
 
bool GetScreenKeyboardSupport () const
 
bool IsScreenKeyboardVisible () const
 
bool GetTouchEmulation () const
 
bool IsMouseVisible () const
 
bool IsMouseGrabbed () const
 
bool IsMouseLocked () const
 
MouseMode GetMouseMode () const
 
bool HasFocus ()
 
bool IsMinimized () const
 
- Public Member Functions inherited from Urho3D::Object
 Object (Context *context)
 Construct.
 
 ~Object () override
 Destruct. Clean up self from event sender & receiver structures.
 
virtual StringHash GetType () const =0
 
virtual const StringGetTypeName () const =0
 
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
 
const VariantMapGetGlobalVars () const
 
void SetGlobalVar (StringHash key, const Variant &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
 
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.
 
 RefCounted (const RefCounted &rhs)=delete
 Prevent copy construction.
 
RefCountedoperator= (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
 
int WeakRefs () const
 
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 (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< 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, JoystickStatejoysticks_
 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 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

◆ AddScreenJoystick()

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:

◆ GetInputScale()

Vector2 Urho3D::Input::GetInputScale ( ) const
inline

Return input coordinate scaling. Should return non-unity on High DPI display.

◆ GetJoystick()

JoystickState * Urho3D::Input::GetJoystick ( SDL_JoystickID  id)

Return joystick state by ID, or null if does not exist.

◆ GetJoystickByIndex()

JoystickState * Urho3D::Input::GetJoystickByIndex ( unsigned  index)

Return joystick state by index, or null if does not exist. 0 = first connected joystick.

◆ GetJoystickByName()

JoystickState * Urho3D::Input::GetJoystickByName ( const String name)

Return joystick state by name, or null if does not exist.

◆ GetKeyDown()

bool Urho3D::Input::GetKeyDown ( Key  key) const

Check if a key is held down.

Here is the call graph for this function:

◆ GetKeyPress()

bool Urho3D::Input::GetKeyPress ( Key  key) const

Check if a key has been pressed on this frame.

Here is the call graph for this function:

◆ GetMouseButtonDown()

bool Urho3D::Input::GetMouseButtonDown ( MouseButtonFlags  button) const

Check if a mouse button is held down.

◆ GetMouseButtonPress()

bool Urho3D::Input::GetMouseButtonPress ( MouseButtonFlags  button) const

Check if a mouse button has been pressed on this frame.

◆ GetMouseMode()

MouseMode Urho3D::Input::GetMouseMode ( ) const
inline

Return the mouse mode.

◆ GetMouseMove()

IntVector2 Urho3D::Input::GetMouseMove ( ) const

Return mouse movement since last frame.

◆ GetMouseMoveWheel()

int Urho3D::Input::GetMouseMoveWheel ( ) const
inline

Return mouse wheel movement since last frame.

◆ GetMouseMoveX()

int Urho3D::Input::GetMouseMoveX ( ) const

Return horizontal mouse movement since last frame.

◆ GetMouseMoveY()

int Urho3D::Input::GetMouseMoveY ( ) const

Return vertical mouse movement since last frame.

◆ GetMousePosition()

IntVector2 Urho3D::Input::GetMousePosition ( ) const

Return mouse position within window. Should only be used with a visible mouse cursor. Uses the backbuffer (Graphics width/height) coordinates.

Here is the caller graph for this function:

◆ GetNumJoysticks()

unsigned Urho3D::Input::GetNumJoysticks ( ) const
inline

Return number of connected joysticks.

◆ GetNumTouches()

unsigned Urho3D::Input::GetNumTouches ( ) const
inline

Return number of active finger touches.

◆ GetQualifierDown()

bool Urho3D::Input::GetQualifierDown ( Qualifier  qualifier) const

Check if a qualifier key is held down.

Here is the caller graph for this function:

◆ GetQualifierPress()

bool Urho3D::Input::GetQualifierPress ( Qualifier  qualifier) const

Check if a qualifier key has been pressed on this frame.

◆ GetQualifiers()

QualifierFlags Urho3D::Input::GetQualifiers ( ) const

Return the currently held down qualifiers.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetScancodeDown()

bool Urho3D::Input::GetScancodeDown ( Scancode  scancode) const

Check if a key is held down by scancode.

Here is the call graph for this function:

◆ GetScancodePress()

bool Urho3D::Input::GetScancodePress ( Scancode  scancode) const

Check if a key has been pressed on this frame by scancode.

Here is the call graph for this function:

◆ GetScreenKeyboardSupport()

bool Urho3D::Input::GetScreenKeyboardSupport ( ) const

Return whether on-screen keyboard is supported.

◆ GetToggleFullscreen()

bool Urho3D::Input::GetToggleFullscreen ( ) const
inline

Return whether fullscreen toggle is enabled.

◆ GetTouch()

TouchState * Urho3D::Input::GetTouch ( unsigned  index) const

Return active finger touch by index.

◆ GetTouchEmulation()

bool Urho3D::Input::GetTouchEmulation ( ) const
inline

Return whether touch emulation is enabled.

◆ HasFocus()

bool Urho3D::Input::HasFocus ( )
inline

Return whether application window has input focus.

Here is the caller graph for this function:

◆ IsMinimized()

bool Urho3D::Input::IsMinimized ( ) const

Return whether application window is minimized.

Here is the caller graph for this function:

◆ IsMouseGrabbed()

bool Urho3D::Input::IsMouseGrabbed ( ) const
inline

Return whether the mouse is currently being grabbed by an operation.

◆ IsMouseLocked()

bool Urho3D::Input::IsMouseLocked ( ) const

Return whether the mouse is locked to the window.

◆ IsMouseVisible()

bool Urho3D::Input::IsMouseVisible ( ) const
inline

Return whether the operating system mouse cursor is visible.

◆ IsScreenJoystickVisible()

bool Urho3D::Input::IsScreenJoystickVisible ( SDL_JoystickID  id) const

Return whether a virtual joystick is visible.

◆ IsScreenKeyboardVisible()

bool Urho3D::Input::IsScreenKeyboardVisible ( ) const

Return whether on-screen keyboard is being shown.

◆ RemoveScreenJoystick()

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:

◆ ResetState()

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:

◆ SetMouseMode()

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:

◆ SetMousePosition()

void Urho3D::Input::SetMousePosition ( const IntVector2 position)

Set the mouse cursor position. Uses the backbuffer (Graphics width/height) coordinates.

Here is the caller graph for this function:

◆ SetScreenJoystickVisible()

void Urho3D::Input::SetScreenJoystickVisible ( SDL_JoystickID  id,
bool  enable 
)

Set whether the virtual joystick is visible.

Here is the call graph for this function:

◆ SetScreenKeyboardVisible()

void Urho3D::Input::SetScreenKeyboardVisible ( bool  enable)

Show or hide on-screen keyboard on platforms that support it. When shown, keypresses from it are delivered as key events.

◆ SetToggleFullscreen()

void Urho3D::Input::SetToggleFullscreen ( bool  enable)

Set whether ALT-ENTER fullscreen toggle is enabled.

◆ SetTouchEmulation()

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

Here is the call 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