Sunshine v2025.118.151840
Self-hosted game stream host for Moonlight.
inputtino.cpp File Reference

Definitions for the inputtino Linux input handling. More...

#include <inputtino/input.hpp>
#include <libevdev/libevdev.h>
#include "src/config.h"
#include "src/platform/common.h"
#include "src/utility.h"
#include "inputtino_common.h"
#include "inputtino_gamepad.h"
#include "inputtino_keyboard.h"
#include "inputtino_mouse.h"
#include "inputtino_pen.h"
#include "inputtino_touch.h"
Include dependency graph for inputtino.cpp:

Functions

void platf::abs_mouse (input_t &input, const touch_port_t &touch_port, float x, float y)
 Absolute mouse move.
 
int platf::alloc_gamepad (input_t &input, const gamepad_id_t &id, const gamepad_arrival_t &metadata, feedback_queue_t feedback_queue)
 Create a new virtual gamepad.
 
std::unique_ptr< client_input_tplatf::allocate_client_input_context (input_t &input)
 Allocate a context to store per-client input data.
 
void platf::button_mouse (input_t &input, int button, bool release)
 Mouse button press/release.
 
void platf::free_gamepad (input_t &input, int nr)
 
void platf::freeInput (void *)
 
void platf::gamepad_battery (input_t &input, const gamepad_battery_t &battery)
 Send a gamepad battery event to the OS.
 
void platf::gamepad_motion (input_t &input, const gamepad_motion_t &motion)
 Send a gamepad motion event to the OS.
 
void platf::gamepad_touch (input_t &input, const gamepad_touch_t &touch)
 Send a gamepad touch event to the OS.
 
void platf::gamepad_update (input_t &input, int nr, const gamepad_state_t &gamepad_state)
 Updates virtual gamepad with the provided gamepad state.
 
platform_caps::caps_t platf::get_capabilities ()
 Get the supported platform capabilities to advertise to the client.
 
util::point_t platf::get_mouse_loc (input_t &input)
 Get the current mouse position on screen.
 
void platf::hscroll (input_t &input, int high_res_distance)
 Horizontal mouse scroll.
 
input_t platf::input ()
 Initialize the input system and return it.
 
void platf::keyboard_update (input_t &input, uint16_t modcode, bool release, uint8_t flags)
 Keyboard emulation.
 
void platf::move_mouse (input_t &input, int deltaX, int deltaY)
 Relative mouse move.
 
void platf::pen_update (client_input_t *input, const touch_port_t &touch_port, const pen_input_t &pen)
 Send a pen event to the OS.
 
void platf::scroll (input_t &input, int high_res_distance)
 Vertical mouse scroll.
 
std::vector< supported_gamepad_t > & platf::supported_gamepads (input_t *input)
 Gets the supported gamepads for this platform backend.
 
void platf::touch_update (client_input_t *input, const touch_port_t &touch_port, const touch_input_t &touch)
 Send a touch event to the OS.
 
void platf::unicode (input_t &input, char *utf8, int size)
 

Detailed Description

Definitions for the inputtino Linux input handling.

Function Documentation

◆ abs_mouse()

void platf::abs_mouse ( input_t & input,
const touch_port_t & touch_port,
float x,
float y )

Absolute mouse move.

Parameters
inputThe input_t instance to use.
touch_portThe touch_port instance to use.
xAbsolute x position.
yAbsolute y position.

Examples

abs_mouse(input, touch_port, 0, 0);

◆ alloc_gamepad()

int platf::alloc_gamepad ( input_t & input,
const gamepad_id_t & id,
const gamepad_arrival_t & metadata,
feedback_queue_t feedback_queue )

Create a new virtual gamepad.

Parameters
inputThe global input context.
idThe gamepad ID.
metadataController metadata from client (empty if none provided).
feedback_queueThe queue for posting messages back to the client.
Returns
0 on success.

◆ allocate_client_input_context()

std::unique_ptr< client_input_t > platf::allocate_client_input_context ( input_t & input)

Allocate a context to store per-client input data.

Allocates a context to store per-client input data.

Parameters
inputThe global input context.
Returns
A unique pointer to a per-client input data context.

◆ button_mouse()

void platf::button_mouse ( input_t & input,
int button,
bool release )

Mouse button press/release.

Parameters
inputThe input_t instance to use.
buttonWhich mouse button to emulate.
releaseWhether the event was a press (false) or a release (true)

Examples

button_mouse(input, 1, false); // Press left mouse button

◆ gamepad_battery()

void platf::gamepad_battery ( input_t & input,
const gamepad_battery_t & battery )

Send a gamepad battery event to the OS.

Sends a gamepad battery event to the OS.

Parameters
inputThe global input context.
batteryThe battery event.

◆ gamepad_motion()

void platf::gamepad_motion ( input_t & input,
const gamepad_motion_t & motion )

Send a gamepad motion event to the OS.

Sends a gamepad motion event to the OS.

Parameters
inputThe global input context.
motionThe motion event.

◆ gamepad_touch()

void platf::gamepad_touch ( input_t & input,
const gamepad_touch_t & touch )

Send a gamepad touch event to the OS.

Sends a gamepad touch event to the OS.

Parameters
inputThe global input context.
touchThe touch event.

◆ gamepad_update()

void platf::gamepad_update ( input_t & input,
int nr,
const gamepad_state_t & gamepad_state )

Updates virtual gamepad with the provided gamepad state.

Parameters
inputThe input context.
nrThe gamepad index to update.
gamepad_stateThe gamepad button/axis state sent from the client.

◆ get_capabilities()

platform_caps::caps_t platf::get_capabilities ( )

Get the supported platform capabilities to advertise to the client.

Returns the supported platform capabilities to advertise to the client.

Returns
Capability flags.

◆ get_mouse_loc()

util::point_t platf::get_mouse_loc ( input_t & input)

Get the current mouse position on screen.

Parameters
inputThe input_t instance to use.
Returns
Screen coordinates of the mouse.

Examples

auto [x, y] = get_mouse_loc(input);

◆ hscroll()

void platf::hscroll ( input_t & input,
int high_res_distance )

Horizontal mouse scroll.

Parameters
inputThe input_t instance to use.
high_res_distanceHow far to scroll.

Examples

hscroll(input, 1200);

◆ input()

input_t platf::input ( )

Initialize the input system and return it.

Examples

auto my_input = input();

◆ keyboard_update()

void platf::keyboard_update ( input_t & input,
uint16_t modcode,
bool release,
uint8_t flags )

Keyboard emulation.

Parameters
inputThe input_t instance to use.
modcodeThe moonlight key code.
releaseWhether the event was a press (false) or a release (true).
flagsSS_KBE_FLAG_* values.

Examples

keyboard(input, 0x5A, false, 0); // Press Z

◆ move_mouse()

void platf::move_mouse ( input_t & input,
int deltaX,
int deltaY )

Relative mouse move.

Parameters
inputThe input_t instance to use.
deltaXRelative x position.
deltaYRelative y position.

Examples

move_mouse(input, 10, 10); // Move mouse 10 pixels down and right

◆ pen_update()

void platf::pen_update ( client_input_t * input,
const touch_port_t & touch_port,
const pen_input_t & pen )

Send a pen event to the OS.

Sends a pen event to the OS.

Parameters
inputThe client-specific input context.
touch_portThe current viewport for translating to screen coordinates.
penThe pen event.

◆ scroll()

void platf::scroll ( input_t & input,
int high_res_distance )

Vertical mouse scroll.

Parameters
inputThe input_t instance to use.
high_res_distanceHow far to scroll.

Examples

scroll(input, 1200);

◆ supported_gamepads()

std::vector< supported_gamepad_t > & platf::supported_gamepads ( input_t * input)

Gets the supported gamepads for this platform backend.

This may be called prior to platf::input()!

Parameters
inputPointer to the platform's input_t or nullptr.
Returns
Vector of gamepad options and status.

◆ touch_update()

void platf::touch_update ( client_input_t * input,
const touch_port_t & touch_port,
const touch_input_t & touch )

Send a touch event to the OS.

Sends a touch event to the OS.

Parameters
inputThe client-specific input context.
touch_portThe current viewport for translating to screen coordinates.
touchThe touch event.

◆ unicode()

void platf::unicode ( input_t & input,
char * utf8,
int size )

Here we receive a single UTF-8 encoded char at a time, the trick is to convert it to UTF-32 then send CTRL+SHIFT+U+{HEXCODE} in order to produce any unicode character, see: https://en.wikipedia.org/wiki/Unicode_input

ex: