diff options
| author | a1xd <[email protected]> | 2021-07-06 16:10:52 -0400 |
|---|---|---|
| committer | a1xd <[email protected]> | 2021-07-06 16:12:31 -0400 |
| commit | 9f1ebe0feaaaf1eef1ffa5706d270b7600edfc63 (patch) | |
| tree | c700e644fd96e93aa4b19cd72eaefe9cb21fa066 /wrapper/input.cpp | |
| parent | merge lut2 (diff) | |
| download | rawaccel-9f1ebe0feaaaf1eef1ffa5706d270b7600edfc63.tar.xz rawaccel-9f1ebe0feaaaf1eef1ffa5706d270b7600edfc63.zip | |
fix typo and wrapper/input code from lut2 merge
Diffstat (limited to 'wrapper/input.cpp')
| -rw-r--r-- | wrapper/input.cpp | 65 |
1 files changed, 35 insertions, 30 deletions
diff --git a/wrapper/input.cpp b/wrapper/input.cpp index d50f774..3ce257a 100644 --- a/wrapper/input.cpp +++ b/wrapper/input.cpp @@ -1,43 +1,52 @@ +#include "input.h" #include "interop-exception.h" -#include <utility-rawinput.hpp> -#include <algorithm> #include <msclr\marshal_cppstd.h> +#include <algorithm> using namespace System; using namespace System::Collections::Generic; -struct device_info { - std::wstring name; - std::wstring id; -}; +std::vector<HANDLE> rawinput_handles_from_id(const std::wstring& device_id) +{ + std::vector<HANDLE> handles; + + rawinput_foreach([&](const auto& dev) { + if (dev.id == device_id) handles.push_back(dev.handle); + }); -std::vector<device_info> get_unique_device_info() { - std::vector<device_info> info; + return handles; +} + +std::vector<std::wstring> rawinput_id_list() +{ + std::vector<std::wstring> ids; - rawinput_foreach_with_interface([&](const auto& dev, const WCHAR* name) { - info.push_back({ - L"", // get_property_wstr(name, &DEVPKEY_Device_FriendlyName), /* doesn't work */ - dev_id_from_interface(name) - }); + rawinput_foreach([&](const auto& dev) { + ids.push_back(dev.id); }); - std::sort(info.begin(), info.end(), - [](auto&& l, auto&& r) { return l.id < r.id; }); - auto last = std::unique(info.begin(), info.end(), - [](auto&& l, auto&& r) { return l.id == r.id; }); - info.erase(last, info.end()); - - return info; + std::sort(ids.begin(), ids.end()); + ids.erase(std::unique(ids.begin(), ids.end()), ids.end()); + return ids; } +public ref struct RawInputInteropException : InteropException { + RawInputInteropException(System::String^ what) : + InteropException(what) {} + RawInputInteropException(const char* what) : + InteropException(what) {} + RawInputInteropException(const std::exception& e) : + InteropException(e) {} +}; + public ref struct RawInputInterop { static void AddHandlesFromID(String^ deviceID, List<IntPtr>^ rawInputHandles) { try { - std::vector<HANDLE> nativeHandles = rawinput_handles_from_dev_id( + std::vector<HANDLE> nativeHandles = rawinput_handles_from_id( msclr::interop::marshal_as<std::wstring>(deviceID)); for (auto nh : nativeHandles) rawInputHandles->Add(IntPtr(nh)); @@ -48,21 +57,18 @@ public ref struct RawInputInterop } } - static List<ValueTuple<String^, String^>>^ GetDeviceIDs() + static List<String^>^ GetDeviceIDs() { try { - auto managed = gcnew List<ValueTuple<String^, String^>>(); + auto ids = gcnew List<String^>(); - for (auto&& [name, id] : get_unique_device_info()) + for (auto&& name : rawinput_id_list()) { - managed->Add( - ValueTuple<String^, String^>( - msclr::interop::marshal_as<String^>(name), - msclr::interop::marshal_as<String^>(id))); + ids->Add(msclr::interop::marshal_as<String^>(name)); } - return managed; + return ids; } catch (const std::exception& e) { @@ -71,4 +77,3 @@ public ref struct RawInputInterop } }; - |