/****************************************************************************** * GetObjectInfo : get information about a device object such as a button * or axis */ static HRESULT WINAPI SysKeyboardAImpl_GetObjectInfo( LPDIRECTINPUTDEVICE8A iface, LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) { HRESULT res; res = IDirectInputDevice2AImpl_GetObjectInfo(iface, pdidoi, dwObj, dwHow); if (res != DI_OK) return res; if (!GetKeyNameTextA((DIDFT_GETINSTANCE(pdidoi->dwType) & 0x80) << 17 | (DIDFT_GETINSTANCE(pdidoi->dwType) & 0x7f) << 16, pdidoi->tszName, sizeof(pdidoi->tszName))) return DIERR_OBJECTNOTFOUND; _dump_OBJECTINSTANCEA(pdidoi); return res; }
/****************************************************************************** * EnumObjects : enumerate the different buttons and axis... */ static HRESULT WINAPI SysMouseAImpl_EnumObjects( LPDIRECTINPUTDEVICE8A iface, LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID lpvRef, DWORD dwFlags) { SysMouseImpl *This = (SysMouseImpl *)iface; DIDEVICEOBJECTINSTANCEA ddoi; TRACE("(this=%p,%p,%p,%08lx)\n", This, lpCallback, lpvRef, dwFlags); if (TRACE_ON(dinput)) { 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); /* In a mouse, we have : two relative axis and three buttons */ if ((dwFlags == DIDFT_ALL) || (dwFlags & DIDFT_AXIS)) { /* X axis */ ddoi.guidType = GUID_XAxis; ddoi.dwOfs = This->offset_array[WINE_MOUSE_X_POSITION]; ddoi.dwType = DIDFT_MAKEINSTANCE(WINE_MOUSE_X_AXIS_INSTANCE) | DIDFT_RELAXIS; strcpy(ddoi.tszName, "X-Axis"); _dump_OBJECTINSTANCEA(&ddoi); if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK; /* Y axis */ ddoi.guidType = GUID_YAxis; ddoi.dwOfs = This->offset_array[WINE_MOUSE_Y_POSITION]; ddoi.dwType = DIDFT_MAKEINSTANCE(WINE_MOUSE_Y_AXIS_INSTANCE) | DIDFT_RELAXIS; strcpy(ddoi.tszName, "Y-Axis"); _dump_OBJECTINSTANCEA(&ddoi); if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK; /* Z axis */ ddoi.guidType = GUID_ZAxis; ddoi.dwOfs = This->offset_array[WINE_MOUSE_Z_POSITION]; ddoi.dwType = DIDFT_MAKEINSTANCE(WINE_MOUSE_Z_AXIS_INSTANCE) | DIDFT_RELAXIS; strcpy(ddoi.tszName, "Z-Axis"); _dump_OBJECTINSTANCEA(&ddoi); if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK; } if ((dwFlags == DIDFT_ALL) || (dwFlags & DIDFT_BUTTON)) { ddoi.guidType = GUID_Button; /* Left button */ ddoi.dwOfs = This->offset_array[WINE_MOUSE_L_POSITION]; ddoi.dwType = DIDFT_MAKEINSTANCE(WINE_MOUSE_L_BUTTON_INSTANCE) | DIDFT_PSHBUTTON; strcpy(ddoi.tszName, "Left-Button"); _dump_OBJECTINSTANCEA(&ddoi); if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK; /* Right button */ ddoi.dwOfs = This->offset_array[WINE_MOUSE_R_POSITION]; ddoi.dwType = DIDFT_MAKEINSTANCE(WINE_MOUSE_R_BUTTON_INSTANCE) | DIDFT_PSHBUTTON; strcpy(ddoi.tszName, "Right-Button"); _dump_OBJECTINSTANCEA(&ddoi); if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK; /* Middle button */ ddoi.dwOfs = This->offset_array[WINE_MOUSE_M_POSITION]; ddoi.dwType = DIDFT_MAKEINSTANCE(WINE_MOUSE_M_BUTTON_INSTANCE) | DIDFT_PSHBUTTON; strcpy(ddoi.tszName, "Middle-Button"); _dump_OBJECTINSTANCEA(&ddoi); if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK; } return DI_OK; }