mirror of
https://github.com/LizardByte/Sunshine.git
synced 2026-08-07 10:20:46 +00:00
91 lines
3.0 KiB
C++
91 lines
3.0 KiB
C++
/**
|
|
* @file src/input.h
|
|
* @brief Declarations for gamepad, keyboard, and mouse input handling.
|
|
*/
|
|
#pragma once
|
|
|
|
// standard includes
|
|
#include <functional>
|
|
|
|
// local includes
|
|
#include "platform/common.h"
|
|
#include "thread_safe.h"
|
|
|
|
namespace input {
|
|
struct input_t;
|
|
|
|
/**
|
|
* @brief Write a debug log representation of the input packet.
|
|
*
|
|
* @param input Raw input packet to format for logging.
|
|
*/
|
|
void print(void *input);
|
|
/**
|
|
* @brief Reset stream input state after a client disconnect or shutdown.
|
|
*
|
|
* @param input Shared stream input state to reset.
|
|
*/
|
|
void reset(std::shared_ptr<input_t> &input);
|
|
|
|
/**
|
|
* @brief Queue a raw input message for platform passthrough.
|
|
*/
|
|
void passthrough(std::shared_ptr<input_t> &input, std::vector<std::uint8_t> &&input_data);
|
|
|
|
/**
|
|
* @brief Initialize global input resources and platform backends.
|
|
*
|
|
* @return Cleanup handle for initialized input resources, or null if none are required.
|
|
*/
|
|
[[nodiscard]] std::unique_ptr<platf::deinit_t> init();
|
|
|
|
/**
|
|
* @brief Probe whether the platform can create virtual gamepads.
|
|
*
|
|
* @return True when at least one configured gamepad backend is available.
|
|
*/
|
|
bool probe_gamepads();
|
|
|
|
/**
|
|
* @brief Allocate and initialize platform input state for a stream.
|
|
*
|
|
* @param mail Mailbox used to exchange messages with worker threads.
|
|
* @return Shared input state bound to the stream mailbox.
|
|
*/
|
|
std::shared_ptr<input_t> alloc(safe::mail_t mail);
|
|
|
|
/**
|
|
* @brief Touchscreen coordinate bounds used to scale absolute input.
|
|
*/
|
|
struct touch_port_t: public platf::touch_port_t {
|
|
int env_width; ///< Width of the full capture environment in physical pixels.
|
|
int env_height; ///< Height of the full capture environment in physical pixels.
|
|
|
|
// Offset x and y coordinates of the client
|
|
float client_offsetX; ///< Horizontal client viewport offset used when scaling touch input.
|
|
float client_offsetY; ///< Vertical client viewport offset used when scaling touch input.
|
|
|
|
float scalar_inv; ///< Inverse scale factor from client coordinates to display coordinates.
|
|
float scalar_tpcoords; ///< Scale factor from client coordinates to touch-port coordinates.
|
|
|
|
int env_logical_width; ///< Width of the full capture environment after display scaling.
|
|
int env_logical_height; ///< Height of the full capture environment after display scaling.
|
|
|
|
/**
|
|
* @brief Check whether the touch-port bounds are initialized.
|
|
*/
|
|
explicit operator bool() const {
|
|
return width != 0 && height != 0 && env_width != 0 && env_height != 0;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* @brief Scale the ellipse axes according to the provided size.
|
|
* @param val The major and minor axis pair.
|
|
* @param rotation The rotation value from the touch/pen event.
|
|
* @param scalar The scalar cartesian coordinate pair.
|
|
* @return The major and minor axis pair.
|
|
*/
|
|
std::pair<float, float> scale_client_contact_area(const std::pair<float, float> &val, uint16_t rotation, const std::pair<float, float> &scalar);
|
|
} // namespace input
|