dinput: Implement EnumOjects[A|W] in the base device class.
This commit is contained in:
parent
18ee811e4c
commit
42feef0c7b
|
@ -800,13 +800,49 @@ HRESULT WINAPI IDirectInputDevice2AImpl_EnumObjects(
|
|||
LPVOID lpvRef,
|
||||
DWORD dwFlags)
|
||||
{
|
||||
FIXME("(this=%p,%p,%p,%08x): stub!\n", iface, lpCallback, lpvRef, dwFlags);
|
||||
if (TRACE_ON(dinput)) {
|
||||
DPRINTF(" - flags = ");
|
||||
_dump_EnumObjects_flags(dwFlags);
|
||||
DPRINTF("\n");
|
||||
IDirectInputDevice2AImpl *This = (IDirectInputDevice2AImpl *)iface;
|
||||
DIDEVICEOBJECTINSTANCEA ddoi;
|
||||
int i, axis = 0, button = 0;
|
||||
|
||||
TRACE("(%p) %p,%p flags:%08x)\n", iface, lpCallback, lpvRef, dwFlags);
|
||||
TRACE(" - flags = ");
|
||||
_dump_EnumObjects_flags(dwFlags);
|
||||
TRACE("\n");
|
||||
|
||||
/* Only the fields till dwFFMaxForce are relevant */
|
||||
memset(&ddoi, 0, sizeof(ddoi));
|
||||
ddoi.dwSize = FIELD_OFFSET(DIDEVICEOBJECTINSTANCEA, dwFFMaxForce);
|
||||
|
||||
for (i = 0; i < This->data_format.wine_df->dwNumObjs; i++)
|
||||
{
|
||||
LPDIOBJECTDATAFORMAT odf;
|
||||
DWORD type;
|
||||
|
||||
odf = (LPDIOBJECTDATAFORMAT)((LPBYTE)This->data_format.wine_df->rgodf +
|
||||
i * This->data_format.wine_df->dwObjSize);
|
||||
type = DIEFT_GETTYPE(odf->dwType);
|
||||
|
||||
if (type & DIDFT_AXIS) axis++;
|
||||
else if (type & DIDFT_BUTTON) button++;
|
||||
|
||||
if (dwFlags != DIDFT_ALL && !(dwFlags & type)) continue;
|
||||
|
||||
ddoi.guidType = *odf->pguid;
|
||||
ddoi.dwType = odf->dwType;
|
||||
ddoi.dwFlags = odf->dwFlags;
|
||||
ddoi.dwOfs = !This->data_format.offsets ? odf->dwOfs : This->data_format.offsets[i];
|
||||
|
||||
if (IsEqualGUID(&ddoi.guidType, &GUID_XAxis)) strcpy(ddoi.tszName, "X-Axis");
|
||||
else if (IsEqualGUID(&ddoi.guidType, &GUID_YAxis)) strcpy(ddoi.tszName, "Y-Axis");
|
||||
else if (IsEqualGUID(&ddoi.guidType, &GUID_ZAxis)) strcpy(ddoi.tszName, "Z-Axis");
|
||||
else if (type & DIDFT_AXIS) wsprintfA(ddoi.tszName, "%d-Axis", axis - 1);
|
||||
else if (type & DIDFT_BUTTON) wsprintfA(ddoi.tszName, "Button %d", button - 1);
|
||||
else FIXME("no name\n");
|
||||
|
||||
_dump_OBJECTINSTANCEA(&ddoi);
|
||||
if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) break;
|
||||
}
|
||||
|
||||
|
||||
return DI_OK;
|
||||
}
|
||||
|
||||
|
@ -816,14 +852,15 @@ HRESULT WINAPI IDirectInputDevice2WImpl_EnumObjects(
|
|||
LPVOID lpvRef,
|
||||
DWORD dwFlags)
|
||||
{
|
||||
FIXME("(this=%p,%p,%p,%08x): stub!\n", iface, lpCallback, lpvRef, dwFlags);
|
||||
if (TRACE_ON(dinput)) {
|
||||
DPRINTF(" - flags = ");
|
||||
_dump_EnumObjects_flags(dwFlags);
|
||||
DPRINTF("\n");
|
||||
}
|
||||
|
||||
return DI_OK;
|
||||
device_enumobjects_AtoWcb_data data;
|
||||
|
||||
data.lpCallBack = lpCallback;
|
||||
data.lpvRef = lpvRef;
|
||||
|
||||
return IDirectInputDevice2AImpl_EnumObjects(
|
||||
(LPDIRECTINPUTDEVICE8A) iface,
|
||||
(LPDIENUMDEVICEOBJECTSCALLBACKA) DIEnumDevicesCallbackAtoW,
|
||||
(LPVOID) &data, dwFlags);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
|
@ -884,6 +921,7 @@ HRESULT WINAPI IDirectInputDevice2AImpl_SetProperty(
|
|||
if (pdiph->dwHow == DIPH_DEVICE && pdiph->dwObj) return DIERR_INVALIDPARAM;
|
||||
if (This->acquired) return DIERR_ACQUIRED;
|
||||
if (pdiph->dwHow != DIPH_DEVICE) return DIERR_UNSUPPORTED;
|
||||
if (!This->data_format.user_df) return DI_OK;
|
||||
|
||||
TRACE("Axis mode: %s\n", pd->dwData == DIPROPAXISMODE_ABS ? "absolute" :
|
||||
"relative");
|
||||
|
|
Loading…
Reference in New Issue