/****************************************************************************** * GetProperty : Retrieves information about the input device. */ static HRESULT WINAPI SysKeyboardWImpl_GetProperty(LPDIRECTINPUTDEVICE8W iface, REFGUID rguid, LPDIPROPHEADER pdiph) { SysKeyboardImpl *This = impl_from_IDirectInputDevice8W(iface); TRACE("(%p) %s,%p\n", iface, debugstr_guid(rguid), pdiph); _dump_DIPROPHEADER(pdiph); if (!IS_DIPROP(rguid)) return DI_OK; switch (LOWORD(rguid)) { case (DWORD_PTR)DIPROP_KEYNAME: { HRESULT hr; LPDIPROPSTRING ps = (LPDIPROPSTRING)pdiph; DIDEVICEOBJECTINSTANCEW didoi; if (pdiph->dwSize != sizeof(DIPROPSTRING)) return DIERR_INVALIDPARAM; didoi.dwSize = sizeof(DIDEVICEOBJECTINSTANCEW); hr = SysKeyboardWImpl_GetObjectInfo(iface, &didoi, ps->diph.dwObj, ps->diph.dwHow); if (hr == DI_OK) memcpy(ps->wsz, didoi.tszName, sizeof(ps->wsz)); return hr; } default: return IDirectInputDevice2AImpl_GetProperty( IDirectInputDevice8A_from_impl(This), rguid, pdiph ); } return DI_OK; }
/****************************************************************************** * GetProperty : get input device properties */ static HRESULT WINAPI JoystickLinuxWImpl_GetProperty(LPDIRECTINPUTDEVICE8W iface, REFGUID rguid, LPDIPROPHEADER pdiph) { JoystickImpl *This = impl_from_IDirectInputDevice8W(iface); TRACE("(this=%p,%s,%p)\n", iface, debugstr_guid(rguid), pdiph); _dump_DIPROPHEADER(pdiph); if (!IS_DIPROP(rguid)) return DI_OK; switch (LOWORD(rguid)) { case (DWORD_PTR) DIPROP_JOYSTICKID: { LPDIPROPDWORD pd = (LPDIPROPDWORD)pdiph; pd->dwData = get_joystick_index(&This->generic.base.guid); TRACE("DIPROP_JOYSTICKID(%d)\n", pd->dwData); break; } default: return JoystickWGenericImpl_GetProperty(iface, rguid, pdiph); } return DI_OK; }
/****************************************************************************** * GetProperty : get input device properties */ static HRESULT WINAPI JoystickAImpl_GetProperty( LPDIRECTINPUTDEVICE8A iface, REFGUID rguid, LPDIPROPHEADER pdiph) { JoystickImpl *This = (JoystickImpl *)iface; TRACE("(%p,%s,%p)\n", iface, debugstr_guid(rguid), pdiph); if (TRACE_ON(dinput)) _dump_DIPROPHEADER(pdiph); if (!HIWORD(rguid)) { switch (LOWORD(rguid)) { case (DWORD_PTR) DIPROP_RANGE: { LPDIPROPRANGE pr = (LPDIPROPRANGE)pdiph; int obj = find_property(&This->base.data_format, pdiph); /* The app is querying the current range of the axis * return the lMin and lMax values */ if (obj >= 0) { pr->lMin = This->props[obj].lMin; pr->lMax = This->props[obj].lMax; TRACE("range(%d, %d) obj=%d\n", pr->lMin, pr->lMax, obj); return DI_OK; } break; } case (DWORD_PTR) DIPROP_DEADZONE: { LPDIPROPDWORD pd = (LPDIPROPDWORD)pdiph; int obj = find_property(&This->base.data_format, pdiph); if (obj >= 0) { pd->dwData = This->props[obj].lDeadZone; TRACE("deadzone(%d) obj=%d\n", pd->dwData, obj); return DI_OK; } break; } case (DWORD_PTR) DIPROP_SATURATION: { LPDIPROPDWORD pd = (LPDIPROPDWORD)pdiph; int obj = find_property(&This->base.data_format, pdiph); if (obj >= 0) { pd->dwData = This->props[obj].lSaturation; TRACE("saturation(%d) obj=%d\n", pd->dwData, obj); return DI_OK; } break; } default: return IDirectInputDevice2AImpl_GetProperty(iface, rguid, pdiph); } } return DI_OK; }
/****************************************************************************** * GetProperty : get input device properties */ static HRESULT WINAPI SysMouseAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface, REFGUID rguid, LPDIPROPHEADER pdiph) { SysMouseImpl *This = (SysMouseImpl *)iface; TRACE("(this=%p,%s,%p)\n", iface, debugstr_guid(rguid), pdiph); if (TRACE_ON(dinput)) _dump_DIPROPHEADER(pdiph); if (!HIWORD(rguid)) { switch (LOWORD(rguid)) { case (DWORD) DIPROP_BUFFERSIZE: { LPDIPROPDWORD pd = (LPDIPROPDWORD)pdiph; TRACE(" return buffersize = %d\n",This->queue_len); pd->dwData = This->queue_len; break; } case (DWORD) DIPROP_GRANULARITY: { LPDIPROPDWORD pr = (LPDIPROPDWORD) pdiph; /* We'll just assume that the app asks about the Z axis */ pr->dwData = WHEEL_DELTA; break; } case (DWORD) DIPROP_RANGE: { LPDIPROPRANGE pr = (LPDIPROPRANGE) pdiph; if ((pdiph->dwHow == DIPH_BYID) && ((pdiph->dwObj == (DIDFT_MAKEINSTANCE(WINE_MOUSE_X_AXIS_INSTANCE) | DIDFT_RELAXIS)) || (pdiph->dwObj == (DIDFT_MAKEINSTANCE(WINE_MOUSE_Y_AXIS_INSTANCE) | DIDFT_RELAXIS)))) { /* Querying the range of either the X or the Y axis. As I do not know the range, do as if the range were unrestricted...*/ pr->lMin = DIPROPRANGE_NOMIN; pr->lMax = DIPROPRANGE_NOMAX; } break; } default: FIXME("Unknown type %p (%s)\n",rguid,debugstr_guid(rguid)); break; } } return DI_OK; }
/****************************************************************************** * GetProperty : get input device properties */ static HRESULT WINAPI SysMouseAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface, REFGUID rguid, LPDIPROPHEADER pdiph) { SysMouseImpl *This = (SysMouseImpl *)iface; TRACE("(%p) %s,%p\n", This, debugstr_guid(rguid), pdiph); _dump_DIPROPHEADER(pdiph); if (!HIWORD(rguid)) { switch (LOWORD(rguid)) { case (DWORD) DIPROP_GRANULARITY: { LPDIPROPDWORD pr = (LPDIPROPDWORD) pdiph; /* We'll just assume that the app asks about the Z axis */ pr->dwData = WHEEL_DELTA; break; } case (DWORD) DIPROP_RANGE: { LPDIPROPRANGE pr = (LPDIPROPRANGE) pdiph; if ((pdiph->dwHow == DIPH_BYID) && ((pdiph->dwObj == (DIDFT_MAKEINSTANCE(WINE_MOUSE_X_AXIS_INSTANCE) | DIDFT_RELAXIS)) || (pdiph->dwObj == (DIDFT_MAKEINSTANCE(WINE_MOUSE_Y_AXIS_INSTANCE) | DIDFT_RELAXIS)))) { /* Querying the range of either the X or the Y axis. As I do not know the range, do as if the range were unrestricted...*/ pr->lMin = DIPROPRANGE_NOMIN; pr->lMax = DIPROPRANGE_NOMAX; } break; } default: return IDirectInputDevice2AImpl_GetProperty(iface, rguid, pdiph); } } return DI_OK; }
/****************************************************************************** * GetProperty : get input device properties */ static HRESULT WINAPI JoystickAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface, REFGUID rguid, LPDIPROPHEADER pdiph) { JoystickImpl *This = (JoystickImpl *)iface; TRACE("(this=%p,%s,%p)\n", iface, debugstr_guid(rguid), pdiph); _dump_DIPROPHEADER(pdiph); if (HIWORD(rguid)) return DI_OK; switch (LOWORD(rguid)) { case (DWORD) DIPROP_RANGE: { LPDIPROPRANGE pr = (LPDIPROPRANGE) pdiph; int obj = find_property(&This->base.data_format, pdiph); if (obj < 0) return DIERR_OBJECTNOTFOUND; pr->lMin = This->props[obj].lMin; pr->lMax = This->props[obj].lMax; TRACE("range(%d, %d) obj=%d\n", pr->lMin, pr->lMax, obj); break; } case (DWORD) DIPROP_DEADZONE: { LPDIPROPDWORD pd = (LPDIPROPDWORD)pdiph; int obj = find_property(&This->base.data_format, pdiph); if (obj < 0) return DIERR_OBJECTNOTFOUND; pd->dwData = This->props[obj].lDeadZone; TRACE("deadzone(%d) obj=%d\n", pd->dwData, obj); break; } default: return IDirectInputDevice2AImpl_GetProperty(iface, rguid, pdiph); } return DI_OK; }
/****************************************************************************** * SetProperty : change input device properties */ HRESULT WINAPI JoystickWGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REFGUID rguid, LPCDIPROPHEADER ph) { JoystickGenericImpl *This = impl_from_IDirectInputDevice8W(iface); DWORD i; TRACE("(%p,%s,%p)\n",This,debugstr_guid(rguid),ph); if (ph == NULL) { WARN("invalid parameter: ph == NULL\n"); return DIERR_INVALIDPARAM; } if (TRACE_ON(dinput)) _dump_DIPROPHEADER(ph); if (IS_DIPROP(rguid)) { switch (LOWORD(rguid)) { case (DWORD_PTR)DIPROP_RANGE: { LPCDIPROPRANGE pr = (LPCDIPROPRANGE)ph; if (ph->dwHow == DIPH_DEVICE) { TRACE("proprange(%d,%d) all\n", pr->lMin, pr->lMax); for (i = 0; i < This->base.data_format.wine_df->dwNumObjs; i++) { This->props[i].lMin = pr->lMin; This->props[i].lMax = pr->lMax; } } else { int obj = find_property(&This->base.data_format, ph); TRACE("proprange(%d,%d) obj=%d\n", pr->lMin, pr->lMax, obj); if (obj >= 0) { This->props[obj].lMin = pr->lMin; This->props[obj].lMax = pr->lMax; return DI_OK; } } break; } case (DWORD_PTR)DIPROP_DEADZONE: { LPCDIPROPDWORD pd = (LPCDIPROPDWORD)ph; if (ph->dwHow == DIPH_DEVICE) { TRACE("deadzone(%d) all\n", pd->dwData); for (i = 0; i < This->base.data_format.wine_df->dwNumObjs; i++) This->props[i].lDeadZone = pd->dwData; } else { int obj = find_property(&This->base.data_format, ph); TRACE("deadzone(%d) obj=%d\n", pd->dwData, obj); if (obj >= 0) { This->props[obj].lDeadZone = pd->dwData; return DI_OK; } } break; } case (DWORD_PTR)DIPROP_SATURATION: { LPCDIPROPDWORD pd = (LPCDIPROPDWORD)ph; if (ph->dwHow == DIPH_DEVICE) { TRACE("saturation(%d) all\n", pd->dwData); for (i = 0; i < This->base.data_format.wine_df->dwNumObjs; i++) This->props[i].lSaturation = pd->dwData; } else { int obj = find_property(&This->base.data_format, ph); TRACE("saturation(%d) obj=%d\n", pd->dwData, obj); if (obj >= 0) { This->props[obj].lSaturation = pd->dwData; return DI_OK; } } break; } default: return IDirectInputDevice2WImpl_SetProperty(iface, rguid, ph); } } return DI_OK; }