summaryrefslogtreecommitdiffstats
path: root/src/input_common/main.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/input_common/main.h89
1 files changed, 51 insertions, 38 deletions
diff --git a/src/input_common/main.h b/src/input_common/main.h
index b504ebe54..a4a24d076 100644
--- a/src/input_common/main.h
+++ b/src/input_common/main.h
@@ -25,47 +25,26 @@ namespace Settings::NativeMotion {
enum Values : int;
}
-namespace MouseInput {
+namespace InputCommon {
+class Keyboard;
class Mouse;
-}
+class TouchScreen;
+struct MappingData;
+} // namespace InputCommon
-namespace TasInput {
+namespace InputCommon::TasInput {
class Tas;
-}
+} // namespace InputCommon::TasInput
namespace InputCommon {
namespace Polling {
-
-enum class DeviceType { Button, AnalogPreferred, Motion };
-
/// Type of input desired for mapping purposes
enum class InputType { None, Button, Stick, Motion, Touch };
-
-/**
- * A class that can be used to get inputs from an input device like controllers without having to
- * poll the device's status yourself
- */
-class DevicePoller {
-public:
- virtual ~DevicePoller() = default;
- /// Setup and start polling for inputs, should be called before GetNextInput
- /// If a device_id is provided, events should be filtered to only include events from this
- /// device id
- virtual void Start(const std::string& device_id = "") = 0;
- /// Stop polling
- virtual void Stop() = 0;
- /**
- * Every call to this function returns the next input recorded since calling Start
- * @return A ParamPackage of the recorded input, which can be used to create an InputDevice.
- * If there has been no input, the package is empty
- */
- virtual Common::ParamPackage GetNextInput() = 0;
-};
} // namespace Polling
/**
* Given a ParamPackage for a Device returned from `GetInputDevices`, attempt to get the default
- * mapping for the device. This is currently only implemented for the SDL backend devices.
+ * mapping for the device.
*/
using AnalogMapping = std::unordered_map<Settings::NativeAnalog::Values, Common::ParamPackage>;
using ButtonMapping = std::unordered_map<Settings::NativeButton::Values, Common::ParamPackage>;
@@ -88,10 +67,34 @@ public:
/// Unregisters all built-in input device factories and shuts them down.
void Shutdown();
+ /// Retrieves the underlying keyboard device.
+ [[nodiscard]] Keyboard* GetKeyboard();
+
+ /// Retrieves the underlying keyboard device.
+ [[nodiscard]] const Keyboard* GetKeyboard() const;
+
+ /// Retrieves the underlying mouse device.
+ [[nodiscard]] Mouse* GetMouse();
+
+ /// Retrieves the underlying mouse device.
+ [[nodiscard]] const Mouse* GetMouse() const;
+
+ /// Retrieves the underlying touch screen device.
+ [[nodiscard]] TouchScreen* GetTouchScreen();
+
+ /// Retrieves the underlying touch screen device.
+ [[nodiscard]] const TouchScreen* GetTouchScreen() const;
+
+ /// Retrieves the underlying tas input device.
+ [[nodiscard]] TasInput::Tas* GetTas();
+
+ /// Retrieves the underlying tas input device.
+ [[nodiscard]] const TasInput::Tas* GetTas() const;
+
/**
* Returns all available input devices that this Factory can create a new device with.
- * Each returned ParamPackage should have a `display` field used for display, a class field for
- * backends to determine if this backend is meant to service the request and any other
+ * Each returned ParamPackage should have a `display` field used for display, a `engine` field
+ * for backends to determine if this backend is meant to service the request and any other
* information needed to identify this in the backend later.
*/
[[nodiscard]] std::vector<Common::ParamPackage> GetInputDevices() const;
@@ -105,23 +108,33 @@ public:
/// Retrieves the motion mappings for the given device.
[[nodiscard]] MotionMapping GetMotionMappingForDevice(const Common::ParamPackage& device) const;
- /// Reloads the input devices
+ /// Returns a string contaning the name of the button from the input engine.
+ [[nodiscard]] std::string GetButtonName(const Common::ParamPackage& params) const;
+
+ /// Returns true if device is a controller.
+ [[nodiscard]] bool IsController(const Common::ParamPackage& params) const;
+
+ /// Reloads the input devices.
void ReloadInputDevices();
- /// Get all DevicePoller from all backends for a specific device type
- [[nodiscard]] std::vector<std::unique_ptr<Polling::DevicePoller>> GetPollers(
- Polling::DeviceType type) const;
+ /// Start polling from all backends for a desired input type.
+ void BeginMapping(Polling::InputType type);
+
+ /// Returns an input event with mapping information.
+ [[nodiscard]] const Common::ParamPackage GetNextInput() const;
+
+ /// Stop polling from all backends.
+ void StopMapping() const;
private:
struct Impl;
std::unique_ptr<Impl> impl;
};
-/// Generates a serialized param package for creating a keyboard button device
+/// Generates a serialized param package for creating a keyboard button device.
std::string GenerateKeyboardParam(int key_code);
-/// Generates a serialized param package for creating an analog device taking input from keyboard
+/// Generates a serialized param package for creating an analog device taking input from keyboard.
std::string GenerateAnalogParamFromKeys(int key_up, int key_down, int key_left, int key_right,
int key_modifier, float modifier_scale);
-
} // namespace InputCommon