From 86fd6fa15160601cda23a3784191855ef016f2c7 Mon Sep 17 00:00:00 2001 From: Elisha Riedlinger Date: Tue, 25 Jun 2024 23:31:14 -0700 Subject: [PATCH] Update movement data when merging records --- Dllmain/BuildNo.rc | 2 +- dinput8/IDirectInputDevice8.cpp | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Dllmain/BuildNo.rc b/Dllmain/BuildNo.rc index cd0eed52..e82d8eed 100644 --- a/Dllmain/BuildNo.rc +++ b/Dllmain/BuildNo.rc @@ -1 +1 @@ -#define BUILD_NUMBER 7065 +#define BUILD_NUMBER 7066 diff --git a/dinput8/IDirectInputDevice8.cpp b/dinput8/IDirectInputDevice8.cpp index d68c1896..eea9e5a7 100644 --- a/dinput8/IDirectInputDevice8.cpp +++ b/dinput8/IDirectInputDevice8.cpp @@ -182,11 +182,19 @@ HRESULT m_IDirectInputDevice8::GetMouseDeviceData(DWORD cbObjectData, LPDIDEVICE lpdod->dwOfs == DIMOFS_Y ? 1 : lpdod->dwOfs == DIMOFS_Z ? 2 : 0; - // Check for existing data and that direction has not changed + // Check if record should be merged, if there is an existing record and the movement direction has not changed if (isSet[v] && !((dod[Loc[v]].lData < 0 && (LONG)lpdod->dwData > 0) || (dod[Loc[v]].lData > 0 && (LONG)lpdod->dwData < 0))) { + // Updating movement data (merging records) dod[Loc[v]].lData += (LONG)lpdod->dwData; + dod[Loc[v]].dwTimeStamp = lpdod->dwTimeStamp; + dod[Loc[v]].dwSequence = lpdod->dwSequence; + if (cbObjectData == sizeof(DIDEVICEOBJECTDATA)) + { + dod[Loc[v]].uAppData = lpdod->uAppData; + } } + // Storing new movement data else { dod.push_back({ (LONG)lpdod->dwData, lpdod->dwOfs, lpdod->dwTimeStamp, lpdod->dwSequence, (cbObjectData == sizeof(DIDEVICEOBJECTDATA)) ? lpdod->uAppData : NULL });