summaryrefslogtreecommitdiffhomepage
path: root/opentrack-dinput/dinput.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2016-08-10 12:02:00 +0200
committerStanislaw Halik <sthalik@misaki.pl>2016-08-10 12:02:00 +0200
commit6e7af85c52e994fada7f989f4af2a6e793dedac9 (patch)
treef5e70bdd6e376f282bc625274fd2cece30f62020 /opentrack-dinput/dinput.cpp
parent8ee2337bc9e9285fac8bada710a2e39629ce5050 (diff)
dinput: split from logic module
For use in the joystick module.
Diffstat (limited to 'opentrack-dinput/dinput.cpp')
-rw-r--r--opentrack-dinput/dinput.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/opentrack-dinput/dinput.cpp b/opentrack-dinput/dinput.cpp
new file mode 100644
index 00000000..ce80fe0e
--- /dev/null
+++ b/opentrack-dinput/dinput.cpp
@@ -0,0 +1,47 @@
+#ifdef _WIN32
+
+#include "dinput.hpp"
+#include <QDebug>
+
+dinput_handle dinput_handle::self;
+
+dinput_handle::dinput_handle() : handle(init_di())
+{
+}
+
+dinput_handle::~dinput_handle()
+{
+ if (handle)
+ {
+ handle->Release();
+ handle = nullptr;
+ }
+}
+
+dinput_handle::di_t dinput_handle::init_di()
+{
+ HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
+ if (FAILED(hr))
+ qDebug() << "dinput: failed CoInitializeEx" << hr << GetLastError();
+
+ static LPDIRECTINPUT8 di_ = nullptr;
+ if (di_ == nullptr)
+ {
+ if (SUCCEEDED(DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&di_, NULL)))
+ {
+ return di_;
+ }
+ else
+ {
+ return di_ = nullptr;
+ }
+ }
+ return di_;
+}
+
+dinput_handle::di_t dinput_handle::make_di()
+{
+ return self.handle;
+}
+
+#endif