diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2015-12-06 05:16:39 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2015-12-06 05:16:39 +0100 |
commit | acef508f0b6f16a7be987eeebbb3402455f9aef8 (patch) | |
tree | 0b80a6fd07db11677bad6f4cabfa3f5ed11bd00a /opentrack/win32-joystick.hpp | |
parent | 1aa7bceaed59770adeb389d6c4c8f5561d0e7402 (diff) |
joystick: no longer singleton, use fake window handle
We can create arbitrary amount of dinput handles, given they're passed
unique window handles.
Diffstat (limited to 'opentrack/win32-joystick.hpp')
-rw-r--r-- | opentrack/win32-joystick.hpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/opentrack/win32-joystick.hpp b/opentrack/win32-joystick.hpp index 421774a9..f7629c3d 100644 --- a/opentrack/win32-joystick.hpp +++ b/opentrack/win32-joystick.hpp @@ -18,6 +18,7 @@ #include <QDebug> #include <QMutex> #include <QMutexLocker> +#include <QMainWindow> namespace std { template<> @@ -49,21 +50,23 @@ struct OPENTRACK_EXPORT win32_joy_ctx void poll(fn f); bool poll_axis(const QString& guid, int axes[8]); - ~win32_joy_ctx(); std::vector<joy_info> get_joy_info(); - static win32_joy_ctx& make(); + win32_joy_ctx(const win32_joy_ctx&) = delete; win32_joy_ctx& operator=(const win32_joy_ctx&) = delete; + win32_joy_ctx(); + ~win32_joy_ctx(); + private: enum { joylist_refresh_ms = 100 }; QMutex mtx; Timer timer_joylist; + QMainWindow fake_main_window; + LPDIRECTINPUT8 di; static QString guid_to_string(const GUID guid); - static LPDIRECTINPUT8& dinput_handle(); - win32_joy_ctx(); void release(); void refresh(bool first); @@ -72,16 +75,13 @@ private: struct joy { - enum { first_event_delay_ms = 3000 }; - LPDIRECTINPUTDEVICE8 joy_handle; QString guid, name; bool pressed[128]; Timer first_timer; - bool first; - joy(LPDIRECTINPUTDEVICE8 handle, const QString& guid, const QString& name, bool first) - : joy_handle(handle), guid(guid), name(name), first(first) + joy(LPDIRECTINPUTDEVICE8 handle, const QString& guid, const QString& name) + : joy_handle(handle), guid(guid), name(name) { qDebug() << "got joy" << guid; for (int i = 0; i < 128; i++) @@ -101,13 +101,14 @@ private: class enum_state { std::unordered_map<QString, std::shared_ptr<joy>> joys; - bool first; + QMainWindow& fake_main_window; + LPDIRECTINPUT8 di; std::vector<QString> all; static BOOL CALLBACK EnumJoysticksCallback(const DIDEVICEINSTANCE* pdidInstance, VOID* pContext); static BOOL CALLBACK EnumObjectsCallback(const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* ctx); public: - enum_state(std::unordered_map<QString, std::shared_ptr<joy>>& joys, bool first, QMutex &mtx); + enum_state(std::unordered_map<QString, std::shared_ptr<joy>>& joys, QMutex &mtx, QMainWindow& fake_main_window, LPDIRECTINPUT8 di); }; }; |