@@ -184,7 +184,25 @@ HRESULT m_IDirectInputDevice8::GetDeviceState(DWORD cbData, LPVOID lpvData)
184184{
185185 Logging::LogDebug () << __FUNCTION__ << " (" << this << " )" ;
186186
187- return ProxyInterface->GetDeviceState (cbData, lpvData);
187+ HRESULT hr = ProxyInterface->GetDeviceState (cbData, lpvData);
188+
189+ if (SUCCEEDED (hr) && lpvData)
190+ {
191+ if (IsMouse && Config.FixHighFrequencyMouse )
192+ {
193+ // Apply movement adjustment using stored offsets
194+ if (Ofs.x >= 0 )
195+ {
196+ AdjustMouseAxis (*((LONG*)((BYTE*)lpvData + Ofs.x )), false );
197+ }
198+ if (Ofs.y >= 0 )
199+ {
200+ AdjustMouseAxis (*((LONG*)((BYTE*)lpvData + Ofs.y )), true );
201+ }
202+ }
203+ }
204+
205+ return hr;
188206}
189207
190208template <class T >
@@ -308,20 +326,7 @@ HRESULT m_IDirectInputDevice8::GetMouseDeviceData(DWORD cbObjectData, LPDIDEVICE
308326
309327 if (isSet[v])
310328 {
311- if (dod[Loc[v]].lData != 0 )
312- {
313- double factor = (item == Ofs.y ) ? Config.MouseMovementFactor : std::abs (Config.MouseMovementFactor );
314- LONG baseMovement = (LONG)round (dod[Loc[v]].lData * factor);
315-
316- if (std::abs (baseMovement) < (LONG)Config.MouseMovementPadding )
317- {
318- dod[Loc[v]].lData = (dod[Loc[v]].lData < 0 ) ? -(LONG)Config.MouseMovementPadding : (LONG)Config.MouseMovementPadding ;
319- }
320- else
321- {
322- dod[Loc[v]].lData = baseMovement;
323- }
324- }
329+ AdjustMouseAxis (dod[Loc[v]].lData , (item == Ofs.y ));
325330 }
326331 }
327332 }
@@ -423,7 +428,7 @@ HRESULT m_IDirectInputDevice8::GetDeviceData(DWORD cbObjectData, LPDIDEVICEOBJEC
423428 }
424429 }
425430
426- if (Config. FixHighFrequencyMouse && IsMouse )
431+ if (IsMouse && Config. FixHighFrequencyMouse )
427432 {
428433 if (rgdod && cbObjectData != sizeof (DIDEVICEOBJECTDATA_DX3) && cbObjectData != sizeof (DIDEVICEOBJECTDATA))
429434 {
@@ -703,3 +708,22 @@ HRESULT m_IDirectInputDevice8::GetImageInfoT(V lpdiDevImageInfoHeader)
703708
704709 return GetProxyInterface<T>()->GetImageInfo (lpdiDevImageInfoHeader);
705710}
711+
712+ // Helper functions
713+ void m_IDirectInputDevice8::AdjustMouseAxis (LONG& value, bool isY)
714+ {
715+ if (value != 0 )
716+ {
717+ double factor = isY ? Config.MouseMovementFactor : std::abs (Config.MouseMovementFactor );
718+ LONG baseMovement = (LONG)round (value * factor);
719+
720+ if (std::abs (baseMovement) < (LONG)Config.MouseMovementPadding )
721+ {
722+ value = (value < 0 ) ? -(LONG)Config.MouseMovementPadding : (LONG)Config.MouseMovementPadding ;
723+ }
724+ else
725+ {
726+ value = baseMovement;
727+ }
728+ }
729+ }
0 commit comments