2017-01-21 01:53:03 -08:00
|
|
|
// Copyright 2017 Citra Emulator Project
|
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#include <memory>
|
2018-09-10 18:29:59 -07:00
|
|
|
#include <thread>
|
2017-01-21 01:53:03 -08:00
|
|
|
#include "common/param_package.h"
|
2021-06-19 12:38:49 -07:00
|
|
|
#include "common/settings.h"
|
2017-01-21 01:53:03 -08:00
|
|
|
#include "input_common/main.h"
|
2017-01-21 07:33:48 -08:00
|
|
|
#ifdef HAVE_SDL2
|
|
|
|
#include "input_common/sdl/sdl.h"
|
|
|
|
#endif
|
2017-01-21 01:53:03 -08:00
|
|
|
|
|
|
|
namespace InputCommon {
|
|
|
|
|
2020-08-27 12:16:47 -07:00
|
|
|
struct InputSubsystem::Impl {
|
|
|
|
void Initialize() {
|
|
|
|
}
|
|
|
|
|
|
|
|
void Shutdown() {
|
|
|
|
}
|
|
|
|
|
|
|
|
[[nodiscard]] std::vector<Common::ParamPackage> GetInputDevices() const {
|
|
|
|
std::vector<Common::ParamPackage> devices = {
|
|
|
|
Common::ParamPackage{{"display", "Any"}, {"class", "any"}},
|
2020-09-17 09:00:29 -07:00
|
|
|
Common::ParamPackage{{"display", "Keyboard/Mouse"}, {"class", "keyboard"}},
|
2020-08-27 12:16:47 -07:00
|
|
|
};
|
2021-09-20 15:18:40 -07:00
|
|
|
return {};
|
2020-08-27 12:16:47 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
[[nodiscard]] AnalogMapping GetAnalogMappingForDevice(
|
|
|
|
const Common::ParamPackage& params) const {
|
|
|
|
if (!params.Has("class") || params.Get("class", "") == "any") {
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
|
|
|
|
[[nodiscard]] ButtonMapping GetButtonMappingForDevice(
|
|
|
|
const Common::ParamPackage& params) const {
|
|
|
|
if (!params.Has("class") || params.Get("class", "") == "any") {
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
return {};
|
|
|
|
}
|
2018-09-10 18:29:59 -07:00
|
|
|
|
2020-09-04 19:35:42 -07:00
|
|
|
[[nodiscard]] MotionMapping GetMotionMappingForDevice(
|
|
|
|
const Common::ParamPackage& params) const {
|
|
|
|
if (!params.Has("class") || params.Get("class", "") == "any") {
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
|
2020-08-27 12:16:47 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
InputSubsystem::InputSubsystem() : impl{std::make_unique<Impl>()} {}
|
|
|
|
|
|
|
|
InputSubsystem::~InputSubsystem() = default;
|
|
|
|
|
|
|
|
void InputSubsystem::Initialize() {
|
|
|
|
impl->Initialize();
|
|
|
|
}
|
|
|
|
|
|
|
|
void InputSubsystem::Shutdown() {
|
|
|
|
impl->Shutdown();
|
|
|
|
}
|
|
|
|
|
|
|
|
std::vector<Common::ParamPackage> InputSubsystem::GetInputDevices() const {
|
|
|
|
return impl->GetInputDevices();
|
|
|
|
}
|
|
|
|
|
|
|
|
AnalogMapping InputSubsystem::GetAnalogMappingForDevice(const Common::ParamPackage& device) const {
|
|
|
|
return impl->GetAnalogMappingForDevice(device);
|
|
|
|
}
|
2020-06-23 09:47:58 -07:00
|
|
|
|
2020-08-27 12:16:47 -07:00
|
|
|
ButtonMapping InputSubsystem::GetButtonMappingForDevice(const Common::ParamPackage& device) const {
|
|
|
|
return impl->GetButtonMappingForDevice(device);
|
2017-01-21 01:53:03 -08:00
|
|
|
}
|
|
|
|
|
2020-10-13 23:51:14 -07:00
|
|
|
MotionMapping InputSubsystem::GetMotionMappingForDevice(const Common::ParamPackage& device) const {
|
|
|
|
return impl->GetMotionMappingForDevice(device);
|
|
|
|
}
|
|
|
|
|
2020-08-29 11:56:51 -07:00
|
|
|
void InputSubsystem::ReloadInputDevices() {
|
2020-07-14 10:01:36 -07:00
|
|
|
}
|
|
|
|
|
2021-09-20 15:18:40 -07:00
|
|
|
std::vector<std::unique_ptr<Polling::DevicePoller>> InputSubsystem::GetPollers([
|
|
|
|
[maybe_unused]] Polling::DeviceType type) const {
|
2020-08-27 12:16:47 -07:00
|
|
|
return {};
|
2020-06-21 09:36:28 -07:00
|
|
|
}
|
|
|
|
|
2017-01-21 01:53:03 -08:00
|
|
|
std::string GenerateKeyboardParam(int key_code) {
|
2021-07-22 17:59:26 -07:00
|
|
|
Common::ParamPackage param;
|
|
|
|
param.Set("engine", "keyboard");
|
|
|
|
param.Set("code", key_code);
|
|
|
|
param.Set("toggle", false);
|
2017-01-21 01:53:03 -08:00
|
|
|
return param.Serialize();
|
|
|
|
}
|
|
|
|
|
2017-01-21 03:04:00 -08:00
|
|
|
std::string GenerateAnalogParamFromKeys(int key_up, int key_down, int key_left, int key_right,
|
|
|
|
int key_modifier, float modifier_scale) {
|
|
|
|
Common::ParamPackage circle_pad_param{
|
|
|
|
{"engine", "analog_from_button"},
|
|
|
|
{"up", GenerateKeyboardParam(key_up)},
|
|
|
|
{"down", GenerateKeyboardParam(key_down)},
|
|
|
|
{"left", GenerateKeyboardParam(key_left)},
|
|
|
|
{"right", GenerateKeyboardParam(key_right)},
|
|
|
|
{"modifier", GenerateKeyboardParam(key_modifier)},
|
|
|
|
{"modifier_scale", std::to_string(modifier_scale)},
|
|
|
|
};
|
|
|
|
return circle_pad_param.Serialize();
|
|
|
|
}
|
2017-01-21 01:53:03 -08:00
|
|
|
} // namespace InputCommon
|