diff options
| author | 2021-09-20 17:18:40 -0500 | |
|---|---|---|
| committer | 2021-11-24 20:30:22 -0600 | |
| commit | 5a785ed794fff8c944283271bf25cb835c11700a (patch) | |
| tree | dc99f3fb595a57e9629661d3002dad724914275b /src/input_common/main.cpp | |
| parent | input_common: Move touch and analog from button. Move udp protocol (diff) | |
| download | yuzu-5a785ed794fff8c944283271bf25cb835c11700a.tar.gz yuzu-5a785ed794fff8c944283271bf25cb835c11700a.tar.xz yuzu-5a785ed794fff8c944283271bf25cb835c11700a.zip | |
input_common: Rewrite keyboard
Diffstat (limited to 'src/input_common/main.cpp')
| -rw-r--r-- | src/input_common/main.cpp | 263 |
1 files changed, 3 insertions, 260 deletions
diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp index 7a5c29b40..da501b6cc 100644 --- a/src/input_common/main.cpp +++ b/src/input_common/main.cpp | |||
| @@ -6,17 +6,7 @@ | |||
| 6 | #include <thread> | 6 | #include <thread> |
| 7 | #include "common/param_package.h" | 7 | #include "common/param_package.h" |
| 8 | #include "common/settings.h" | 8 | #include "common/settings.h" |
| 9 | #include "input_common/gcadapter/gc_adapter.h" | ||
| 10 | #include "input_common/gcadapter/gc_poller.h" | ||
| 11 | #include "input_common/keyboard.h" | ||
| 12 | #include "input_common/main.h" | 9 | #include "input_common/main.h" |
| 13 | #include "input_common/motion_from_button.h" | ||
| 14 | #include "input_common/mouse/mouse_input.h" | ||
| 15 | #include "input_common/mouse/mouse_poller.h" | ||
| 16 | #include "input_common/tas/tas_input.h" | ||
| 17 | #include "input_common/tas/tas_poller.h" | ||
| 18 | #include "input_common/udp/client.h" | ||
| 19 | #include "input_common/udp/udp.h" | ||
| 20 | #ifdef HAVE_SDL2 | 10 | #ifdef HAVE_SDL2 |
| 21 | #include "input_common/sdl/sdl.h" | 11 | #include "input_common/sdl/sdl.h" |
| 22 | #endif | 12 | #endif |
| @@ -25,82 +15,9 @@ namespace InputCommon { | |||
| 25 | 15 | ||
| 26 | struct InputSubsystem::Impl { | 16 | struct InputSubsystem::Impl { |
| 27 | void Initialize() { | 17 | void Initialize() { |
| 28 | gcadapter = std::make_shared<GCAdapter::Adapter>(); | ||
| 29 | gcbuttons = std::make_shared<GCButtonFactory>(gcadapter); | ||
| 30 | Input::RegisterFactory<Input::ButtonDevice>("gcpad", gcbuttons); | ||
| 31 | gcanalog = std::make_shared<GCAnalogFactory>(gcadapter); | ||
| 32 | Input::RegisterFactory<Input::AnalogDevice>("gcpad", gcanalog); | ||
| 33 | gcvibration = std::make_shared<GCVibrationFactory>(gcadapter); | ||
| 34 | Input::RegisterFactory<Input::VibrationDevice>("gcpad", gcvibration); | ||
| 35 | |||
| 36 | keyboard = std::make_shared<Keyboard>(); | ||
| 37 | Input::RegisterFactory<Input::ButtonDevice>("keyboard", keyboard); | ||
| 38 | Input::RegisterFactory<Input::MotionDevice>("keyboard", | ||
| 39 | std::make_shared<MotionFromButton>()); | ||
| 40 | |||
| 41 | #ifdef HAVE_SDL2 | ||
| 42 | sdl = SDL::Init(); | ||
| 43 | #endif | ||
| 44 | |||
| 45 | udp = std::make_shared<InputCommon::CemuhookUDP::Client>(); | ||
| 46 | udpmotion = std::make_shared<UDPMotionFactory>(udp); | ||
| 47 | Input::RegisterFactory<Input::MotionDevice>("cemuhookudp", udpmotion); | ||
| 48 | udptouch = std::make_shared<UDPTouchFactory>(udp); | ||
| 49 | Input::RegisterFactory<Input::TouchDevice>("cemuhookudp", udptouch); | ||
| 50 | |||
| 51 | mouse = std::make_shared<MouseInput::Mouse>(); | ||
| 52 | mousebuttons = std::make_shared<MouseButtonFactory>(mouse); | ||
| 53 | Input::RegisterFactory<Input::ButtonDevice>("mouse", mousebuttons); | ||
| 54 | mouseanalog = std::make_shared<MouseAnalogFactory>(mouse); | ||
| 55 | Input::RegisterFactory<Input::AnalogDevice>("mouse", mouseanalog); | ||
| 56 | mousemotion = std::make_shared<MouseMotionFactory>(mouse); | ||
| 57 | Input::RegisterFactory<Input::MotionDevice>("mouse", mousemotion); | ||
| 58 | mousetouch = std::make_shared<MouseTouchFactory>(mouse); | ||
| 59 | Input::RegisterFactory<Input::TouchDevice>("mouse", mousetouch); | ||
| 60 | |||
| 61 | tas = std::make_shared<TasInput::Tas>(); | ||
| 62 | tasbuttons = std::make_shared<TasButtonFactory>(tas); | ||
| 63 | Input::RegisterFactory<Input::ButtonDevice>("tas", tasbuttons); | ||
| 64 | tasanalog = std::make_shared<TasAnalogFactory>(tas); | ||
| 65 | Input::RegisterFactory<Input::AnalogDevice>("tas", tasanalog); | ||
| 66 | } | 18 | } |
| 67 | 19 | ||
| 68 | void Shutdown() { | 20 | void Shutdown() { |
| 69 | Input::UnregisterFactory<Input::ButtonDevice>("keyboard"); | ||
| 70 | Input::UnregisterFactory<Input::MotionDevice>("keyboard"); | ||
| 71 | keyboard.reset(); | ||
| 72 | #ifdef HAVE_SDL2 | ||
| 73 | sdl.reset(); | ||
| 74 | #endif | ||
| 75 | Input::UnregisterFactory<Input::ButtonDevice>("gcpad"); | ||
| 76 | Input::UnregisterFactory<Input::AnalogDevice>("gcpad"); | ||
| 77 | Input::UnregisterFactory<Input::VibrationDevice>("gcpad"); | ||
| 78 | |||
| 79 | gcbuttons.reset(); | ||
| 80 | gcanalog.reset(); | ||
| 81 | gcvibration.reset(); | ||
| 82 | |||
| 83 | Input::UnregisterFactory<Input::MotionDevice>("cemuhookudp"); | ||
| 84 | Input::UnregisterFactory<Input::TouchDevice>("cemuhookudp"); | ||
| 85 | |||
| 86 | udpmotion.reset(); | ||
| 87 | udptouch.reset(); | ||
| 88 | |||
| 89 | Input::UnregisterFactory<Input::ButtonDevice>("mouse"); | ||
| 90 | Input::UnregisterFactory<Input::AnalogDevice>("mouse"); | ||
| 91 | Input::UnregisterFactory<Input::MotionDevice>("mouse"); | ||
| 92 | Input::UnregisterFactory<Input::TouchDevice>("mouse"); | ||
| 93 | |||
| 94 | mousebuttons.reset(); | ||
| 95 | mouseanalog.reset(); | ||
| 96 | mousemotion.reset(); | ||
| 97 | mousetouch.reset(); | ||
| 98 | |||
| 99 | Input::UnregisterFactory<Input::ButtonDevice>("tas"); | ||
| 100 | Input::UnregisterFactory<Input::AnalogDevice>("tas"); | ||
| 101 | |||
| 102 | tasbuttons.reset(); | ||
| 103 | tasanalog.reset(); | ||
| 104 | } | 21 | } |
| 105 | 22 | ||
| 106 | [[nodiscard]] std::vector<Common::ParamPackage> GetInputDevices() const { | 23 | [[nodiscard]] std::vector<Common::ParamPackage> GetInputDevices() const { |
| @@ -108,19 +25,7 @@ struct InputSubsystem::Impl { | |||
| 108 | Common::ParamPackage{{"display", "Any"}, {"class", "any"}}, | 25 | Common::ParamPackage{{"display", "Any"}, {"class", "any"}}, |
| 109 | Common::ParamPackage{{"display", "Keyboard/Mouse"}, {"class", "keyboard"}}, | 26 | Common::ParamPackage{{"display", "Keyboard/Mouse"}, {"class", "keyboard"}}, |
| 110 | }; | 27 | }; |
| 111 | if (Settings::values.tas_enable) { | 28 | return {}; |
| 112 | devices.emplace_back( | ||
| 113 | Common::ParamPackage{{"display", "TAS Controller"}, {"class", "tas"}}); | ||
| 114 | } | ||
| 115 | #ifdef HAVE_SDL2 | ||
| 116 | auto sdl_devices = sdl->GetInputDevices(); | ||
| 117 | devices.insert(devices.end(), sdl_devices.begin(), sdl_devices.end()); | ||
| 118 | #endif | ||
| 119 | auto udp_devices = udp->GetInputDevices(); | ||
| 120 | devices.insert(devices.end(), udp_devices.begin(), udp_devices.end()); | ||
| 121 | auto gcpad_devices = gcadapter->GetInputDevices(); | ||
| 122 | devices.insert(devices.end(), gcpad_devices.begin(), gcpad_devices.end()); | ||
| 123 | return devices; | ||
| 124 | } | 29 | } |
| 125 | 30 | ||
| 126 | [[nodiscard]] AnalogMapping GetAnalogMappingForDevice( | 31 | [[nodiscard]] AnalogMapping GetAnalogMappingForDevice( |
| @@ -128,17 +33,6 @@ struct InputSubsystem::Impl { | |||
| 128 | if (!params.Has("class") || params.Get("class", "") == "any") { | 33 | if (!params.Has("class") || params.Get("class", "") == "any") { |
| 129 | return {}; | 34 | return {}; |
| 130 | } | 35 | } |
| 131 | if (params.Get("class", "") == "gcpad") { | ||
| 132 | return gcadapter->GetAnalogMappingForDevice(params); | ||
| 133 | } | ||
| 134 | if (params.Get("class", "") == "tas") { | ||
| 135 | return tas->GetAnalogMappingForDevice(params); | ||
| 136 | } | ||
| 137 | #ifdef HAVE_SDL2 | ||
| 138 | if (params.Get("class", "") == "sdl") { | ||
| 139 | return sdl->GetAnalogMappingForDevice(params); | ||
| 140 | } | ||
| 141 | #endif | ||
| 142 | return {}; | 36 | return {}; |
| 143 | } | 37 | } |
| 144 | 38 | ||
| @@ -147,17 +41,6 @@ struct InputSubsystem::Impl { | |||
| 147 | if (!params.Has("class") || params.Get("class", "") == "any") { | 41 | if (!params.Has("class") || params.Get("class", "") == "any") { |
| 148 | return {}; | 42 | return {}; |
| 149 | } | 43 | } |
| 150 | if (params.Get("class", "") == "gcpad") { | ||
| 151 | return gcadapter->GetButtonMappingForDevice(params); | ||
| 152 | } | ||
| 153 | if (params.Get("class", "") == "tas") { | ||
| 154 | return tas->GetButtonMappingForDevice(params); | ||
| 155 | } | ||
| 156 | #ifdef HAVE_SDL2 | ||
| 157 | if (params.Get("class", "") == "sdl") { | ||
| 158 | return sdl->GetButtonMappingForDevice(params); | ||
| 159 | } | ||
| 160 | #endif | ||
| 161 | return {}; | 44 | return {}; |
| 162 | } | 45 | } |
| 163 | 46 | ||
| @@ -166,37 +49,9 @@ struct InputSubsystem::Impl { | |||
| 166 | if (!params.Has("class") || params.Get("class", "") == "any") { | 49 | if (!params.Has("class") || params.Get("class", "") == "any") { |
| 167 | return {}; | 50 | return {}; |
| 168 | } | 51 | } |
| 169 | if (params.Get("class", "") == "cemuhookudp") { | ||
| 170 | // TODO return the correct motion device | ||
| 171 | return {}; | ||
| 172 | } | ||
| 173 | #ifdef HAVE_SDL2 | ||
| 174 | if (params.Get("class", "") == "sdl") { | ||
| 175 | return sdl->GetMotionMappingForDevice(params); | ||
| 176 | } | ||
| 177 | #endif | ||
| 178 | return {}; | 52 | return {}; |
| 179 | } | 53 | } |
| 180 | 54 | ||
| 181 | std::shared_ptr<Keyboard> keyboard; | ||
| 182 | #ifdef HAVE_SDL2 | ||
| 183 | std::unique_ptr<SDL::State> sdl; | ||
| 184 | #endif | ||
| 185 | std::shared_ptr<GCButtonFactory> gcbuttons; | ||
| 186 | std::shared_ptr<GCAnalogFactory> gcanalog; | ||
| 187 | std::shared_ptr<GCVibrationFactory> gcvibration; | ||
| 188 | std::shared_ptr<UDPMotionFactory> udpmotion; | ||
| 189 | std::shared_ptr<UDPTouchFactory> udptouch; | ||
| 190 | std::shared_ptr<MouseButtonFactory> mousebuttons; | ||
| 191 | std::shared_ptr<MouseAnalogFactory> mouseanalog; | ||
| 192 | std::shared_ptr<MouseMotionFactory> mousemotion; | ||
| 193 | std::shared_ptr<MouseTouchFactory> mousetouch; | ||
| 194 | std::shared_ptr<TasButtonFactory> tasbuttons; | ||
| 195 | std::shared_ptr<TasAnalogFactory> tasanalog; | ||
| 196 | std::shared_ptr<CemuhookUDP::Client> udp; | ||
| 197 | std::shared_ptr<GCAdapter::Adapter> gcadapter; | ||
| 198 | std::shared_ptr<MouseInput::Mouse> mouse; | ||
| 199 | std::shared_ptr<TasInput::Tas> tas; | ||
| 200 | }; | 55 | }; |
| 201 | 56 | ||
| 202 | InputSubsystem::InputSubsystem() : impl{std::make_unique<Impl>()} {} | 57 | InputSubsystem::InputSubsystem() : impl{std::make_unique<Impl>()} {} |
| @@ -211,30 +66,6 @@ void InputSubsystem::Shutdown() { | |||
| 211 | impl->Shutdown(); | 66 | impl->Shutdown(); |
| 212 | } | 67 | } |
| 213 | 68 | ||
| 214 | Keyboard* InputSubsystem::GetKeyboard() { | ||
| 215 | return impl->keyboard.get(); | ||
| 216 | } | ||
| 217 | |||
| 218 | const Keyboard* InputSubsystem::GetKeyboard() const { | ||
| 219 | return impl->keyboard.get(); | ||
| 220 | } | ||
| 221 | |||
| 222 | MouseInput::Mouse* InputSubsystem::GetMouse() { | ||
| 223 | return impl->mouse.get(); | ||
| 224 | } | ||
| 225 | |||
| 226 | const MouseInput::Mouse* InputSubsystem::GetMouse() const { | ||
| 227 | return impl->mouse.get(); | ||
| 228 | } | ||
| 229 | |||
| 230 | TasInput::Tas* InputSubsystem::GetTas() { | ||
| 231 | return impl->tas.get(); | ||
| 232 | } | ||
| 233 | |||
| 234 | const TasInput::Tas* InputSubsystem::GetTas() const { | ||
| 235 | return impl->tas.get(); | ||
| 236 | } | ||
| 237 | |||
| 238 | std::vector<Common::ParamPackage> InputSubsystem::GetInputDevices() const { | 69 | std::vector<Common::ParamPackage> InputSubsystem::GetInputDevices() const { |
| 239 | return impl->GetInputDevices(); | 70 | return impl->GetInputDevices(); |
| 240 | } | 71 | } |
| @@ -251,100 +82,12 @@ MotionMapping InputSubsystem::GetMotionMappingForDevice(const Common::ParamPacka | |||
| 251 | return impl->GetMotionMappingForDevice(device); | 82 | return impl->GetMotionMappingForDevice(device); |
| 252 | } | 83 | } |
| 253 | 84 | ||
| 254 | GCAnalogFactory* InputSubsystem::GetGCAnalogs() { | ||
| 255 | return impl->gcanalog.get(); | ||
| 256 | } | ||
| 257 | |||
| 258 | const GCAnalogFactory* InputSubsystem::GetGCAnalogs() const { | ||
| 259 | return impl->gcanalog.get(); | ||
| 260 | } | ||
| 261 | |||
| 262 | GCButtonFactory* InputSubsystem::GetGCButtons() { | ||
| 263 | return impl->gcbuttons.get(); | ||
| 264 | } | ||
| 265 | |||
| 266 | const GCButtonFactory* InputSubsystem::GetGCButtons() const { | ||
| 267 | return impl->gcbuttons.get(); | ||
| 268 | } | ||
| 269 | |||
| 270 | UDPMotionFactory* InputSubsystem::GetUDPMotions() { | ||
| 271 | return impl->udpmotion.get(); | ||
| 272 | } | ||
| 273 | |||
| 274 | const UDPMotionFactory* InputSubsystem::GetUDPMotions() const { | ||
| 275 | return impl->udpmotion.get(); | ||
| 276 | } | ||
| 277 | |||
| 278 | UDPTouchFactory* InputSubsystem::GetUDPTouch() { | ||
| 279 | return impl->udptouch.get(); | ||
| 280 | } | ||
| 281 | |||
| 282 | const UDPTouchFactory* InputSubsystem::GetUDPTouch() const { | ||
| 283 | return impl->udptouch.get(); | ||
| 284 | } | ||
| 285 | |||
| 286 | MouseButtonFactory* InputSubsystem::GetMouseButtons() { | ||
| 287 | return impl->mousebuttons.get(); | ||
| 288 | } | ||
| 289 | |||
| 290 | const MouseButtonFactory* InputSubsystem::GetMouseButtons() const { | ||
| 291 | return impl->mousebuttons.get(); | ||
| 292 | } | ||
| 293 | |||
| 294 | MouseAnalogFactory* InputSubsystem::GetMouseAnalogs() { | ||
| 295 | return impl->mouseanalog.get(); | ||
| 296 | } | ||
| 297 | |||
| 298 | const MouseAnalogFactory* InputSubsystem::GetMouseAnalogs() const { | ||
| 299 | return impl->mouseanalog.get(); | ||
| 300 | } | ||
| 301 | |||
| 302 | MouseMotionFactory* InputSubsystem::GetMouseMotions() { | ||
| 303 | return impl->mousemotion.get(); | ||
| 304 | } | ||
| 305 | |||
| 306 | const MouseMotionFactory* InputSubsystem::GetMouseMotions() const { | ||
| 307 | return impl->mousemotion.get(); | ||
| 308 | } | ||
| 309 | |||
| 310 | MouseTouchFactory* InputSubsystem::GetMouseTouch() { | ||
| 311 | return impl->mousetouch.get(); | ||
| 312 | } | ||
| 313 | |||
| 314 | const MouseTouchFactory* InputSubsystem::GetMouseTouch() const { | ||
| 315 | return impl->mousetouch.get(); | ||
| 316 | } | ||
| 317 | |||
| 318 | TasButtonFactory* InputSubsystem::GetTasButtons() { | ||
| 319 | return impl->tasbuttons.get(); | ||
| 320 | } | ||
| 321 | |||
| 322 | const TasButtonFactory* InputSubsystem::GetTasButtons() const { | ||
| 323 | return impl->tasbuttons.get(); | ||
| 324 | } | ||
| 325 | |||
| 326 | TasAnalogFactory* InputSubsystem::GetTasAnalogs() { | ||
| 327 | return impl->tasanalog.get(); | ||
| 328 | } | ||
| 329 | |||
| 330 | const TasAnalogFactory* InputSubsystem::GetTasAnalogs() const { | ||
| 331 | return impl->tasanalog.get(); | ||
| 332 | } | ||
| 333 | |||
| 334 | void InputSubsystem::ReloadInputDevices() { | 85 | void InputSubsystem::ReloadInputDevices() { |
| 335 | if (!impl->udp) { | ||
| 336 | return; | ||
| 337 | } | ||
| 338 | impl->udp->ReloadSockets(); | ||
| 339 | } | 86 | } |
| 340 | 87 | ||
| 341 | std::vector<std::unique_ptr<Polling::DevicePoller>> InputSubsystem::GetPollers( | 88 | std::vector<std::unique_ptr<Polling::DevicePoller>> InputSubsystem::GetPollers([ |
| 342 | [[maybe_unused]] Polling::DeviceType type) const { | 89 | [maybe_unused]] Polling::DeviceType type) const { |
| 343 | #ifdef HAVE_SDL2 | ||
| 344 | return impl->sdl->GetPollers(type); | ||
| 345 | #else | ||
| 346 | return {}; | 90 | return {}; |
| 347 | #endif | ||
| 348 | } | 91 | } |
| 349 | 92 | ||
| 350 | std::string GenerateKeyboardParam(int key_code) { | 93 | std::string GenerateKeyboardParam(int key_code) { |