diff options
| author | Jordan Woyak <jordan.woyak@gmail.com> | 2024-03-11 01:42:32 -0500 |
|---|---|---|
| committer | Jordan Woyak <jordan.woyak@gmail.com> | 2024-03-11 03:05:52 -0500 |
| commit | 8098be3dfa07aa529f61ea2ec4ff4077ef01b2d8 (patch) | |
| tree | b3c5cc9566ac69523c1ef25fe407ce880d4dd1ff /Source/Core | |
| parent | 498584ac777ac4fc452a83a4380889ef2c99d216 (diff) | |
InputCommon: Add XInput2 InputBackend class.
Diffstat (limited to 'Source/Core')
3 files changed, 23 insertions, 11 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp index ba3740214a..fa44e8bf79 100644 --- a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp +++ b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp @@ -62,7 +62,7 @@ void ControllerInterface::Initialize(const WindowSystemInfo& wsi) ciface::Win32::Init(wsi.render_window); #endif #ifdef CIFACE_USE_XLIB -// nothing needed + m_input_backends.emplace_back(ciface::XInput2::CreateInputBackend(this)); #endif #ifdef CIFACE_USE_OSX m_input_backends.emplace_back(ciface::Quartz::CreateInputBackend(this)); @@ -162,10 +162,6 @@ void ControllerInterface::RefreshDevices(RefreshReason reason) #ifdef CIFACE_USE_WIN32 ciface::Win32::PopulateDevices(m_wsi.render_window); #endif -#ifdef CIFACE_USE_XLIB - if (m_wsi.type == WindowSystemType::X11) - ciface::XInput2::PopulateDevices(m_wsi.render_window); -#endif #ifdef CIFACE_USE_ANDROID ciface::Android::PopulateDevices(); #endif @@ -214,9 +210,6 @@ void ControllerInterface::Shutdown() #ifdef CIFACE_USE_WIN32 ciface::Win32::DeInit(); #endif -#ifdef CIFACE_USE_XLIB -// nothing needed -#endif #ifdef CIFACE_USE_ANDROID ciface::Android::Shutdown(); #endif diff --git a/Source/Core/InputCommon/ControllerInterface/Xlib/XInput2.cpp b/Source/Core/InputCommon/ControllerInterface/Xlib/XInput2.cpp index f041dd16a1..5de0840354 100644 --- a/Source/Core/InputCommon/ControllerInterface/Xlib/XInput2.cpp +++ b/Source/Core/InputCommon/ControllerInterface/Xlib/XInput2.cpp @@ -66,9 +66,27 @@ constexpr int XINPUT_MAJOR = 2, XINPUT_MINOR = 1; namespace ciface::XInput2 { +class InputBackend final : public ciface::InputBackend +{ +public: + using ciface::InputBackend::InputBackend; + void PopulateDevices() override; +}; + +std::unique_ptr<ciface::InputBackend> CreateInputBackend(ControllerInterface* controller_interface) +{ + return std::make_unique<InputBackend>(controller_interface); +} + // This function will add zero or more KeyboardMouse objects to devices. -void PopulateDevices(void* const hwnd) +void InputBackend::PopulateDevices() { + const WindowSystemInfo wsi = GetControllerInterface().GetWindowSystemInfo(); + if (wsi.type != WindowSystemType::X11) + return; + + const auto hwnd = wsi.render_window; + Display* dpy = XOpenDisplay(nullptr); // xi_opcode is important; it will be used to identify XInput events by @@ -119,7 +137,7 @@ void PopulateDevices(void* const hwnd) } // Since current_master is a master pointer, its attachment must // be a master keyboard. - g_controller_interface.AddDevice( + GetControllerInterface().AddDevice( std::make_shared<KeyboardMouse>((Window)hwnd, xi_opcode, current_master->deviceid, current_master->attachment, scroll_increment)); } diff --git a/Source/Core/InputCommon/ControllerInterface/Xlib/XInput2.h b/Source/Core/InputCommon/ControllerInterface/Xlib/XInput2.h index a8960c1d23..427c81b18a 100644 --- a/Source/Core/InputCommon/ControllerInterface/Xlib/XInput2.h +++ b/Source/Core/InputCommon/ControllerInterface/Xlib/XInput2.h @@ -16,10 +16,11 @@ extern "C" { #include "Common/CommonTypes.h" #include "Common/Matrix.h" #include "InputCommon/ControllerInterface/ControllerInterface.h" +#include "InputCommon/ControllerInterface/InputBackend.h" namespace ciface::XInput2 { -void PopulateDevices(void* const hwnd); +std::unique_ptr<ciface::InputBackend> CreateInputBackend(ControllerInterface* controller_interface); class KeyboardMouse : public Core::Device { |
