Commit ac3668a0 authored by Vitaliy Margolen's avatar Vitaliy Margolen Committed by Alexandre Julliard

dinput: Make default dead zone configurable.

parent 8ff85c08
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
#include "windef.h" #include "windef.h"
#include "winbase.h" #include "winbase.h"
#include "winerror.h" #include "winerror.h"
#include "winreg.h"
#include "dinput.h" #include "dinput.h"
#include "dinput_private.h" #include "dinput_private.h"
...@@ -391,21 +392,35 @@ static JoystickImpl *alloc_device(REFGUID rguid, const void *jvt, IDirectInputIm ...@@ -391,21 +392,35 @@ static JoystickImpl *alloc_device(REFGUID rguid, const void *jvt, IDirectInputIm
JoystickImpl* newDevice; JoystickImpl* newDevice;
LPDIDATAFORMAT df = NULL; LPDIDATAFORMAT df = NULL;
int i, idx = 0; int i, idx = 0;
char buffer[MAX_PATH+16];
HKEY hkey, appkey;
LONG def_deadzone = -1;
newDevice = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(JoystickImpl)); newDevice = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(JoystickImpl));
if (!newDevice) return NULL; if (!newDevice) return NULL;
newDevice->base.lpVtbl = jvt; newDevice->base.lpVtbl = jvt;
newDevice->base.ref = 1; newDevice->base.ref = 1;
memcpy(&newDevice->base.guid, rguid, sizeof(*rguid)); newDevice->base.guid = *rguid;
InitializeCriticalSection(&newDevice->base.crit);
newDevice->base.crit.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": JoystickImpl*->base.crit");
newDevice->joyfd = -1;
newDevice->base.dinput = dinput; newDevice->base.dinput = dinput;
newDevice->joyfd = -1;
newDevice->joydev = &joydevs[index]; newDevice->joydev = &joydevs[index];
#ifdef HAVE_STRUCT_FF_EFFECT_DIRECTION #ifdef HAVE_STRUCT_FF_EFFECT_DIRECTION
newDevice->ff_state = FF_STATUS_STOPPED; newDevice->ff_state = FF_STATUS_STOPPED;
#endif #endif
InitializeCriticalSection(&newDevice->base.crit);
newDevice->base.crit.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": JoystickImpl*->base.crit");
/* get options */
get_app_key(&hkey, &appkey);
if (!get_config_key(hkey, appkey, "DefaultDeadZone", buffer, MAX_PATH))
{
def_deadzone = atoi(buffer);
TRACE("setting default deadzone to: %d\n", def_deadzone);
}
if (appkey) RegCloseKey(appkey);
if (hkey) RegCloseKey(hkey);
/* Create copy of default data format */ /* Create copy of default data format */
if (!(df = HeapAlloc(GetProcessHeap(), 0, c_dfDIJoystick2.dwSize))) goto failed; if (!(df = HeapAlloc(GetProcessHeap(), 0, c_dfDIJoystick2.dwSize))) goto failed;
...@@ -427,7 +442,8 @@ static JoystickImpl *alloc_device(REFGUID rguid, const void *jvt, IDirectInputIm ...@@ -427,7 +442,8 @@ static JoystickImpl *alloc_device(REFGUID rguid, const void *jvt, IDirectInputIm
newDevice->props[idx].lMin = 0; newDevice->props[idx].lMin = 0;
newDevice->props[idx].lMax = 0xffff; newDevice->props[idx].lMax = 0xffff;
newDevice->props[idx].lSaturation = 0; newDevice->props[idx].lSaturation = 0;
newDevice->props[idx].lDeadZone = MulDiv(newDevice->joydev->axes[i].flat, 0xffff, newDevice->props[idx].lDeadZone = def_deadzone >= 0 ? def_deadzone :
MulDiv(newDevice->joydev->axes[i].flat, 0xffff,
newDevice->props[idx].lDevMax - newDevice->props[idx].lDevMin); newDevice->props[idx].lDevMax - newDevice->props[idx].lDevMin);
df->rgodf[idx++].dwType = DIDFT_MAKEINSTANCE(newDevice->numAxes++) | DIDFT_ABSAXIS; df->rgodf[idx++].dwType = DIDFT_MAKEINSTANCE(newDevice->numAxes++) | DIDFT_ABSAXIS;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment