Urho3D
Public Member Functions | Private Member Functions | Private Attributes | List of all members
Urho3D::Input Class Reference

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

#include </home/runner/work/urho3d-doxygen.github.io/urho3d-doxygen.github.io/urho3d_repo/Source/Urho3D/Input/Input.h>

Inheritance diagram for Urho3D::Input:
Urho3D::Object Urho3D::RefCounted

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.
 
i32 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.
 
i32 GetNumTouches () const
 Return number of active finger touches.
 
TouchStateGetTouch (i32 index) const
 Return active finger touch by index.
 
i32 GetNumJoysticks () const
 Return number of connected joysticks.
 
JoystickStateGetJoystick (SDL_JoystickID id)
 Return joystick state by ID, or null if does not exist.
 
JoystickStateGetJoystickByIndex (i32 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.
 
 ~Object () override
 Destruct. Clean up self from event sender & receiver structures.
 
virtual StringHash GetType () const =0
 Return type hash. More...
 
virtual const StringGetTypeName () const =0
 Return type name. More...
 
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 Vector< 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.
 
 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
 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 (i32 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.
 
i32 GetTouchIndexFromID (int touchID)
 Get the index of a touch based on the touch ID.
 
i32 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.

◆ 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.

◆ ResetState()

void Urho3D::Input::ResetState ( )
private

Clear input state.

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

◆ 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.


The documentation for this class was generated from the following files: