@@ -176,9 +176,9 @@ HRESULT m_IDirectInputDevice8::GetMouseDeviceData(DWORD cbObjectData, LPDIDEVICE
176176 for (UINT x = 0 ; x < dod.size (); x++)
177177 {
178178 // Movement record exists
179- if (dod[x].wasPeeked == false && (dod[x].dwOfs == DIMOFS_X || dod[x].dwOfs == DIMOFS_Y || dod[x].dwOfs == DIMOFS_Z ))
179+ if (dod[x].wasPeeked == false && (dod[x].dwOfs == Ofs. x || dod[x].dwOfs == Ofs. y || dod[x].dwOfs == Ofs. z ))
180180 {
181- const int v = dod[x].dwOfs == DIMOFS_X ? 0 : dod[x].dwOfs == DIMOFS_Y ? 1 : 2 ;
181+ const int v = dod[x].dwOfs == Ofs. x ? 0 : dod[x].dwOfs == Ofs. y ? 1 : 2 ;
182182
183183 isSet[v] = true ;
184184 Loc[v] = x;
@@ -196,9 +196,9 @@ HRESULT m_IDirectInputDevice8::GetMouseDeviceData(DWORD cbObjectData, LPDIDEVICE
196196 for (UINT x = 0 ; x < dwItems; x++)
197197 {
198198 // Storing movement data
199- if (lpdod->dwOfs == DIMOFS_X || lpdod->dwOfs == DIMOFS_Y || lpdod->dwOfs == DIMOFS_Z )
199+ if (lpdod->dwOfs == Ofs. x || lpdod->dwOfs == Ofs. y || lpdod->dwOfs == Ofs. z )
200200 {
201- const int v = lpdod->dwOfs == DIMOFS_X ? 0 : lpdod->dwOfs == DIMOFS_Y ? 1 : 2 ;
201+ const int v = lpdod->dwOfs == Ofs. x ? 0 : lpdod->dwOfs == Ofs. y ? 1 : 2 ;
202202
203203 // Merge data only
204204 if (isSet[v])
@@ -254,9 +254,9 @@ HRESULT m_IDirectInputDevice8::GetMouseDeviceData(DWORD cbObjectData, LPDIDEVICE
254254 if (dwOut < dod.size ())
255255 {
256256 p_rgdod->dwOfs = dod[dwOut].dwOfs ;
257- if (dod[dwOut].lData != 0 && (p_rgdod->dwOfs == DIMOFS_X || p_rgdod->dwOfs == DIMOFS_Y ))
257+ if (abs ( dod[dwOut].lData ) != 0 && (p_rgdod->dwOfs == Ofs. x || p_rgdod->dwOfs == Ofs. y ))
258258 {
259- double factor = (p_rgdod->dwOfs == DIMOFS_Y ) ? Config.MouseMovementFactor : abs (Config.MouseMovementFactor );
259+ double factor = (p_rgdod->dwOfs == Ofs. y ) ? Config.MouseMovementFactor : abs (Config.MouseMovementFactor );
260260 LONG baseMovement = (LONG)round (dod[dwOut].lData * factor);
261261 if (abs (baseMovement) < (LONG)Config.MouseMovementPadding )
262262 {
@@ -345,7 +345,37 @@ HRESULT m_IDirectInputDevice8::SetDataFormat(LPCDIDATAFORMAT lpdf)
345345{
346346 Logging::LogDebug () << __FUNCTION__ << " (" << this << " )" ;
347347
348- return ProxyInterface->SetDataFormat (lpdf);
348+ HRESULT hr = ProxyInterface->SetDataFormat (lpdf);
349+
350+ if (SUCCEEDED (hr))
351+ {
352+ if (IsMouse && lpdf && lpdf->rgodf && lpdf->dwNumObjs )
353+ {
354+ for (DWORD i = 0 ; i < lpdf->dwNumObjs ; i++)
355+ {
356+ const DIOBJECTDATAFORMAT& obj = lpdf->rgodf [i];
357+
358+ // Check if this object is an axis (relative)
359+ if (DIDFT_GETTYPE (obj.dwType ) & DIDFT_RELAXIS)
360+ {
361+ if (obj.pguid && IsEqualGUID (GUID_XAxis, *obj.pguid ))
362+ {
363+ Ofs.x = obj.dwOfs ;
364+ }
365+ else if (obj.pguid && IsEqualGUID (GUID_YAxis, *obj.pguid ))
366+ {
367+ Ofs.y = obj.dwOfs ;
368+ }
369+ else if (obj.pguid && IsEqualGUID (GUID_ZAxis, *obj.pguid ))
370+ {
371+ Ofs.z = obj.dwOfs ;
372+ }
373+ }
374+ }
375+ }
376+ }
377+
378+ return hr;
349379}
350380
351381HRESULT m_IDirectInputDevice8::SetEventNotification (HANDLE hEvent)
0 commit comments