summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--dinput/win32-joystick.cpp36
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;