summaryrefslogtreecommitdiff
path: root/wrapper/input.cpp
diff options
context:
space:
mode:
authora1xd <[email protected]>2021-07-06 16:10:52 -0400
committera1xd <[email protected]>2021-07-06 16:12:31 -0400
commit9f1ebe0feaaaf1eef1ffa5706d270b7600edfc63 (patch)
treec700e644fd96e93aa4b19cd72eaefe9cb21fa066 /wrapper/input.cpp
parentmerge lut2 (diff)
downloadrawaccel-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.cpp65
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
}
};
-