diff options
author | 2023-02-28 04:20:52 +1100 | |
---|---|---|
committer | 2023-02-28 04:20:52 +1100 | |
commit | deceecfbfb3fc639162dd58026bb1d729c107fa6 (patch) | |
tree | 145ce74bee37e3a25e3c13bac4cb6b048ac830d1 /src/osd/modules/input/input_dinput.cpp | |
parent | b13a5d971f387b60f7b87265ca9f84312288084d (diff) |
osd/modules/input: Modernised interface for enumerating DirectInput devices.
Gets rid of some state in the winhybrid joystick module that's only used
during initialisation.
Diffstat (limited to 'src/osd/modules/input/input_dinput.cpp')
-rw-r--r-- | src/osd/modules/input/input_dinput.cpp | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/src/osd/modules/input/input_dinput.cpp b/src/osd/modules/input/input_dinput.cpp index 1ec3c85a886..9bc417caf0f 100644 --- a/src/osd/modules/input/input_dinput.cpp +++ b/src/osd/modules/input/input_dinput.cpp @@ -125,12 +125,6 @@ namespace osd { namespace { -BOOL CALLBACK device_enum_interface_callback(LPCDIDEVICEINSTANCE instance, LPVOID ref) -{ - return static_cast<device_enum_interface *>(ref)->device_enum_callback(instance); -} - - std::string guid_to_string(GUID const &guid) { // size of a GUID string with dashes plus NUL terminator @@ -307,11 +301,8 @@ void dinput_mouse_device::configure(input_device &device) // dinput_module - base DirectInput module //============================================================ -class dinput_module : public input_module_impl<dinput_device, osd_common_t>, public device_enum_interface +class dinput_module : public input_module_impl<dinput_device, osd_common_t> { -protected: - std::unique_ptr<dinput_api_helper> m_dinput_helper; - public: dinput_module(const char* type, const char* name) : input_module_impl<dinput_device, osd_common_t>(type, name), @@ -343,13 +334,18 @@ public: { input_module_impl<dinput_device, osd_common_t>::input_init(machine); - HRESULT result = m_dinput_helper->enum_attached_devices(dinput_devclass(), *this); + HRESULT const result = m_dinput_helper->enum_attached_devices( + dinput_devclass(), + [this] (LPCDIDEVICEINSTANCE instance) { return device_enum_callback(instance); }); if (result != DI_OK) fatalerror("DirectInput: Unable to enumerate devices (result=%08X)\n", uint32_t(result)); } protected: virtual int dinput_devclass() = 0; + virtual BOOL device_enum_callback(LPCDIDEVICEINSTANCE instance) = 0; + + std::unique_ptr<dinput_api_helper> m_dinput_helper; }; @@ -361,6 +357,7 @@ public: { } +protected: virtual int dinput_devclass() override { return DI8DEVCLASS_KEYBOARD; @@ -392,6 +389,7 @@ public: { } +protected: virtual int dinput_devclass() override { return DI8DEVCLASS_POINTER; @@ -438,6 +436,7 @@ public: { } +protected: virtual int dinput_devclass() override { return DI8DEVCLASS_GAMECTRL; @@ -1212,12 +1211,6 @@ int dinput_api_helper::initialize() } -HRESULT dinput_api_helper::enum_attached_devices(int devclass, device_enum_interface &enumerate_interface) const -{ - return m_dinput->EnumDevices(devclass, device_enum_interface_callback, &enumerate_interface, DIEDFL_ATTACHEDONLY); -} - - std::pair<Microsoft::WRL::ComPtr<IDirectInputDevice8>, LPCDIDATAFORMAT> dinput_api_helper::open_device( LPCDIDEVICEINSTANCE instance, LPCDIDATAFORMAT format1, |