Skip to content

Commit 91371af

Browse files
committed
Add support for GetDeviceState()
#490
1 parent b5ed953 commit 91371af

File tree

3 files changed

+42
-17
lines changed

3 files changed

+42
-17
lines changed

Dllmain/BuildNo.rc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
#define BUILD_NUMBER 8150
1+
#define BUILD_NUMBER 8151

dinput8/IDirectInputDevice8.cpp

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

190208
template <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+
}

dinput8/IDirectInputDevice8.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,4 +210,5 @@ class m_IDirectInputDevice8 : public IDirectInputDevice8A, public IDirectInputDe
210210

211211
// Helper functions
212212
void SetAsMouse() { IsMouse = true; }
213+
void AdjustMouseAxis(LONG& value, bool isY);
213214
};

0 commit comments

Comments
 (0)