diff options
-rw-r--r-- | dinput/win32-joystick.cpp | 36 |
1 files changed, 12 insertions, 24 deletions
diff --git a/dinput/win32-joystick.cpp b/dinput/win32-joystick.cpp index d4ae0e8a..e9a6c4ed 100644 --- a/dinput/win32-joystick.cpp +++ b/dinput/win32-joystick.cpp @@ -5,8 +5,6 @@ #include "compat/sleep.hpp" #include <cstddef> -#include <cassert> -#include <cstring> #include <algorithm> #include <cmath> #include <objbase.h> @@ -71,8 +69,7 @@ bool win32_joy_ctx::poll_axis(const QString &guid, int* axes) continue; } - DIJOYSTATE2 js; - std::memset(&js, 0, sizeof(js)); + DIJOYSTATE2 js = {}; if (FAILED(hr = joy_handle->GetDeviceState(sizeof(js), &js))) { @@ -154,14 +151,10 @@ void win32_joy_ctx::joy::release() bool win32_joy_ctx::joy::poll(fn f) { HRESULT hr; - bool ok = false; (void) joy_handle->Acquire(); - if (!FAILED(hr = joy_handle->Poll())) - ok = true; - - if (!ok) + if (FAILED(hr = joy_handle->Poll())) { //qDebug() << "joy acquire failed" << guid << hr; (void) joy_handle->Unacquire(); @@ -182,24 +175,26 @@ bool win32_joy_ctx::joy::poll(fn f) bool is_pov = false; int i = -1; + // redefine since MSVC headers don't define as proper constants + #define POV_HAT_OFFSET(k) \ (offsetof(DIJOYSTATE, rgdwPOV) + (k) * sizeof(DWORD)) -#define BUTTON(k) \ +#define BUTTON_OFFSET(k) \ (offsetof(DIJOYSTATE, rgbButtons) + (k) * sizeof(BYTE)) switch (event.dwOfs) { case POV_HAT_OFFSET(0): i = 0; is_pov = true; break; - case POV_HAT_OFFSET(2): i = 1; is_pov = true; break; - case POV_HAT_OFFSET(3): i = 2; is_pov = true; break; - case POV_HAT_OFFSET(4): i = 3; is_pov = true; break; + case POV_HAT_OFFSET(1): i = 1; is_pov = true; break; + case POV_HAT_OFFSET(2): i = 2; is_pov = true; break; + case POV_HAT_OFFSET(3): i = 3; is_pov = true; break; default: - if (event.dwOfs >= BUTTON(0) && event.dwOfs <= BUTTON(127)) + if (event.dwOfs >= BUTTON_OFFSET(0) && event.dwOfs <= BUTTON_OFFSET(127)) { unsigned tmp = event.dwOfs; - tmp -= BUTTON(0); - tmp /= BUTTON(1) - BUTTON(0); + tmp -= BUTTON_OFFSET(0); + tmp /= BUTTON_OFFSET(1) - BUTTON_OFFSET(0); tmp &= 127; i = tmp; } @@ -210,8 +205,6 @@ bool win32_joy_ctx::joy::poll(fn f) { //qDebug() << "DBG: pov" << i << event.dwData; - using std::round; - unsigned char pos; unsigned pos_ = event.dwData; if ((pos_ & 0xffff) == 0xffff) @@ -288,13 +281,9 @@ void win32_joy_ctx::enum_state::refresh() for (auto it = joys.begin(); it != joys.end(); ) { if (std::find_if(all.cbegin(), all.cend(), [&](const QString& guid2) { return it->second->guid == guid2; }) == all.end()) - { it = joys.erase(it); - } else - { ++it; - } } } @@ -371,8 +360,7 @@ BOOL CALLBACK win32_joy_ctx::enum_state::EnumObjectsCallback(const DIDEVICEOBJEC { if (pdidoi->dwType & DIDFT_AXIS) { - DIPROPRANGE diprg; - std::memset(&diprg, 0, sizeof(diprg)); + DIPROPRANGE diprg = {}; diprg.diph.dwSize = sizeof( DIPROPRANGE ); diprg.diph.dwHeaderSize = sizeof( DIPROPHEADER ); diprg.diph.dwHow = DIPH_BYID; |