dinput: Initialize user limits with the default 0..65535 range. Add tests.

This commit is contained in:
Vitaliy Margolen 2007-02-02 00:47:19 -07:00 committed by Alexandre Julliard
parent 575ede974d
commit b8b03b54b7
2 changed files with 16 additions and 4 deletions

View file

@ -387,8 +387,10 @@ static JoystickImpl *alloc_device(REFGUID rguid, const void *jvt, IDirectInputIm
memcpy(&df->rgodf[idx], &c_dfDIJoystick2.rgodf[i], df->dwObjSize);
newDevice->axes[i] = idx;
newDevice->props[idx].wantmin = newDevice->props[idx].havemin = newDevice->joydev->axes[i][AXIS_ABSMIN];
newDevice->props[idx].wantmax = newDevice->props[idx].havemax = newDevice->joydev->axes[i][AXIS_ABSMAX];
newDevice->props[idx].havemin = newDevice->joydev->axes[i][AXIS_ABSMIN];
newDevice->props[idx].havemax = newDevice->joydev->axes[i][AXIS_ABSMAX];
newDevice->props[idx].wantmin = 0;
newDevice->props[idx].wantmax = 0xffff;
newDevice->props[idx].deadzone = 0;
df->rgodf[idx++].dwType = DIDFT_MAKEINSTANCE(newDevice->numAxes++) | DIDFT_ABSAXIS;
}

View file

@ -81,6 +81,7 @@ typedef struct tagJoystickInfo
DWORD axis;
DWORD pov;
DWORD button;
LONG lMin, lMax;
} JoystickInfo;
static BOOL CALLBACK EnumAxes(
@ -102,8 +103,14 @@ static BOOL CALLBACK EnumAxes(
diprg.diph.dwHeaderSize = sizeof(DIPROPHEADER);
diprg.diph.dwHow = DIPH_BYID;
diprg.diph.dwObj = pdidoi->dwType;
diprg.lMin = -1000;
diprg.lMax = +1000;
hr = IDirectInputDevice_GetProperty(info->pJoystick, DIPROP_RANGE, &diprg.diph);
ok(SUCCEEDED(hr), "IDirectInputDevice_GetProperty() failed: %s\n", DXGetErrorString8(hr));
ok(info->lMin == diprg.lMin && info->lMax == diprg.lMax, "Min/Max range invalid: "
"expected %d..%d got %d..%d\n", info->lMin, info->lMax, diprg.lMin, diprg.lMax);
diprg.lMin = -2000;
diprg.lMax = +2000;
hr = IDirectInputDevice_SetProperty(info->pJoystick, DIPROP_RANGE, NULL);
ok(hr==E_INVALIDARG,"IDirectInputDevice_SetProperty() should have returned "
@ -239,6 +246,9 @@ static BOOL CALLBACK EnumJoysticks(
ZeroMemory(&info, sizeof(info));
info.pJoystick = pJoystick;
/* default min/max limits */
info.lMin = 0;
info.lMax = 0xffff;
/* enumerate objects */
hr = IDirectInputDevice_EnumObjects(pJoystick, EnumAxes, (VOID*)&info, DIDFT_ALL);
ok(hr==DI_OK,"IDirectInputDevice_EnumObjects() failed: %s\n",