diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c index 683b13feccb..e9142fe9cfb 100644 --- a/dlls/dinput/device.c +++ b/dlls/dinput/device.c @@ -42,271 +42,383 @@ WINE_DEFAULT_DEBUG_CHANNEL(dinput); * Various debugging tools */ void _dump_cooperativelevel_DI(DWORD dwFlags) { - int i; - const struct { - DWORD mask; - const char *name; - } flags[] = { -#define FE(x) { x, #x}, - FE(DISCL_BACKGROUND) - FE(DISCL_EXCLUSIVE) - FE(DISCL_FOREGROUND) - FE(DISCL_NONEXCLUSIVE) + if (TRACE_ON(dinput)) { + int i; + static const struct { + DWORD mask; + const char *name; + } flags[] = { +#define FE(x) { x, #x} + FE(DISCL_BACKGROUND), + FE(DISCL_EXCLUSIVE), + FE(DISCL_FOREGROUND), + FE(DISCL_NONEXCLUSIVE) #undef FE - }; - for (i=0;i> 8); + }; + type = (dwFlags & 0xFF0000FF); + instance = ((dwFlags >> 8) & 0xFFFF); + DPRINTF("Type:"); + if (type == DIDFT_ALL) { + DPRINTF(" DIDFT_ALL"); + } else { + for (i = 0; i < (sizeof(flags) / sizeof(flags[0])); i++) { + if (flags[i].mask & type) { + type &= ~flags[i].mask; + DPRINTF(" %s",flags[i].name); + } + } + if (type) { + DPRINTF(" (unhandled: %08lx)", type); + } + } + DPRINTF(" / Instance: "); + if (instance == ((DIDFT_ANYINSTANCE >> 8) & 0xFFFF)) { + DPRINTF("DIDFT_ANYINSTANCE"); + } else { + DPRINTF("%3ld", instance); + } + } } void _dump_DIPROPHEADER(DIPROPHEADER *diph) { - DPRINTF(" - dwObj = 0x%08lx\n", diph->dwObj); - DPRINTF(" - dwHow = %s\n", - ((diph->dwHow == DIPH_DEVICE) ? "DIPH_DEVICE" : - ((diph->dwHow == DIPH_BYOFFSET) ? "DIPH_BYOFFSET" : - ((diph->dwHow == DIPH_BYID)) ? "DIPH_BYID" : "unknown"))); + if (TRACE_ON(dinput)) { + DPRINTF(" - dwObj = 0x%08lx\n", diph->dwObj); + DPRINTF(" - dwHow = %s\n", + ((diph->dwHow == DIPH_DEVICE) ? "DIPH_DEVICE" : + ((diph->dwHow == DIPH_BYOFFSET) ? "DIPH_BYOFFSET" : + ((diph->dwHow == DIPH_BYID)) ? "DIPH_BYID" : "unknown"))); + } } void _dump_OBJECTINSTANCEA(DIDEVICEOBJECTINSTANCEA *ddoi) { - if (TRACE_ON(dinput)) { - DPRINTF(" - enumerating : %s - %2ld - 0x%08lx - %s\n", - debugstr_guid(&ddoi->guidType), ddoi->dwOfs, ddoi->dwType, ddoi->tszName); - } + if (TRACE_ON(dinput)) { + DPRINTF(" - enumerating : %s ('%s') - %2ld - 0x%08lx - %s\n", + debugstr_guid(&ddoi->guidType), _dump_dinput_GUID(&ddoi->guidType), ddoi->dwOfs, ddoi->dwType, ddoi->tszName); + } } void _dump_OBJECTINSTANCEW(DIDEVICEOBJECTINSTANCEW *ddoi) { - if (TRACE_ON(dinput)) { - DPRINTF(" - enumerating : %s - %2ld - 0x%08lx - %s\n", - debugstr_guid(&ddoi->guidType), ddoi->dwOfs, ddoi->dwType, debugstr_w(ddoi->tszName)); - } + if (TRACE_ON(dinput)) { + DPRINTF(" - enumerating : %s ('%s'), - %2ld - 0x%08lx - %s\n", + debugstr_guid(&ddoi->guidType), _dump_dinput_GUID(&ddoi->guidType), ddoi->dwOfs, ddoi->dwType, debugstr_w(ddoi->tszName)); + } +} + +/* This function is a helper to convert a GUID into any possible DInput GUID out there */ +const char *_dump_dinput_GUID(const GUID *guid) { + int i; + static const struct { + const GUID *guid; + const char *name; + } guids[] = { +#define FE(x) { &x, #x} + FE(GUID_XAxis), + FE(GUID_YAxis), + FE(GUID_ZAxis), + FE(GUID_RxAxis), + FE(GUID_RyAxis), + FE(GUID_RzAxis), + FE(GUID_Slider), + FE(GUID_Button), + FE(GUID_Key), + FE(GUID_POV), + FE(GUID_Unknown), + FE(GUID_SysMouse), + FE(GUID_SysKeyboard), + FE(GUID_Joystick), + FE(GUID_ConstantForce), + FE(GUID_RampForce), + FE(GUID_Square), + FE(GUID_Sine), + FE(GUID_Triangle), + FE(GUID_SawtoothUp), + FE(GUID_SawtoothDown), + FE(GUID_Spring), + FE(GUID_Damper), + FE(GUID_Inertia), + FE(GUID_Friction), + FE(GUID_CustomForce) +#undef FE + }; + if (guid == NULL) + return "null GUID"; + for (i = 0; i < (sizeof(guids) / sizeof(guids[0])); i++) { + if (IsEqualGUID(guids[i].guid, guid)) { + return guids[i].name; + } + } + return "Unknown GUID"; +} + +void _dump_DIDATAFORMAT(const DIDATAFORMAT *df) { + int i; + + TRACE("Dumping DIDATAFORMAT structure:\n"); + TRACE(" - dwSize: %ld\n", df->dwSize); + if (df->dwSize != sizeof(DIDATAFORMAT)) { + WARN("Non-standard DIDATAFORMAT structure size (%ld instead of %d).\n", df->dwSize, sizeof(DIDATAFORMAT)); + } + TRACE(" - dwObjsize: %ld\n", df->dwObjSize); + if (df->dwObjSize != sizeof(DIOBJECTDATAFORMAT)) { + WARN("Non-standard DIOBJECTDATAFORMAT structure size (%ld instead of %d).\n", df->dwObjSize, sizeof(DIOBJECTDATAFORMAT)); + } + TRACE(" - dwFlags: 0x%08lx (", df->dwFlags); + switch (df->dwFlags) { + case DIDF_ABSAXIS: TRACE("DIDF_ABSAXIS"); break; + case DIDF_RELAXIS: TRACE("DIDF_RELAXIS"); break; + default: TRACE("unknown"); break; + } + TRACE(")\n"); + TRACE(" - dwDataSize: %ld\n", df->dwDataSize); + TRACE(" - dwNumObjs: %ld\n", df->dwNumObjs); + + for (i = 0; i < df->dwNumObjs; i++) { + TRACE(" - Object %d:\n", i); + TRACE(" * GUID: %s ('%s')\n", debugstr_guid(df->rgodf[i].pguid), _dump_dinput_GUID(df->rgodf[i].pguid)); + TRACE(" * dwOfs: %ld\n", df->rgodf[i].dwOfs); + TRACE(" * dwType: 0x%08lx\n", df->rgodf[i].dwType); + TRACE(" "); _dump_EnumObjects_flags(df->rgodf[i].dwType); TRACE("\n"); + TRACE(" * dwFlags: 0x%08lx\n", df->rgodf[i].dwFlags); + } } /* Conversion between internal data buffer and external data buffer */ void fill_DataFormat(void *out, void *in, DataFormat *df) { - int i; - char *in_c = (char *) in; - char *out_c = (char *) out; - - if (df->dt == NULL) { - /* This means that the app uses Wine's internal data format */ - memcpy(out, in, df->internal_format_size); - } else { - for (i = 0; i < df->size; i++) { - if (df->dt[i].offset_in >= 0) { - switch (df->dt[i].size) { - case 1: - TRACE("Copying (c) to %d from %d (value %d)\n", - df->dt[i].offset_out, df->dt[i].offset_in, *((char *) (in_c + df->dt[i].offset_in))); - *((char *) (out_c + df->dt[i].offset_out)) = *((char *) (in_c + df->dt[i].offset_in)); - break; - - case 2: - TRACE("Copying (s) to %d from %d (value %d)\n", - df->dt[i].offset_out, df->dt[i].offset_in, *((short *) (in_c + df->dt[i].offset_in))); - *((short *) (out_c + df->dt[i].offset_out)) = *((short *) (in_c + df->dt[i].offset_in)); - break; - - case 4: - TRACE("Copying (i) to %d from %d (value %d)\n", - df->dt[i].offset_out, df->dt[i].offset_in, *((int *) (in_c + df->dt[i].offset_in))); - *((int *) (out_c + df->dt[i].offset_out)) = *((int *) (in_c + df->dt[i].offset_in)); - break; - - default: - memcpy((out_c + df->dt[i].offset_out), (in_c + df->dt[i].offset_in), df->dt[i].size); + int i; + char *in_c = (char *) in; + char *out_c = (char *) out; + + if (df->dt == NULL) { + /* This means that the app uses Wine's internal data format */ + memcpy(out, in, df->internal_format_size); + } else { + for (i = 0; i < df->size; i++) { + if (df->dt[i].offset_in >= 0) { + switch (df->dt[i].size) { + case 1: + TRACE("Copying (c) to %d from %d (value %d)\n", + df->dt[i].offset_out, df->dt[i].offset_in, *((char *) (in_c + df->dt[i].offset_in))); + *((char *) (out_c + df->dt[i].offset_out)) = *((char *) (in_c + df->dt[i].offset_in)); + break; + + case 2: + TRACE("Copying (s) to %d from %d (value %d)\n", + df->dt[i].offset_out, df->dt[i].offset_in, *((short *) (in_c + df->dt[i].offset_in))); + *((short *) (out_c + df->dt[i].offset_out)) = *((short *) (in_c + df->dt[i].offset_in)); + break; + + case 4: + TRACE("Copying (i) to %d from %d (value %d)\n", + df->dt[i].offset_out, df->dt[i].offset_in, *((int *) (in_c + df->dt[i].offset_in))); + *((int *) (out_c + df->dt[i].offset_out)) = *((int *) (in_c + df->dt[i].offset_in)); + break; + + default: + memcpy((out_c + df->dt[i].offset_out), (in_c + df->dt[i].offset_in), df->dt[i].size); + break; + } + } else { + switch (df->dt[i].size) { + case 1: + TRACE("Copying (c) to %d default value %d\n", + df->dt[i].offset_out, df->dt[i].value); + *((char *) (out_c + df->dt[i].offset_out)) = (char) df->dt[i].value; + break; + + case 2: + TRACE("Copying (s) to %d default value %d\n", + df->dt[i].offset_out, df->dt[i].value); + *((short *) (out_c + df->dt[i].offset_out)) = (short) df->dt[i].value; + break; + + case 4: + TRACE("Copying (i) to %d default value %d\n", + df->dt[i].offset_out, df->dt[i].value); + *((int *) (out_c + df->dt[i].offset_out)) = (int) df->dt[i].value; + break; + + default: + memset((out_c + df->dt[i].offset_out), df->dt[i].size, 0); + break; + } + } } - } else { - switch (df->dt[i].size) { - case 1: - TRACE("Copying (c) to %d default value %d\n", - df->dt[i].offset_out, df->dt[i].value); - *((char *) (out_c + df->dt[i].offset_out)) = (char) df->dt[i].value; - break; - - case 2: - TRACE("Copying (s) to %d default value %d\n", - df->dt[i].offset_out, df->dt[i].value); - *((short *) (out_c + df->dt[i].offset_out)) = (short) df->dt[i].value; - break; - - case 4: - TRACE("Copying (i) to %d default value %d\n", - df->dt[i].offset_out, df->dt[i].value); - *((int *) (out_c + df->dt[i].offset_out)) = (int) df->dt[i].value; - break; - - default: - memset((out_c + df->dt[i].offset_out), df->dt[i].size, 0); - } - } } - } } -DataFormat *create_DataFormat(DIDATAFORMAT *wine_format, LPCDIDATAFORMAT asked_format, int *offset) { - DataFormat *ret; - DataTransform *dt; - int i, j; - int same = 1; - int *done; - int index = 0; - - ret = (DataFormat *) HeapAlloc(GetProcessHeap(), 0, sizeof(DataFormat)); - - done = (int *) HeapAlloc(GetProcessHeap(), 0, sizeof(int) * asked_format->dwNumObjs); - memset(done, 0, sizeof(int) * asked_format->dwNumObjs); - - dt = (DataTransform *) HeapAlloc(GetProcessHeap(), 0, asked_format->dwNumObjs * sizeof(DataTransform)); - - TRACE("Creating DataTransform : \n"); - - for (i = 0; i < wine_format->dwNumObjs; i++) { - offset[i] = -1; - +DataFormat *create_DataFormat(const DIDATAFORMAT *wine_format, LPCDIDATAFORMAT asked_format, int *offset) { + DataFormat *ret; + DataTransform *dt; + int i, j; + int same = 1; + int *done; + int index = 0; + + ret = (DataFormat *) HeapAlloc(GetProcessHeap(), 0, sizeof(DataFormat)); + + done = (int *) HeapAlloc(GetProcessHeap(), 0, sizeof(int) * asked_format->dwNumObjs); + memset(done, 0, sizeof(int) * asked_format->dwNumObjs); + + dt = (DataTransform *) HeapAlloc(GetProcessHeap(), 0, asked_format->dwNumObjs * sizeof(DataTransform)); + + TRACE("Creating DataTransform : \n"); + + for (i = 0; i < wine_format->dwNumObjs; i++) { + offset[i] = -1; + + for (j = 0; j < asked_format->dwNumObjs; j++) { + if (done[j] == 1) + continue; + + if (/* Check if the application either requests any GUID and if not, it if matches + * the GUID of the Wine object. + */ + ((asked_format->rgodf[j].pguid == NULL) || + (IsEqualGUID(wine_format->rgodf[i].pguid, asked_format->rgodf[j].pguid))) + && + (/* Then check if it accepts any instance id, and if not, if it matches Wine's + * instance id. + */ + ((asked_format->rgodf[j].dwType & 0x00FFFF00) == DIDFT_ANYINSTANCE) || + (DIDFT_GETINSTANCE(wine_format->rgodf[i].dwType) == DIDFT_GETINSTANCE(asked_format->rgodf[j].dwType)))) { + + done[j] = 1; + + TRACE("Matching : \n"); + TRACE(" - Asked (%d) :\n", j); + TRACE(" * GUID: %s ('%s')\n", + debugstr_guid(asked_format->rgodf[j].pguid), + _dump_dinput_GUID(asked_format->rgodf[j].pguid)); + TRACE(" * Offset: %3ld\n", asked_format->rgodf[j].dwOfs); + TRACE(" * dwType: %08lx\n", asked_format->rgodf[j].dwType); + TRACE(" "); _dump_EnumObjects_flags(asked_format->rgodf[j].dwType); TRACE("\n"); + + TRACE(" - Wine (%d) :\n", j); + TRACE(" * GUID: %s ('%s')\n", + debugstr_guid(wine_format->rgodf[j].pguid), + _dump_dinput_GUID(wine_format->rgodf[j].pguid)); + TRACE(" * Offset: %3ld\n", wine_format->rgodf[j].dwOfs); + TRACE(" * dwType: %08lx\n", wine_format->rgodf[j].dwType); + TRACE(" "); _dump_EnumObjects_flags(wine_format->rgodf[j].dwType); TRACE("\n"); + + if (wine_format->rgodf[i].dwType & DIDFT_BUTTON) + dt[index].size = sizeof(BYTE); + else + dt[index].size = sizeof(DWORD); + dt[index].offset_in = wine_format ->rgodf[i].dwOfs; + dt[index].offset_out = asked_format->rgodf[j].dwOfs; + dt[index].value = 0; + index++; + + if (wine_format->rgodf[i].dwOfs != asked_format->rgodf[j].dwOfs) + same = 0; + + offset[i] = asked_format->rgodf[j].dwOfs; + break; + } + } + + if (j == asked_format->dwNumObjs) + same = 0; + } + + TRACE("Setting to default value :\n"); for (j = 0; j < asked_format->dwNumObjs; j++) { - if (done[j] == 1) - continue; - - if (((asked_format->rgodf[j].pguid == NULL) || (IsEqualGUID(wine_format->rgodf[i].pguid, asked_format->rgodf[j].pguid))) - && - (wine_format->rgodf[i].dwType & asked_format->rgodf[j].dwType)) { - - done[j] = 1; - - TRACE("Matching : \n"); - TRACE(" - Asked (%d) : %s - Ofs = %3ld - (Type = 0x%02x | Instance = %04x)\n", - j, debugstr_guid(asked_format->rgodf[j].pguid), - asked_format->rgodf[j].dwOfs, - DIDFT_GETTYPE(asked_format->rgodf[j].dwType), DIDFT_GETINSTANCE(asked_format->rgodf[j].dwType)); - - TRACE(" - Wine (%d) : %s - Ofs = %3ld - (Type = 0x%02x | Instance = %04x)\n", - j, debugstr_guid(wine_format->rgodf[i].pguid), - wine_format->rgodf[i].dwOfs, - DIDFT_GETTYPE(wine_format->rgodf[i].dwType), DIDFT_GETINSTANCE(wine_format->rgodf[i].dwType)); - - if (wine_format->rgodf[i].dwType & DIDFT_BUTTON) - dt[index].size = sizeof(BYTE); - else - dt[index].size = sizeof(DWORD); - dt[index].offset_in = wine_format ->rgodf[i].dwOfs; - dt[index].offset_out = asked_format->rgodf[j].dwOfs; - dt[index].value = 0; - index++; - - if (wine_format->rgodf[i].dwOfs != asked_format->rgodf[j].dwOfs) - same = 0; - - offset[i] = asked_format->rgodf[j].dwOfs; - break; - } + if (done[j] == 0) { + TRACE(" - Asked (%d) :\n", j); + TRACE(" * GUID: %s ('%s')\n", + debugstr_guid(asked_format->rgodf[j].pguid), + _dump_dinput_GUID(asked_format->rgodf[j].pguid)); + TRACE(" * Offset: %3ld\n", asked_format->rgodf[j].dwOfs); + TRACE(" * dwType: %08lx\n", asked_format->rgodf[j].dwType); + TRACE(" "); _dump_EnumObjects_flags(asked_format->rgodf[j].dwType); TRACE("\n"); + + if (asked_format->rgodf[j].dwType & DIDFT_BUTTON) + dt[index].size = sizeof(BYTE); + else + dt[index].size = sizeof(DWORD); + dt[index].offset_in = -1; + dt[index].offset_out = asked_format->rgodf[j].dwOfs; + dt[index].value = 0; + index++; + + same = 0; + } } - - if (j == asked_format->dwNumObjs) - same = 0; - } - - TRACE("Setting to default value :\n"); - for (j = 0; j < asked_format->dwNumObjs; j++) { - if (done[j] == 0) { - TRACE(" - Asked (%d) : %s - Ofs = %3ld - (Type = 0x%02x | Instance = %04x)\n", - j, debugstr_guid(asked_format->rgodf[j].pguid), - asked_format->rgodf[j].dwOfs, - DIDFT_GETTYPE(asked_format->rgodf[j].dwType), DIDFT_GETINSTANCE(asked_format->rgodf[j].dwType)); - - - if (asked_format->rgodf[j].dwType & DIDFT_BUTTON) - dt[index].size = sizeof(BYTE); - else - dt[index].size = sizeof(DWORD); - dt[index].offset_in = -1; - dt[index].offset_out = asked_format->rgodf[j].dwOfs; - dt[index].value = 0; - index++; - - same = 0; + + ret->internal_format_size = wine_format->dwDataSize; + ret->size = index; + if (same) { + ret->dt = NULL; + HeapFree(GetProcessHeap(), 0, dt); + } else { + ret->dt = dt; } - } - - ret->internal_format_size = wine_format->dwDataSize; - ret->size = index; - if (same) { - ret->dt = NULL; - HeapFree(GetProcessHeap(), 0, dt); - } else { - ret->dt = dt; - } - - HeapFree(GetProcessHeap(), 0, done); - - return ret; + + HeapFree(GetProcessHeap(), 0, done); + + return ret; } BOOL DIEnumDevicesCallbackAtoW(LPCDIDEVICEOBJECTINSTANCEA lpddi, LPVOID lpvRef) { - DIDEVICEOBJECTINSTANCEW ddtmp; - device_enumobjects_AtoWcb_data* data; + DIDEVICEOBJECTINSTANCEW ddtmp; + device_enumobjects_AtoWcb_data* data; - data = (device_enumobjects_AtoWcb_data*) lpvRef; - - memset(&ddtmp, 0, sizeof(DIDEVICEINSTANCEW)); - - ddtmp.dwSize = sizeof(DIDEVICEINSTANCEW); - ddtmp.guidType = lpddi->guidType; - ddtmp.dwOfs = lpddi->dwOfs; - ddtmp.dwType = lpddi->dwType; - ddtmp.dwFlags = lpddi->dwFlags; - MultiByteToWideChar(CP_ACP, 0, lpddi->tszName, -1, ddtmp.tszName, MAX_PATH); - - if (lpddi->dwSize == sizeof(DIDEVICEINSTANCEA)) { - /** - * if dwSize < sizeof(DIDEVICEINSTANCEA of DInput version >= 5) - * force feedback and other newer datas aren't available - */ - ddtmp.dwFFMaxForce = lpddi->dwFFMaxForce; - ddtmp.dwFFForceResolution = lpddi->dwFFForceResolution; - ddtmp.wCollectionNumber = lpddi->wCollectionNumber; - ddtmp.wDesignatorIndex = lpddi->wDesignatorIndex; - ddtmp.wUsagePage = lpddi->wUsagePage; - ddtmp.wUsage = lpddi->wUsage; - ddtmp.dwDimension = lpddi->dwDimension; - ddtmp.wExponent = lpddi->wExponent; - ddtmp.wReserved = lpddi->wReserved; - } - return data->lpCallBack(&ddtmp, data->lpvRef); + data = (device_enumobjects_AtoWcb_data*) lpvRef; + + memset(&ddtmp, 0, sizeof(DIDEVICEINSTANCEW)); + + ddtmp.dwSize = sizeof(DIDEVICEINSTANCEW); + ddtmp.guidType = lpddi->guidType; + ddtmp.dwOfs = lpddi->dwOfs; + ddtmp.dwType = lpddi->dwType; + ddtmp.dwFlags = lpddi->dwFlags; + MultiByteToWideChar(CP_ACP, 0, lpddi->tszName, -1, ddtmp.tszName, MAX_PATH); + + if (lpddi->dwSize == sizeof(DIDEVICEINSTANCEA)) { + /** + * if dwSize < sizeof(DIDEVICEINSTANCEA of DInput version >= 5) + * force feedback and other newer datas aren't available + */ + ddtmp.dwFFMaxForce = lpddi->dwFFMaxForce; + ddtmp.dwFFForceResolution = lpddi->dwFFForceResolution; + ddtmp.wCollectionNumber = lpddi->wCollectionNumber; + ddtmp.wDesignatorIndex = lpddi->wDesignatorIndex; + ddtmp.wUsagePage = lpddi->wUsagePage; + ddtmp.wUsage = lpddi->wUsage; + ddtmp.dwDimension = lpddi->dwDimension; + ddtmp.wExponent = lpddi->wExponent; + ddtmp.wReserved = lpddi->wReserved; + } + return data->lpCallBack(&ddtmp, data->lpvRef); } /****************************************************************************** @@ -316,123 +428,112 @@ BOOL DIEnumDevicesCallbackAtoW(LPCDIDEVICEOBJECTINSTANCEA lpddi, LPVOID lpvRef) HRESULT WINAPI IDirectInputDevice2AImpl_SetDataFormat( LPDIRECTINPUTDEVICE8A iface,LPCDIDATAFORMAT df ) { - int i; - ICOM_THIS(IDirectInputDevice2AImpl,iface); - - TRACE("(this=%p,%p)\n",This,df); - - TRACE("df.dwSize=%ld\n",df->dwSize); - TRACE("(df.dwObjsize=%ld)\n",df->dwObjSize); - TRACE("(df.dwFlags=0x%08lx)\n",df->dwFlags); - TRACE("(df.dwDataSize=%ld)\n",df->dwDataSize); - TRACE("(df.dwNumObjs=%ld)\n",df->dwNumObjs); - - for (i=0;idwNumObjs;i++) { - TRACE("df.rgodf[%d].guid %s\n",i,debugstr_guid(df->rgodf[i].pguid)); - TRACE("df.rgodf[%d].dwOfs %ld\n",i,df->rgodf[i].dwOfs); - TRACE("dwType 0x%02x,dwInstance %d\n",DIDFT_GETTYPE(df->rgodf[i].dwType),DIDFT_GETINSTANCE(df->rgodf[i].dwType)); - TRACE("df.rgodf[%d].dwFlags 0x%08lx\n",i,df->rgodf[i].dwFlags); - } - return DI_OK; + ICOM_THIS(IDirectInputDevice2AImpl,iface); + + TRACE("(this=%p,%p)\n",This,df); + + _dump_DIDATAFORMAT(df); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_SetCooperativeLevel( LPDIRECTINPUTDEVICE8A iface,HWND hwnd,DWORD dwflags ) { - ICOM_THIS(IDirectInputDevice2AImpl,iface); - TRACE("(this=%p,0x%08lx,0x%08lx)\n",This,(DWORD)hwnd,dwflags); - if (TRACE_ON(dinput)) { - TRACE(" cooperative level : "); - _dump_cooperativelevel_DI(dwflags); - } - return DI_OK; + ICOM_THIS(IDirectInputDevice2AImpl,iface); + TRACE("(this=%p,0x%08lx,0x%08lx)\n",This,(DWORD)hwnd,dwflags); + if (TRACE_ON(dinput)) { + TRACE(" cooperative level : "); + _dump_cooperativelevel_DI(dwflags); + } + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_SetEventNotification( LPDIRECTINPUTDEVICE8A iface,HANDLE hnd ) { - ICOM_THIS(IDirectInputDevice2AImpl,iface); - FIXME("(this=%p,0x%08lx): stub\n",This,(DWORD)hnd); - return DI_OK; + ICOM_THIS(IDirectInputDevice2AImpl,iface); + FIXME("(this=%p,0x%08lx): stub\n",This,(DWORD)hnd); + return DI_OK; } ULONG WINAPI IDirectInputDevice2AImpl_Release(LPDIRECTINPUTDEVICE8A iface) { - ICOM_THIS(IDirectInputDevice2AImpl,iface); - This->ref--; - if (This->ref) - return This->ref; - HeapFree(GetProcessHeap(),0,This); - return DI_OK; + ICOM_THIS(IDirectInputDevice2AImpl,iface); + This->ref--; + if (This->ref) + return This->ref; + HeapFree(GetProcessHeap(),0,This); + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_QueryInterface( LPDIRECTINPUTDEVICE8A iface,REFIID riid,LPVOID *ppobj ) { - ICOM_THIS(IDirectInputDevice2AImpl,iface); - - TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(riid),ppobj); - if (IsEqualGUID(&IID_IUnknown,riid)) { - IDirectInputDevice2_AddRef(iface); - *ppobj = This; - return DI_OK; - } - if (IsEqualGUID(&IID_IDirectInputDeviceA,riid)) { - IDirectInputDevice2_AddRef(iface); - *ppobj = This; - return DI_OK; - } - if (IsEqualGUID(&IID_IDirectInputDevice2A,riid)) { - IDirectInputDevice2_AddRef(iface); - *ppobj = This; - return DI_OK; - } - if (IsEqualGUID(&IID_IDirectInputDevice7A,riid)) { - IDirectInputDevice7_AddRef(iface); - *ppobj = This; - return DI_OK; - } - TRACE("Unsupported interface !\n"); - return E_FAIL; + ICOM_THIS(IDirectInputDevice2AImpl,iface); + + TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(riid),ppobj); + if (IsEqualGUID(&IID_IUnknown,riid)) { + IDirectInputDevice2_AddRef(iface); + *ppobj = This; + return DI_OK; + } + if (IsEqualGUID(&IID_IDirectInputDeviceA,riid)) { + IDirectInputDevice2_AddRef(iface); + *ppobj = This; + return DI_OK; + } + if (IsEqualGUID(&IID_IDirectInputDevice2A,riid)) { + IDirectInputDevice2_AddRef(iface); + *ppobj = This; + return DI_OK; + } + if (IsEqualGUID(&IID_IDirectInputDevice7A,riid)) { + IDirectInputDevice7_AddRef(iface); + *ppobj = This; + return DI_OK; + } + TRACE("Unsupported interface !\n"); + return E_FAIL; } HRESULT WINAPI IDirectInputDevice2WImpl_QueryInterface( LPDIRECTINPUTDEVICE8W iface,REFIID riid,LPVOID *ppobj ) { - ICOM_THIS(IDirectInputDevice2AImpl,iface); - - TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(riid),ppobj); - if (IsEqualGUID(&IID_IUnknown,riid)) { - IDirectInputDevice2_AddRef(iface); - *ppobj = This; - return DI_OK; - } - if (IsEqualGUID(&IID_IDirectInputDeviceW,riid)) { - IDirectInputDevice2_AddRef(iface); - *ppobj = This; - return DI_OK; - } - if (IsEqualGUID(&IID_IDirectInputDevice2W,riid)) { - IDirectInputDevice2_AddRef(iface); - *ppobj = This; - return DI_OK; - } - if (IsEqualGUID(&IID_IDirectInputDevice7W,riid)) { - IDirectInputDevice7_AddRef(iface); - *ppobj = This; - return DI_OK; - } - TRACE("Unsupported interface !\n"); - return E_FAIL; + ICOM_THIS(IDirectInputDevice2AImpl,iface); + + TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(riid),ppobj); + if (IsEqualGUID(&IID_IUnknown,riid)) { + IDirectInputDevice2_AddRef(iface); + *ppobj = This; + return DI_OK; + } + if (IsEqualGUID(&IID_IDirectInputDeviceW,riid)) { + IDirectInputDevice2_AddRef(iface); + *ppobj = This; + return DI_OK; + } + if (IsEqualGUID(&IID_IDirectInputDevice2W,riid)) { + IDirectInputDevice2_AddRef(iface); + *ppobj = This; + return DI_OK; + } + if (IsEqualGUID(&IID_IDirectInputDevice7W,riid)) { + IDirectInputDevice7_AddRef(iface); + *ppobj = This; + return DI_OK; + } + TRACE("Unsupported interface !\n"); + return E_FAIL; } ULONG WINAPI IDirectInputDevice2AImpl_AddRef( LPDIRECTINPUTDEVICE8A iface) { - ICOM_THIS(IDirectInputDevice2AImpl,iface); - return ++This->ref; + ICOM_THIS(IDirectInputDevice2AImpl,iface); + return ++This->ref; } HRESULT WINAPI IDirectInputDevice2AImpl_EnumObjects( @@ -441,14 +542,14 @@ HRESULT WINAPI IDirectInputDevice2AImpl_EnumObjects( LPVOID lpvRef, DWORD dwFlags) { - FIXME("(this=%p,%p,%p,%08lx): stub!\n", iface, lpCallback, lpvRef, dwFlags); - if (TRACE_ON(dinput)) { - DPRINTF(" - flags = "); - _dump_EnumObjects_flags(dwFlags); - DPRINTF("\n"); - } - - return DI_OK; + FIXME("(this=%p,%p,%p,%08lx): stub!\n", iface, lpCallback, lpvRef, dwFlags); + if (TRACE_ON(dinput)) { + DPRINTF(" - flags = "); + _dump_EnumObjects_flags(dwFlags); + DPRINTF("\n"); + } + + return DI_OK; } HRESULT WINAPI IDirectInputDevice2WImpl_EnumObjects( @@ -457,14 +558,14 @@ HRESULT WINAPI IDirectInputDevice2WImpl_EnumObjects( LPVOID lpvRef, DWORD dwFlags) { - FIXME("(this=%p,%p,%p,%08lx): stub!\n", iface, lpCallback, lpvRef, dwFlags); - if (TRACE_ON(dinput)) { - DPRINTF(" - flags = "); - _dump_EnumObjects_flags(dwFlags); - DPRINTF("\n"); - } - - return DI_OK; + FIXME("(this=%p,%p,%p,%08lx): stub!\n", iface, lpCallback, lpvRef, dwFlags); + if (TRACE_ON(dinput)) { + DPRINTF(" - flags = "); + _dump_EnumObjects_flags(dwFlags); + DPRINTF("\n"); + } + + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_GetProperty( @@ -472,13 +573,13 @@ HRESULT WINAPI IDirectInputDevice2AImpl_GetProperty( REFGUID rguid, LPDIPROPHEADER pdiph) { - FIXME("(this=%p,%s,%p): stub!\n", - iface, debugstr_guid(rguid), pdiph); - - if (TRACE_ON(dinput)) - _dump_DIPROPHEADER(pdiph); - - return DI_OK; + FIXME("(this=%p,%s,%p): stub!\n", + iface, debugstr_guid(rguid), pdiph); + + if (TRACE_ON(dinput)) + _dump_DIPROPHEADER(pdiph); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_GetObjectInfo( @@ -487,10 +588,10 @@ HRESULT WINAPI IDirectInputDevice2AImpl_GetObjectInfo( DWORD dwObj, DWORD dwHow) { - FIXME("(this=%p,%p,%ld,0x%08lx): stub!\n", - iface, pdidoi, dwObj, dwHow); - - return DI_OK; + FIXME("(this=%p,%p,%ld,0x%08lx): stub!\n", + iface, pdidoi, dwObj, dwHow); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice2WImpl_GetObjectInfo( @@ -499,29 +600,30 @@ HRESULT WINAPI IDirectInputDevice2WImpl_GetObjectInfo( DWORD dwObj, DWORD dwHow) { - FIXME("(this=%p,%p,%ld,0x%08lx): stub!\n", - iface, pdidoi, dwObj, dwHow); - - return DI_OK; + FIXME("(this=%p,%p,%ld,0x%08lx): stub!\n", + iface, pdidoi, dwObj, dwHow); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_GetDeviceInfo( LPDIRECTINPUTDEVICE8A iface, LPDIDEVICEINSTANCEA pdidi) { - FIXME("(this=%p,%p): stub!\n", - iface, pdidi); - - return DI_OK; + FIXME("(this=%p,%p): stub!\n", + iface, pdidi); + + return DI_OK; } + HRESULT WINAPI IDirectInputDevice2WImpl_GetDeviceInfo( LPDIRECTINPUTDEVICE8W iface, LPDIDEVICEINSTANCEW pdidi) { - FIXME("(this=%p,%p): stub!\n", - iface, pdidi); - - return DI_OK; + FIXME("(this=%p,%p): stub!\n", + iface, pdidi); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_RunControlPanel( @@ -529,10 +631,10 @@ HRESULT WINAPI IDirectInputDevice2AImpl_RunControlPanel( HWND hwndOwner, DWORD dwFlags) { - FIXME("(this=%p,%p,0x%08lx): stub!\n", - iface, hwndOwner, dwFlags); + FIXME("(this=%p,%p,0x%08lx): stub!\n", + iface, hwndOwner, dwFlags); - return DI_OK; + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_Initialize( @@ -541,9 +643,9 @@ HRESULT WINAPI IDirectInputDevice2AImpl_Initialize( DWORD dwVersion, REFGUID rguid) { - FIXME("(this=%p,%p,%ld,%s): stub!\n", - iface, hinst, dwVersion, debugstr_guid(rguid)); - return DI_OK; + FIXME("(this=%p,%p,%ld,%s): stub!\n", + iface, hinst, dwVersion, debugstr_guid(rguid)); + return DI_OK; } /****************************************************************************** @@ -557,9 +659,9 @@ HRESULT WINAPI IDirectInputDevice2AImpl_CreateEffect( LPDIRECTINPUTEFFECT *ppdef, LPUNKNOWN pUnkOuter) { - FIXME("(this=%p,%s,%p,%p,%p): stub!\n", - iface, debugstr_guid(rguid), lpeff, ppdef, pUnkOuter); - return DI_OK; + FIXME("(this=%p,%s,%p,%p,%p): stub!\n", + iface, debugstr_guid(rguid), lpeff, ppdef, pUnkOuter); + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_EnumEffects( @@ -568,12 +670,12 @@ HRESULT WINAPI IDirectInputDevice2AImpl_EnumEffects( LPVOID lpvRef, DWORD dwFlags) { - FIXME("(this=%p,%p,%p,0x%08lx): stub!\n", - iface, lpCallback, lpvRef, dwFlags); - - if (lpCallback) - lpCallback(NULL, lpvRef); - return DI_OK; + FIXME("(this=%p,%p,%p,0x%08lx): stub!\n", + iface, lpCallback, lpvRef, dwFlags); + + if (lpCallback) + lpCallback(NULL, lpvRef); + return DI_OK; } HRESULT WINAPI IDirectInputDevice2WImpl_EnumEffects( @@ -582,12 +684,12 @@ HRESULT WINAPI IDirectInputDevice2WImpl_EnumEffects( LPVOID lpvRef, DWORD dwFlags) { - FIXME("(this=%p,%p,%p,0x%08lx): stub!\n", - iface, lpCallback, lpvRef, dwFlags); - - if (lpCallback) - lpCallback(NULL, lpvRef); - return DI_OK; + FIXME("(this=%p,%p,%p,0x%08lx): stub!\n", + iface, lpCallback, lpvRef, dwFlags); + + if (lpCallback) + lpCallback(NULL, lpvRef); + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_GetEffectInfo( @@ -595,9 +697,9 @@ HRESULT WINAPI IDirectInputDevice2AImpl_GetEffectInfo( LPDIEFFECTINFOA lpdei, REFGUID rguid) { - FIXME("(this=%p,%p,%s): stub!\n", - iface, lpdei, debugstr_guid(rguid)); - return DI_OK; + FIXME("(this=%p,%p,%s): stub!\n", + iface, lpdei, debugstr_guid(rguid)); + return DI_OK; } HRESULT WINAPI IDirectInputDevice2WImpl_GetEffectInfo( @@ -605,27 +707,27 @@ HRESULT WINAPI IDirectInputDevice2WImpl_GetEffectInfo( LPDIEFFECTINFOW lpdei, REFGUID rguid) { - FIXME("(this=%p,%p,%s): stub!\n", - iface, lpdei, debugstr_guid(rguid)); - return DI_OK; + FIXME("(this=%p,%p,%s): stub!\n", + iface, lpdei, debugstr_guid(rguid)); + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_GetForceFeedbackState( LPDIRECTINPUTDEVICE8A iface, LPDWORD pdwOut) { - FIXME("(this=%p,%p): stub!\n", - iface, pdwOut); - return DI_OK; + FIXME("(this=%p,%p): stub!\n", + iface, pdwOut); + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_SendForceFeedbackCommand( LPDIRECTINPUTDEVICE8A iface, DWORD dwFlags) { - FIXME("(this=%p,0x%08lx): stub!\n", - iface, dwFlags); - return DI_OK; + FIXME("(this=%p,0x%08lx): stub!\n", + iface, dwFlags); + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_EnumCreatedEffectObjects( @@ -634,27 +736,27 @@ HRESULT WINAPI IDirectInputDevice2AImpl_EnumCreatedEffectObjects( LPVOID lpvRef, DWORD dwFlags) { - FIXME("(this=%p,%p,%p,0x%08lx): stub!\n", - iface, lpCallback, lpvRef, dwFlags); - if (lpCallback) - lpCallback(NULL, lpvRef); - return DI_OK; + FIXME("(this=%p,%p,%p,0x%08lx): stub!\n", + iface, lpCallback, lpvRef, dwFlags); + if (lpCallback) + lpCallback(NULL, lpvRef); + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_Escape( LPDIRECTINPUTDEVICE8A iface, LPDIEFFESCAPE lpDIEEsc) { - FIXME("(this=%p,%p): stub!\n", - iface, lpDIEEsc); - return DI_OK; + FIXME("(this=%p,%p): stub!\n", + iface, lpDIEEsc); + return DI_OK; } HRESULT WINAPI IDirectInputDevice2AImpl_Poll( LPDIRECTINPUTDEVICE8A iface) { - /* Because wine devices do not need to be polled, just return DI_NOEFFECT */ - return DI_NOEFFECT; + /* Because wine devices do not need to be polled, just return DI_NOEFFECT */ + return DI_NOEFFECT; } HRESULT WINAPI IDirectInputDevice2AImpl_SendDeviceData( @@ -664,10 +766,10 @@ HRESULT WINAPI IDirectInputDevice2AImpl_SendDeviceData( LPDWORD pdwInOut, DWORD dwFlags) { - FIXME("(this=%p,0x%08lx,%p,%p,0x%08lx): stub!\n", - iface, cbObjectData, rgdod, pdwInOut, dwFlags); - - return DI_OK; + FIXME("(this=%p,0x%08lx,%p,%p,0x%08lx): stub!\n", + iface, cbObjectData, rgdod, pdwInOut, dwFlags); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice7AImpl_EnumEffectsInFile(LPDIRECTINPUTDEVICE8A iface, @@ -676,9 +778,9 @@ HRESULT WINAPI IDirectInputDevice7AImpl_EnumEffectsInFile(LPDIRECTINPUTDEVICE8A LPVOID pvRef, DWORD dwFlags) { - FIXME("(%p)->(%s,%p,%p,%08lx): stub !\n", iface, lpszFileName, pec, pvRef, dwFlags); - - return DI_OK; + FIXME("(%p)->(%s,%p,%p,%08lx): stub !\n", iface, lpszFileName, pec, pvRef, dwFlags); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice7WImpl_EnumEffectsInFile(LPDIRECTINPUTDEVICE8W iface, @@ -687,9 +789,9 @@ HRESULT WINAPI IDirectInputDevice7WImpl_EnumEffectsInFile(LPDIRECTINPUTDEVICE8W LPVOID pvRef, DWORD dwFlags) { - FIXME("(%p)->(%s,%p,%p,%08lx): stub !\n", iface, debugstr_w(lpszFileName), pec, pvRef, dwFlags); - - return DI_OK; + FIXME("(%p)->(%s,%p,%p,%08lx): stub !\n", iface, debugstr_w(lpszFileName), pec, pvRef, dwFlags); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice7AImpl_WriteEffectToFile(LPDIRECTINPUTDEVICE8A iface, @@ -698,9 +800,9 @@ HRESULT WINAPI IDirectInputDevice7AImpl_WriteEffectToFile(LPDIRECTINPUTDEVICE8A LPDIFILEEFFECT rgDiFileEft, DWORD dwFlags) { - FIXME("(%p)->(%s,%08lx,%p,%08lx): stub !\n", iface, lpszFileName, dwEntries, rgDiFileEft, dwFlags); - - return DI_OK; + FIXME("(%p)->(%s,%08lx,%p,%08lx): stub !\n", iface, lpszFileName, dwEntries, rgDiFileEft, dwFlags); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice7WImpl_WriteEffectToFile(LPDIRECTINPUTDEVICE8W iface, @@ -709,9 +811,9 @@ HRESULT WINAPI IDirectInputDevice7WImpl_WriteEffectToFile(LPDIRECTINPUTDEVICE8W LPDIFILEEFFECT rgDiFileEft, DWORD dwFlags) { - FIXME("(%p)->(%s,%08lx,%p,%08lx): stub !\n", iface, debugstr_w(lpszFileName), dwEntries, rgDiFileEft, dwFlags); - - return DI_OK; + FIXME("(%p)->(%s,%08lx,%p,%08lx): stub !\n", iface, debugstr_w(lpszFileName), dwEntries, rgDiFileEft, dwFlags); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice8AImpl_BuildActionMap(LPDIRECTINPUTDEVICE8A iface, @@ -719,9 +821,9 @@ HRESULT WINAPI IDirectInputDevice8AImpl_BuildActionMap(LPDIRECTINPUTDEVICE8A ifa LPCSTR lpszUserName, DWORD dwFlags) { - FIXME("(%p)->(%p,%s,%08lx): stub !\n", iface, lpdiaf, lpszUserName, dwFlags); - - return DI_OK; + FIXME("(%p)->(%p,%s,%08lx): stub !\n", iface, lpdiaf, lpszUserName, dwFlags); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice8WImpl_BuildActionMap(LPDIRECTINPUTDEVICE8W iface, @@ -729,9 +831,9 @@ HRESULT WINAPI IDirectInputDevice8WImpl_BuildActionMap(LPDIRECTINPUTDEVICE8W ifa LPCWSTR lpszUserName, DWORD dwFlags) { - FIXME("(%p)->(%p,%s,%08lx): stub !\n", iface, lpdiaf, debugstr_w(lpszUserName), dwFlags); - - return DI_OK; + FIXME("(%p)->(%p,%s,%08lx): stub !\n", iface, lpdiaf, debugstr_w(lpszUserName), dwFlags); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice8AImpl_SetActionMap(LPDIRECTINPUTDEVICE8A iface, @@ -739,9 +841,9 @@ HRESULT WINAPI IDirectInputDevice8AImpl_SetActionMap(LPDIRECTINPUTDEVICE8A iface LPCSTR lpszUserName, DWORD dwFlags) { - FIXME("(%p)->(%p,%s,%08lx): stub !\n", iface, lpdiaf, lpszUserName, dwFlags); - - return DI_OK; + FIXME("(%p)->(%p,%s,%08lx): stub !\n", iface, lpdiaf, lpszUserName, dwFlags); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice8WImpl_SetActionMap(LPDIRECTINPUTDEVICE8W iface, @@ -749,23 +851,23 @@ HRESULT WINAPI IDirectInputDevice8WImpl_SetActionMap(LPDIRECTINPUTDEVICE8W iface LPCWSTR lpszUserName, DWORD dwFlags) { - FIXME("(%p)->(%p,%s,%08lx): stub !\n", iface, lpdiaf, debugstr_w(lpszUserName), dwFlags); - - return DI_OK; + FIXME("(%p)->(%p,%s,%08lx): stub !\n", iface, lpdiaf, debugstr_w(lpszUserName), dwFlags); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice8AImpl_GetImageInfo(LPDIRECTINPUTDEVICE8A iface, LPDIDEVICEIMAGEINFOHEADERA lpdiDevImageInfoHeader) { - FIXME("(%p)->(%p): stub !\n", iface, lpdiDevImageInfoHeader); - - return DI_OK; + FIXME("(%p)->(%p): stub !\n", iface, lpdiDevImageInfoHeader); + + return DI_OK; } HRESULT WINAPI IDirectInputDevice8WImpl_GetImageInfo(LPDIRECTINPUTDEVICE8W iface, LPDIDEVICEIMAGEINFOHEADERW lpdiDevImageInfoHeader) { - FIXME("(%p)->(%p): stub !\n", iface, lpdiDevImageInfoHeader); - - return DI_OK; + FIXME("(%p)->(%p): stub !\n", iface, lpdiDevImageInfoHeader); + + return DI_OK; } diff --git a/dlls/dinput/device_private.h b/dlls/dinput/device_private.h index ebe503420da..452837f1bdf 100644 --- a/dlls/dinput/device_private.h +++ b/dlls/dinput/device_private.h @@ -49,7 +49,7 @@ typedef struct { DataTransform *dt; } DataFormat; extern void fill_DataFormat(void *out, void *in, DataFormat *df) ; -extern DataFormat *create_DataFormat(DIDATAFORMAT *wine_format, LPCDIDATAFORMAT asked_format, int *offset) ; +extern DataFormat *create_DataFormat(const DIDATAFORMAT *wine_format, LPCDIDATAFORMAT asked_format, int *offset) ; /* Used to fill events in the queue */ #define GEN_EVENT(offset,data,xtime,seq) \ @@ -91,6 +91,8 @@ extern void _dump_EnumObjects_flags(DWORD dwFlags) ; extern void _dump_DIPROPHEADER(DIPROPHEADER *diph) ; extern void _dump_OBJECTINSTANCEA(DIDEVICEOBJECTINSTANCEA *ddoi) ; extern void _dump_OBJECTINSTANCEW(DIDEVICEOBJECTINSTANCEW *ddoi) ; +extern void _dump_DIDATAFORMAT(const DIDATAFORMAT *df) ; +extern const char *_dump_dinput_GUID(const GUID *guid) ; /* And the stubs */ extern HRESULT WINAPI IDirectInputDevice2AImpl_SetDataFormat( diff --git a/dlls/dinput/joystick_linux.c b/dlls/dinput/joystick_linux.c index 2fa869aa10c..793a12089a5 100644 --- a/dlls/dinput/joystick_linux.c +++ b/dlls/dinput/joystick_linux.c @@ -258,22 +258,10 @@ static HRESULT WINAPI JoystickAImpl_SetDataFormat( ) { ICOM_THIS(JoystickImpl,iface); - int i; TRACE("(this=%p,%p)\n",This,df); - TRACE("(df.dwSize=%ld)\n",df->dwSize); - TRACE("(df.dwObjsize=%ld)\n",df->dwObjSize); - TRACE("(df.dwFlags=0x%08lx)\n",df->dwFlags); - TRACE("(df.dwDataSize=%ld)\n",df->dwDataSize); - TRACE("(df.dwNumObjs=%ld)\n",df->dwNumObjs); - - for (i=0;idwNumObjs;i++) { - TRACE("df.rgodf[%d].guid %s (%p)\n",i,debugstr_guid(df->rgodf[i].pguid), df->rgodf[i].pguid); - TRACE("df.rgodf[%d].dwOfs %ld\n",i,df->rgodf[i].dwOfs); - TRACE("dwType 0x%02x,dwInstance %d\n",DIDFT_GETTYPE(df->rgodf[i].dwType),DIDFT_GETINSTANCE(df->rgodf[i].dwType)); - TRACE("df.rgodf[%d].dwFlags 0x%08lx\n",i,df->rgodf[i].dwFlags); - } + _dump_DIDATAFORMAT(df); /* Store the new data format */ This->df = HeapAlloc(GetProcessHeap(),0,df->dwSize); diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c index 402a6952315..01cfa1b2a3d 100644 --- a/dlls/dinput/joystick_linuxinput.c +++ b/dlls/dinput/joystick_linuxinput.c @@ -349,23 +349,11 @@ static HRESULT WINAPI JoystickAImpl_SetDataFormat( ) { ICOM_THIS(JoystickImpl,iface); - int i; TRACE("(this=%p,%p)\n",This,df); - TRACE("(df.dwSize=%ld)\n",df->dwSize); - TRACE("(df.dwObjsize=%ld)\n",df->dwObjSize); - TRACE("(df.dwFlags=0x%08lx)\n",df->dwFlags); - TRACE("(df.dwDataSize=%ld)\n",df->dwDataSize); - TRACE("(df.dwNumObjs=%ld)\n",df->dwNumObjs); - - for (i=0;idwNumObjs;i++) { - TRACE("df.rgodf[%d].guid %s (%p)\n",i,debugstr_guid(df->rgodf[i].pguid), df->rgodf[i].pguid); - TRACE("df.rgodf[%d].dwOfs %ld\n",i,df->rgodf[i].dwOfs); - TRACE("dwType 0x%02x,dwInstance %d\n",DIDFT_GETTYPE(df->rgodf[i].dwType),DIDFT_GETINSTANCE(df->rgodf[i].dwType)); - TRACE("df.rgodf[%d].dwFlags 0x%08lx\n",i,df->rgodf[i].dwFlags); - } - + _dump_DIDATAFORMAT(df); + /* Store the new data format */ This->df = HeapAlloc(GetProcessHeap(),0,df->dwSize); memcpy(This->df, df, df->dwSize); diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c index 89b8f54ca1b..95624be94b5 100644 --- a/dlls/dinput/mouse.c +++ b/dlls/dinput/mouse.c @@ -42,12 +42,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(dinput); /* Wine mouse driver object instances */ -#define WINE_MOUSE_X_AXIS_INSTANCE 0x0001 -#define WINE_MOUSE_Y_AXIS_INSTANCE 0x0002 -#define WINE_MOUSE_Z_AXIS_INSTANCE 0x0004 -#define WINE_MOUSE_L_BUTTON_INSTANCE 0x0008 -#define WINE_MOUSE_R_BUTTON_INSTANCE 0x0010 -#define WINE_MOUSE_M_BUTTON_INSTANCE 0x0020 +#define WINE_MOUSE_X_AXIS_INSTANCE 0 +#define WINE_MOUSE_Y_AXIS_INSTANCE 1 +#define WINE_MOUSE_Z_AXIS_INSTANCE 2 +#define WINE_MOUSE_L_BUTTON_INSTANCE 0 +#define WINE_MOUSE_R_BUTTON_INSTANCE 1 +#define WINE_MOUSE_M_BUTTON_INSTANCE 2 +#define WINE_MOUSE_D_BUTTON_INSTANCE 3 /* ------------------------------- */ /* Wine mouse internal data format */ @@ -62,36 +63,36 @@ WINE_DEFAULT_DEBUG_CHANNEL(dinput); #define WINE_MOUSE_M_POSITION 5 typedef struct { - LONG lX; - LONG lY; - LONG lZ; - BYTE rgbButtons[4]; + LONG lX; + LONG lY; + LONG lZ; + BYTE rgbButtons[4]; } Wine_InternalMouseData; #define WINE_INTERNALMOUSE_NUM_OBJS 6 -static DIOBJECTDATAFORMAT Wine_InternalMouseObjectFormat[WINE_INTERNALMOUSE_NUM_OBJS] = { - { &GUID_XAxis, FIELD_OFFSET(Wine_InternalMouseData, lX), - DIDFT_MAKEINSTANCE(WINE_MOUSE_X_AXIS_INSTANCE) | DIDFT_RELAXIS, 0 }, - { &GUID_YAxis, FIELD_OFFSET(Wine_InternalMouseData, lY), - DIDFT_MAKEINSTANCE(WINE_MOUSE_Y_AXIS_INSTANCE) | DIDFT_RELAXIS, 0 }, - { &GUID_ZAxis, FIELD_OFFSET(Wine_InternalMouseData, lZ), - DIDFT_MAKEINSTANCE(WINE_MOUSE_Z_AXIS_INSTANCE) | DIDFT_RELAXIS, 0 }, - { &GUID_Button, (FIELD_OFFSET(Wine_InternalMouseData, rgbButtons)) + 0, - DIDFT_MAKEINSTANCE(WINE_MOUSE_L_BUTTON_INSTANCE) | DIDFT_PSHBUTTON, 0 }, - { &GUID_Button, (FIELD_OFFSET(Wine_InternalMouseData, rgbButtons)) + 1, - DIDFT_MAKEINSTANCE(WINE_MOUSE_R_BUTTON_INSTANCE) | DIDFT_PSHBUTTON, 0 }, - { &GUID_Button, (FIELD_OFFSET(Wine_InternalMouseData, rgbButtons)) + 2, - DIDFT_MAKEINSTANCE(WINE_MOUSE_M_BUTTON_INSTANCE) | DIDFT_PSHBUTTON, 0 } +static const DIOBJECTDATAFORMAT Wine_InternalMouseObjectFormat[WINE_INTERNALMOUSE_NUM_OBJS] = { + { &GUID_XAxis, FIELD_OFFSET(Wine_InternalMouseData, lX), + DIDFT_MAKEINSTANCE(WINE_MOUSE_X_AXIS_INSTANCE) | DIDFT_RELAXIS, 0 }, + { &GUID_YAxis, FIELD_OFFSET(Wine_InternalMouseData, lY), + DIDFT_MAKEINSTANCE(WINE_MOUSE_Y_AXIS_INSTANCE) | DIDFT_RELAXIS, 0 }, + { &GUID_ZAxis, FIELD_OFFSET(Wine_InternalMouseData, lZ), + DIDFT_MAKEINSTANCE(WINE_MOUSE_Z_AXIS_INSTANCE) | DIDFT_RELAXIS, 0 }, + { &GUID_Button, (FIELD_OFFSET(Wine_InternalMouseData, rgbButtons)) + 0, + DIDFT_MAKEINSTANCE(WINE_MOUSE_L_BUTTON_INSTANCE) | DIDFT_PSHBUTTON, 0 }, + { &GUID_Button, (FIELD_OFFSET(Wine_InternalMouseData, rgbButtons)) + 1, + DIDFT_MAKEINSTANCE(WINE_MOUSE_R_BUTTON_INSTANCE) | DIDFT_PSHBUTTON, 0 }, + { &GUID_Button, (FIELD_OFFSET(Wine_InternalMouseData, rgbButtons)) + 2, + DIDFT_MAKEINSTANCE(WINE_MOUSE_M_BUTTON_INSTANCE) | DIDFT_PSHBUTTON, 0 } }; -static DIDATAFORMAT Wine_InternalMouseFormat = { - 0, /* dwSize - unused */ - 0, /* dwObjsize - unused */ - 0, /* dwFlags - unused */ - sizeof(Wine_InternalMouseData), - WINE_INTERNALMOUSE_NUM_OBJS, /* dwNumObjs */ - Wine_InternalMouseObjectFormat +static const DIDATAFORMAT Wine_InternalMouseFormat = { + 0, /* dwSize - unused */ + 0, /* dwObjsize - unused */ + 0, /* dwFlags - unused */ + sizeof(Wine_InternalMouseData), + WINE_INTERNALMOUSE_NUM_OBJS, /* dwNumObjs */ + (LPDIOBJECTDATAFORMAT) Wine_InternalMouseObjectFormat }; static ICOM_VTABLE(IDirectInputDevice8A) SysMouseAvt; @@ -100,55 +101,57 @@ static ICOM_VTABLE(IDirectInputDevice8W) SysMouseWvt; typedef struct SysMouseImpl SysMouseImpl; typedef enum { - WARP_NEEDED, /* Warping is needed */ - WARP_STARTED, /* Warping has been done, waiting for the warp event */ - WARP_DONE /* Warping has been done */ + WARP_DONE, /* Warping has been done */ + WARP_NEEDED, /* Warping is needed */ + WARP_STARTED /* Warping has been done, waiting for the warp event */ } WARP_STATUS; struct SysMouseImpl { - LPVOID lpVtbl; - DWORD ref; - GUID guid; - - IDirectInputImpl *dinput; - - /* The current data format and the conversion between internal - and external data formats */ - LPDIDATAFORMAT df; - DataFormat *wine_df; - int offset_array[WINE_INTERNALMOUSE_NUM_OBJS]; - - /* SysMouseAImpl */ - BYTE absolute; - /* Previous position for relative moves */ - LONG prevX, prevY; - HHOOK hook; - HWND win; - DWORD dwCoopLevel; - POINT mapped_center; - DWORD win_centerX, win_centerY; - LPDIDEVICEOBJECTDATA data_queue; - int queue_head, queue_tail, queue_len; - /* warping: whether we need to move mouse back to middle once we - * reach window borders (for e.g. shooters, "surface movement" games) */ - WARP_STATUS need_warp; - int acquired; - HANDLE hEvent; - CRITICAL_SECTION crit; - - /* This is for mouse reporting. */ - Wine_InternalMouseData m_state; + LPVOID lpVtbl; + DWORD ref; + GUID guid; + + IDirectInputImpl *dinput; + + /* The current data format and the conversion between internal + and external data formats */ + DIDATAFORMAT *df; + DataFormat *wine_df; + int offset_array[WINE_INTERNALMOUSE_NUM_OBJS]; + + /* SysMouseAImpl */ + BYTE absolute; + /* Previous position for relative moves */ + LONG prevX, prevY; + /* These are used in case of relative -> absolute transitions */ + POINT org_coords; + HHOOK hook; + HWND win; + DWORD dwCoopLevel; + POINT mapped_center; + DWORD win_centerX, win_centerY; + LPDIDEVICEOBJECTDATA data_queue; + int queue_head, queue_tail, queue_len; + /* warping: whether we need to move mouse back to middle once we + * reach window borders (for e.g. shooters, "surface movement" games) */ + WARP_STATUS need_warp; + int acquired; + HANDLE hEvent; + CRITICAL_SECTION crit; + + /* This is for mouse reporting. */ + Wine_InternalMouseData m_state; }; /* FIXME: This is ugly and not thread safe :/ */ static IDirectInputDevice8A* current_lock = NULL; static GUID DInput_Wine_Mouse_GUID = { /* 9e573ed8-7734-11d2-8d4a-23903fb6bdf7 */ - 0x9e573ed8, - 0x7734, - 0x11d2, - {0x8d, 0x4a, 0x23, 0x90, 0x3f, 0xb6, 0xbd, 0xf7} + 0x9e573ed8, + 0x7734, + 0x11d2, + {0x8d, 0x4a, 0x23, 0x90, 0x3f, 0xb6, 0xbd, 0xf7} }; static void fill_mouse_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, int version) { @@ -201,43 +204,43 @@ static void fill_mouse_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, int version) static BOOL mousedev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, int version) { - if ((dwDevType == 0) || - ((dwDevType == DIDEVTYPE_MOUSE) && (version < 8)) || - ((dwDevType == DI8DEVTYPE_MOUSE) && (version >= 8))) { - TRACE("Enumerating the mouse device\n"); - - fill_mouse_dideviceinstanceA(lpddi, version); - - return TRUE; - } - - return FALSE; + if ((dwDevType == 0) || + ((dwDevType == DIDEVTYPE_MOUSE) && (version < 8)) || + ((dwDevType == DI8DEVTYPE_MOUSE) && (version >= 8))) { + TRACE("Enumerating the mouse device\n"); + + fill_mouse_dideviceinstanceA(lpddi, version); + + return TRUE; + } + + return FALSE; } static BOOL mousedev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, int version) { - if ((dwDevType == 0) || - ((dwDevType == DIDEVTYPE_MOUSE) && (version < 8)) || - ((dwDevType == DI8DEVTYPE_MOUSE) && (version >= 8))) { - TRACE("Enumerating the mouse device\n"); - - fill_mouse_dideviceinstanceW(lpddi, version); - - return TRUE; - } - - return FALSE; + if ((dwDevType == 0) || + ((dwDevType == DIDEVTYPE_MOUSE) && (version < 8)) || + ((dwDevType == DI8DEVTYPE_MOUSE) && (version >= 8))) { + TRACE("Enumerating the mouse device\n"); + + fill_mouse_dideviceinstanceW(lpddi, version); + + return TRUE; + } + + return FALSE; } static SysMouseImpl *alloc_device(REFGUID rguid, LPVOID mvt, IDirectInputImpl *dinput) { int offset_array[WINE_INTERNALMOUSE_NUM_OBJS] = { - FIELD_OFFSET(Wine_InternalMouseData, lX), - FIELD_OFFSET(Wine_InternalMouseData, lY), - FIELD_OFFSET(Wine_InternalMouseData, lZ), - FIELD_OFFSET(Wine_InternalMouseData, rgbButtons) + 0, - FIELD_OFFSET(Wine_InternalMouseData, rgbButtons) + 1, - FIELD_OFFSET(Wine_InternalMouseData, rgbButtons) + 2 + FIELD_OFFSET(Wine_InternalMouseData, lX), + FIELD_OFFSET(Wine_InternalMouseData, lY), + FIELD_OFFSET(Wine_InternalMouseData, lZ), + FIELD_OFFSET(Wine_InternalMouseData, rgbButtons) + 0, + FIELD_OFFSET(Wine_InternalMouseData, rgbButtons) + 1, + FIELD_OFFSET(Wine_InternalMouseData, rgbButtons) + 2 }; SysMouseImpl* newDevice; newDevice = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SysMouseImpl)); @@ -247,7 +250,7 @@ static SysMouseImpl *alloc_device(REFGUID rguid, LPVOID mvt, IDirectInputImpl *d memcpy(&(newDevice->guid),rguid,sizeof(*rguid)); /* Per default, Wine uses its internal data format */ - newDevice->df = &Wine_InternalMouseFormat; + newDevice->df = (DIDATAFORMAT *) &Wine_InternalMouseFormat; memcpy(newDevice->offset_array, offset_array, WINE_INTERNALMOUSE_NUM_OBJS * sizeof(int)); newDevice->wine_df = (DataFormat *) HeapAlloc(GetProcessHeap(), 0, sizeof(DataFormat)); newDevice->wine_df->size = 0; @@ -260,47 +263,47 @@ static SysMouseImpl *alloc_device(REFGUID rguid, LPVOID mvt, IDirectInputImpl *d static HRESULT mousedev_create_deviceA(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEA* pdev) { - if ((IsEqualGUID(&GUID_SysMouse,rguid)) || /* Generic Mouse */ - (IsEqualGUID(&DInput_Wine_Mouse_GUID,rguid))) { /* Wine Mouse */ - if ((riid == NULL) || - IsEqualGUID(&IID_IDirectInputDeviceA,riid) || - IsEqualGUID(&IID_IDirectInputDevice2A,riid) || - IsEqualGUID(&IID_IDirectInputDevice7A,riid) || - IsEqualGUID(&IID_IDirectInputDevice8A,riid)) { - *pdev = (IDirectInputDeviceA*) alloc_device(rguid, &SysMouseAvt, dinput); - TRACE("Creating a Mouse device (%p)\n", *pdev); - return DI_OK; - } else - return DIERR_NOINTERFACE; - } - - return DIERR_DEVICENOTREG; + if ((IsEqualGUID(&GUID_SysMouse,rguid)) || /* Generic Mouse */ + (IsEqualGUID(&DInput_Wine_Mouse_GUID,rguid))) { /* Wine Mouse */ + if ((riid == NULL) || + IsEqualGUID(&IID_IDirectInputDeviceA,riid) || + IsEqualGUID(&IID_IDirectInputDevice2A,riid) || + IsEqualGUID(&IID_IDirectInputDevice7A,riid) || + IsEqualGUID(&IID_IDirectInputDevice8A,riid)) { + *pdev = (IDirectInputDeviceA*) alloc_device(rguid, &SysMouseAvt, dinput); + TRACE("Creating a Mouse device (%p)\n", *pdev); + return DI_OK; + } else + return DIERR_NOINTERFACE; + } + + return DIERR_DEVICENOTREG; } static HRESULT mousedev_create_deviceW(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEW* pdev) { - if ((IsEqualGUID(&GUID_SysMouse,rguid)) || /* Generic Mouse */ - (IsEqualGUID(&DInput_Wine_Mouse_GUID,rguid))) { /* Wine Mouse */ - if ((riid == NULL) || - IsEqualGUID(&IID_IDirectInputDeviceW,riid) || - IsEqualGUID(&IID_IDirectInputDevice2W,riid) || - IsEqualGUID(&IID_IDirectInputDevice7W,riid) || - IsEqualGUID(&IID_IDirectInputDevice8W,riid)) { - *pdev = (IDirectInputDeviceW*) alloc_device(rguid, &SysMouseWvt, dinput); - TRACE("Creating a Mouse device (%p)\n", *pdev); - return DI_OK; - } else - return DIERR_NOINTERFACE; - } - - return DIERR_DEVICENOTREG; + if ((IsEqualGUID(&GUID_SysMouse,rguid)) || /* Generic Mouse */ + (IsEqualGUID(&DInput_Wine_Mouse_GUID,rguid))) { /* Wine Mouse */ + if ((riid == NULL) || + IsEqualGUID(&IID_IDirectInputDeviceW,riid) || + IsEqualGUID(&IID_IDirectInputDevice2W,riid) || + IsEqualGUID(&IID_IDirectInputDevice7W,riid) || + IsEqualGUID(&IID_IDirectInputDevice8W,riid)) { + *pdev = (IDirectInputDeviceW*) alloc_device(rguid, &SysMouseWvt, dinput); + TRACE("Creating a Mouse device (%p)\n", *pdev); + return DI_OK; + } else + return DIERR_NOINTERFACE; + } + + return DIERR_DEVICENOTREG; } static dinput_device mousedev = { - 100, - mousedev_enum_deviceA, - mousedev_enum_deviceW, - mousedev_create_deviceA, - mousedev_create_deviceW + 100, + mousedev_enum_deviceA, + mousedev_enum_deviceW, + mousedev_create_deviceA, + mousedev_create_deviceW }; DECL_GLOBAL_CONSTRUCTOR(mousedev_register) { dinput_register_device(&mousedev); } @@ -314,31 +317,31 @@ DECL_GLOBAL_CONSTRUCTOR(mousedev_register) { dinput_register_device(&mousedev); */ static ULONG WINAPI SysMouseAImpl_Release(LPDIRECTINPUTDEVICE8A iface) { - ICOM_THIS(SysMouseImpl,iface); - - This->ref--; - if (This->ref) - return This->ref; - - /* Free the data queue */ - if (This->data_queue != NULL) - HeapFree(GetProcessHeap(),0,This->data_queue); - - if (This->hook) { - UnhookWindowsHookEx( This->hook ); - if (This->dwCoopLevel & DISCL_EXCLUSIVE) + ICOM_THIS(SysMouseImpl,iface); + + This->ref--; + if (This->ref) + return This->ref; + + /* Free the data queue */ + if (This->data_queue != NULL) + HeapFree(GetProcessHeap(),0,This->data_queue); + + if (This->hook) { + UnhookWindowsHookEx( This->hook ); + if (This->dwCoopLevel & DISCL_EXCLUSIVE) ShowCursor(TRUE); /* show cursor */ - } - DeleteCriticalSection(&(This->crit)); - - /* Free the DataFormat */ - if (This->df != &(Wine_InternalMouseFormat)) { - HeapFree(GetProcessHeap(), 0, This->df->rgodf); - HeapFree(GetProcessHeap(), 0, This->df); - } - - HeapFree(GetProcessHeap(),0,This); - return DI_OK; + } + DeleteCriticalSection(&(This->crit)); + + /* Free the DataFormat */ + if (This->df != &(Wine_InternalMouseFormat)) { + HeapFree(GetProcessHeap(), 0, This->df->rgodf); + HeapFree(GetProcessHeap(), 0, This->df); + } + + HeapFree(GetProcessHeap(),0,This); + return DI_OK; } @@ -350,22 +353,22 @@ static HRESULT WINAPI SysMouseAImpl_SetCooperativeLevel( LPDIRECTINPUTDEVICE8A iface,HWND hwnd,DWORD dwflags ) { - ICOM_THIS(SysMouseImpl,iface); - - TRACE("(this=%p,0x%08lx,0x%08lx)\n",This,(DWORD)hwnd,dwflags); - - if (TRACE_ON(dinput)) { - TRACE(" cooperative level : "); - _dump_cooperativelevel_DI(dwflags); - } - - /* Store the window which asks for the mouse */ - if (!hwnd) - hwnd = GetDesktopWindow(); - This->win = hwnd; - This->dwCoopLevel = dwflags; - - return DI_OK; + ICOM_THIS(SysMouseImpl,iface); + + TRACE("(this=%p,0x%08lx,0x%08lx)\n",This,(DWORD)hwnd,dwflags); + + if (TRACE_ON(dinput)) { + TRACE(" cooperative level : "); + _dump_cooperativelevel_DI(dwflags); + } + + /* Store the window which asks for the mouse */ + if (!hwnd) + hwnd = GetDesktopWindow(); + This->win = hwnd; + This->dwCoopLevel = dwflags; + + return DI_OK; } @@ -380,40 +383,27 @@ static HRESULT WINAPI SysMouseAImpl_SetDataFormat( LPDIRECTINPUTDEVICE8A iface,LPCDIDATAFORMAT df ) { - ICOM_THIS(SysMouseImpl,iface); - int i; - - TRACE("(this=%p,%p)\n",This,df); - - TRACE("(df.dwSize=%ld)\n",df->dwSize); - TRACE("(df.dwObjsize=%ld)\n",df->dwObjSize); - TRACE("(df.dwFlags=0x%08lx)\n",df->dwFlags); - TRACE("(df.dwDataSize=%ld)\n",df->dwDataSize); - TRACE("(df.dwNumObjs=%ld)\n",df->dwNumObjs); - - for (i=0;idwNumObjs;i++) { - - TRACE("df.rgodf[%d].guid %s (%p)\n",i, debugstr_guid(df->rgodf[i].pguid), df->rgodf[i].pguid); - TRACE("df.rgodf[%d].dwOfs %ld\n",i,df->rgodf[i].dwOfs); - TRACE("dwType 0x%02x,dwInstance %d\n",DIDFT_GETTYPE(df->rgodf[i].dwType),DIDFT_GETINSTANCE(df->rgodf[i].dwType)); - TRACE("df.rgodf[%d].dwFlags 0x%08lx\n",i,df->rgodf[i].dwFlags); - } - - /* Tests under windows show that a call to SetDataFormat always sets the mouse - in relative mode whatever the dwFlags value (DIDF_ABSAXIS/DIDF_RELAXIS). - To switch in absolute mode, SetProperty must be used. */ - This->absolute = 0; - - /* Store the new data format */ - This->df = HeapAlloc(GetProcessHeap(),0,df->dwSize); - memcpy(This->df, df, df->dwSize); - This->df->rgodf = HeapAlloc(GetProcessHeap(),0,df->dwNumObjs*df->dwObjSize); - memcpy(This->df->rgodf,df->rgodf,df->dwNumObjs*df->dwObjSize); - - /* Prepare all the data-conversion filters */ - This->wine_df = create_DataFormat(&(Wine_InternalMouseFormat), df, This->offset_array); - - return DI_OK; + ICOM_THIS(SysMouseImpl,iface); + + TRACE("(this=%p,%p)\n",This,df); + + _dump_DIDATAFORMAT(df); + + /* Tests under windows show that a call to SetDataFormat always sets the mouse + in relative mode whatever the dwFlags value (DIDF_ABSAXIS/DIDF_RELAXIS). + To switch in absolute mode, SetProperty must be used. */ + This->absolute = 0; + + /* Store the new data format */ + This->df = HeapAlloc(GetProcessHeap(),0,df->dwSize); + memcpy(This->df, df, df->dwSize); + This->df->rgodf = HeapAlloc(GetProcessHeap(),0,df->dwNumObjs*df->dwObjSize); + memcpy(This->df->rgodf,df->rgodf,df->dwNumObjs*df->dwObjSize); + + /* Prepare all the data-conversion filters */ + This->wine_df = create_DataFormat(&(Wine_InternalMouseFormat), df, This->offset_array); + + return DI_OK; } /* low-level mouse hook */ @@ -438,137 +428,141 @@ static LRESULT CALLBACK dinput_mouse_hook( int code, WPARAM wparam, LPARAM lpara */ if (((GetCurrentTime() - last_event) < 10) && wparam == WM_MOUSEMOVE) - goto end; + goto end; else last_event = GetCurrentTime(); - + /* Mouse moved -> send event if asked */ if (This->hEvent) SetEvent(This->hEvent); - + if (wparam == WM_MOUSEMOVE) { if (This->absolute) { - if (hook->pt.x != This->prevX) - GEN_EVENT(This->offset_array[WINE_MOUSE_X_POSITION], hook->pt.x, hook->time, 0); - if (hook->pt.y != This->prevY) - GEN_EVENT(This->offset_array[WINE_MOUSE_Y_POSITION], hook->pt.y, hook->time, 0); - } else { - /* Now, warp handling */ - if ((This->need_warp == WARP_STARTED) && - (hook->pt.x == This->mapped_center.x) && (hook->pt.y == This->mapped_center.y)) { - /* Warp has been done... */ - This->need_warp = WARP_DONE; - goto end; - } - - /* Relative mouse input with absolute mouse event : the real fun starts here... */ - if ((This->need_warp == WARP_NEEDED) || - (This->need_warp == WARP_STARTED)) { if (hook->pt.x != This->prevX) - GEN_EVENT(This->offset_array[WINE_MOUSE_X_POSITION], hook->pt.x - This->prevX, hook->time, (This->dinput->evsequence)++); + GEN_EVENT(This->offset_array[WINE_MOUSE_X_POSITION], hook->pt.x, hook->time, 0); if (hook->pt.y != This->prevY) - GEN_EVENT(This->offset_array[WINE_MOUSE_Y_POSITION], hook->pt.y - This->prevY, hook->time, (This->dinput->evsequence)++); - } else { - /* This is the first time the event handler has been called after a - GetDeviceData or GetDeviceState. */ - if (hook->pt.x != This->mapped_center.x) { - GEN_EVENT(This->offset_array[WINE_MOUSE_X_POSITION], hook->pt.x - This->mapped_center.x, hook->time, (This->dinput->evsequence)++); - This->need_warp = WARP_NEEDED; + GEN_EVENT(This->offset_array[WINE_MOUSE_Y_POSITION], hook->pt.y, hook->time, 0); + } else { + /* Now, warp handling */ + if ((This->need_warp == WARP_STARTED) && + (hook->pt.x == This->mapped_center.x) && (hook->pt.y == This->mapped_center.y)) { + /* Warp has been done... */ + This->need_warp = WARP_DONE; + goto end; } - - if (hook->pt.y != This->mapped_center.y) { - GEN_EVENT(This->offset_array[WINE_MOUSE_Y_POSITION], hook->pt.y - This->mapped_center.y, hook->time, (This->dinput->evsequence)++); - This->need_warp = WARP_NEEDED; + + /* Relative mouse input with absolute mouse event : the real fun starts here... */ + if ((This->need_warp == WARP_NEEDED) || + (This->need_warp == WARP_STARTED)) { + if (hook->pt.x != This->prevX) + GEN_EVENT(This->offset_array[WINE_MOUSE_X_POSITION], hook->pt.x - This->prevX, + hook->time, (This->dinput->evsequence)++); + if (hook->pt.y != This->prevY) + GEN_EVENT(This->offset_array[WINE_MOUSE_Y_POSITION], hook->pt.y - This->prevY, + hook->time, (This->dinput->evsequence)++); + } else { + /* This is the first time the event handler has been called after a + GetDeviceData or GetDeviceState. */ + if (hook->pt.x != This->mapped_center.x) { + GEN_EVENT(This->offset_array[WINE_MOUSE_X_POSITION], hook->pt.x - This->mapped_center.x, + hook->time, (This->dinput->evsequence)++); + This->need_warp = WARP_NEEDED; + } + + if (hook->pt.y != This->mapped_center.y) { + GEN_EVENT(This->offset_array[WINE_MOUSE_Y_POSITION], hook->pt.y - This->mapped_center.y, + hook->time, (This->dinput->evsequence)++); + This->need_warp = WARP_NEEDED; + } } - } } - + This->prevX = hook->pt.x; This->prevY = hook->pt.y; - + if (This->absolute) { - This->m_state.lX = hook->pt.x; - This->m_state.lY = hook->pt.y; + This->m_state.lX = hook->pt.x; + This->m_state.lY = hook->pt.y; } else { - This->m_state.lX = hook->pt.x - This->mapped_center.x; - This->m_state.lY = hook->pt.y - This->mapped_center.y; + This->m_state.lX = hook->pt.x - This->mapped_center.x; + This->m_state.lY = hook->pt.y - This->mapped_center.y; } } - + TRACE(" msg %x pt %ld %ld (W=%d)\n", wparam, hook->pt.x, hook->pt.y, (!This->absolute) && This->need_warp ); - - switch(wparam) - { - case WM_LBUTTONDOWN: - GEN_EVENT(This->offset_array[WINE_MOUSE_L_POSITION], 0xFF, - hook->time, This->dinput->evsequence++); - This->m_state.rgbButtons[0] = 0xFF; - break; - case WM_LBUTTONUP: - GEN_EVENT(This->offset_array[WINE_MOUSE_L_POSITION], 0x00, - hook->time, This->dinput->evsequence++); - This->m_state.rgbButtons[0] = 0x00; - break; - case WM_RBUTTONDOWN: - GEN_EVENT(This->offset_array[WINE_MOUSE_R_POSITION], 0xFF, - hook->time, This->dinput->evsequence++); - This->m_state.rgbButtons[1] = 0xFF; - break; - case WM_RBUTTONUP: - GEN_EVENT(This->offset_array[WINE_MOUSE_R_POSITION], 0x00, - hook->time, This->dinput->evsequence++); - This->m_state.rgbButtons[1] = 0x00; - break; - case WM_MBUTTONDOWN: - GEN_EVENT(This->offset_array[WINE_MOUSE_M_POSITION], 0xFF, - hook->time, This->dinput->evsequence++); - This->m_state.rgbButtons[2] = 0xFF; - break; - case WM_MBUTTONUP: - GEN_EVENT(This->offset_array[WINE_MOUSE_M_POSITION], 0x00, - hook->time, This->dinput->evsequence++); - This->m_state.rgbButtons[2] = 0x00; - break; - case WM_MOUSEWHEEL: - wdata = (short)HIWORD(hook->mouseData); - GEN_EVENT(This->offset_array[WINE_MOUSE_Z_POSITION], wdata, - hook->time, This->dinput->evsequence++); - This->m_state.lZ += wdata; - break; + + switch(wparam) { + case WM_LBUTTONDOWN: + GEN_EVENT(This->offset_array[WINE_MOUSE_L_POSITION], 0xFF, + hook->time, This->dinput->evsequence++); + This->m_state.rgbButtons[0] = 0xFF; + break; + case WM_LBUTTONUP: + GEN_EVENT(This->offset_array[WINE_MOUSE_L_POSITION], 0x00, + hook->time, This->dinput->evsequence++); + This->m_state.rgbButtons[0] = 0x00; + break; + case WM_RBUTTONDOWN: + GEN_EVENT(This->offset_array[WINE_MOUSE_R_POSITION], 0xFF, + hook->time, This->dinput->evsequence++); + This->m_state.rgbButtons[1] = 0xFF; + break; + case WM_RBUTTONUP: + GEN_EVENT(This->offset_array[WINE_MOUSE_R_POSITION], 0x00, + hook->time, This->dinput->evsequence++); + This->m_state.rgbButtons[1] = 0x00; + break; + case WM_MBUTTONDOWN: + GEN_EVENT(This->offset_array[WINE_MOUSE_M_POSITION], 0xFF, + hook->time, This->dinput->evsequence++); + This->m_state.rgbButtons[2] = 0xFF; + break; + case WM_MBUTTONUP: + GEN_EVENT(This->offset_array[WINE_MOUSE_M_POSITION], 0x00, + hook->time, This->dinput->evsequence++); + This->m_state.rgbButtons[2] = 0x00; + break; + case WM_MOUSEWHEEL: + wdata = (short)HIWORD(hook->mouseData); + GEN_EVENT(This->offset_array[WINE_MOUSE_Z_POSITION], wdata, + hook->time, This->dinput->evsequence++); + This->m_state.lZ += wdata; + break; } - - TRACE("(X: %ld - Y: %ld L: %02x M: %02x R: %02x)\n", - This->m_state.lX, This->m_state.lY, - This->m_state.rgbButtons[0], This->m_state.rgbButtons[2], This->m_state.rgbButtons[1]); - -end: - LeaveCriticalSection(&(This->crit)); - - if (dwCoop & DISCL_NONEXCLUSIVE) - { /* pass the events down to previous handlers (e.g. win32 input) */ - ret = CallNextHookEx( This->hook, code, wparam, lparam ); - } - else ret = 1; /* ignore message */ - return ret; + + TRACE("(X: %ld - Y: %ld L: %02x M: %02x R: %02x)\n", + This->m_state.lX, This->m_state.lY, + This->m_state.rgbButtons[0], This->m_state.rgbButtons[2], This->m_state.rgbButtons[1]); + + end: + LeaveCriticalSection(&(This->crit)); + + if (dwCoop & DISCL_NONEXCLUSIVE) { + /* Pass the events down to previous handlers (e.g. win32 input) */ + ret = CallNextHookEx( This->hook, code, wparam, lparam ); + } else { + /* Ignore message */ + ret = 1; + } + return ret; } -static void dinput_window_check(SysMouseImpl* This) -{ - RECT rect; - DWORD centerX, centerY; - - /* make sure the window hasn't moved */ - GetWindowRect(This->win, &rect); - centerX = (rect.right - rect.left) / 2; - centerY = (rect.bottom - rect.top ) / 2; - if (This->win_centerX != centerX || This->win_centerY != centerY) { - This->win_centerX = centerX; - This->win_centerY = centerY; - } - This->mapped_center.x = This->win_centerX; - This->mapped_center.y = This->win_centerY; - MapWindowPoints(This->win, HWND_DESKTOP, &This->mapped_center, 1); +static void dinput_window_check(SysMouseImpl* This) { + RECT rect; + DWORD centerX, centerY; + + /* make sure the window hasn't moved */ + GetWindowRect(This->win, &rect); + centerX = (rect.right - rect.left) / 2; + centerY = (rect.bottom - rect.top ) / 2; + if (This->win_centerX != centerX || This->win_centerY != centerY) { + This->win_centerX = centerX; + This->win_centerY = centerY; + } + This->mapped_center.x = This->win_centerX; + This->mapped_center.y = This->win_centerY; + MapWindowPoints(This->win, HWND_DESKTOP, &This->mapped_center, 1); } @@ -577,61 +571,62 @@ static void dinput_window_check(SysMouseImpl* This) */ static HRESULT WINAPI SysMouseAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface) { - ICOM_THIS(SysMouseImpl,iface); - RECT rect; - - TRACE("(this=%p)\n",This); - - if (This->acquired == 0) { - POINT point; - - /* Store (in a global variable) the current lock */ - current_lock = (IDirectInputDevice8A*)This; - - /* Init the mouse state */ - if (This->absolute) { - GetCursorPos( &point ); - This->m_state.lX = point.x; - This->m_state.lY = point.y; - This->prevX = point.x; - This->prevY = point.y; - } else { - This->m_state.lX = 0; - This->m_state.lY = 0; - } - This->m_state.lZ = 0; - This->m_state.rgbButtons[0] = (GetKeyState(VK_LBUTTON) ? 0xFF : 0x00); - This->m_state.rgbButtons[1] = (GetKeyState(VK_MBUTTON) ? 0xFF : 0x00); - This->m_state.rgbButtons[2] = (GetKeyState(VK_RBUTTON) ? 0xFF : 0x00); - - /* Install our mouse hook */ - if (This->dwCoopLevel & DISCL_EXCLUSIVE) - ShowCursor(FALSE); /* hide cursor */ - This->hook = SetWindowsHookExA( WH_MOUSE_LL, dinput_mouse_hook, DINPUT_instance, 0 ); - - /* Get the window dimension and find the center */ - GetWindowRect(This->win, &rect); - This->win_centerX = (rect.right - rect.left) / 2; - This->win_centerY = (rect.bottom - rect.top ) / 2; - - /* Warp the mouse to the center of the window */ - if (This->absolute == 0) { - This->mapped_center.x = This->win_centerX; - This->mapped_center.y = This->win_centerY; - MapWindowPoints(This->win, HWND_DESKTOP, &This->mapped_center, 1); - TRACE("Warping mouse to %ld - %ld\n", This->mapped_center.x, This->mapped_center.y); - SetCursorPos( This->mapped_center.x, This->mapped_center.y ); + ICOM_THIS(SysMouseImpl,iface); + RECT rect; + + TRACE("(this=%p)\n",This); + + if (This->acquired == 0) { + POINT point; + + /* Store (in a global variable) the current lock */ + current_lock = (IDirectInputDevice8A*)This; + + /* Init the mouse state */ + GetCursorPos( &point ); + if (This->absolute) { + This->m_state.lX = point.x; + This->m_state.lY = point.y; + This->prevX = point.x; + This->prevY = point.y; + } else { + This->m_state.lX = 0; + This->m_state.lY = 0; + This->org_coords = point; + } + This->m_state.lZ = 0; + This->m_state.rgbButtons[0] = ((GetKeyState(VK_LBUTTON) & 0x80) ? 0xFF : 0x00); + This->m_state.rgbButtons[1] = ((GetKeyState(VK_RBUTTON) & 0x80) ? 0xFF : 0x00); + This->m_state.rgbButtons[2] = ((GetKeyState(VK_MBUTTON) & 0x80) ? 0xFF : 0x00); + + /* Install our mouse hook */ + if (This->dwCoopLevel & DISCL_EXCLUSIVE) + ShowCursor(FALSE); /* hide cursor */ + This->hook = SetWindowsHookExA( WH_MOUSE_LL, dinput_mouse_hook, DINPUT_instance, 0 ); + + /* Get the window dimension and find the center */ + GetWindowRect(This->win, &rect); + This->win_centerX = (rect.right - rect.left) / 2; + This->win_centerY = (rect.bottom - rect.top ) / 2; + + /* Warp the mouse to the center of the window */ + if (This->absolute == 0) { + This->mapped_center.x = This->win_centerX; + This->mapped_center.y = This->win_centerY; + MapWindowPoints(This->win, HWND_DESKTOP, &This->mapped_center, 1); + TRACE("Warping mouse to %ld - %ld\n", This->mapped_center.x, This->mapped_center.y); + SetCursorPos( This->mapped_center.x, This->mapped_center.y ); #ifdef MOUSE_HACK - This->need_warp = WARP_DONE; + This->need_warp = WARP_DONE; #else - This->need_warp = WARP_STARTED; + This->need_warp = WARP_STARTED; #endif + } + + This->acquired = 1; + return DI_OK; } - - This->acquired = 1; - return DI_OK; - } - return S_FALSE; + return S_FALSE; } /****************************************************************************** @@ -640,27 +635,33 @@ static HRESULT WINAPI SysMouseAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface) static HRESULT WINAPI SysMouseAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface) { ICOM_THIS(SysMouseImpl,iface); - + TRACE("(this=%p)\n",This); + + if (This->acquired) { + /* Reinstall previous mouse event handler */ + if (This->hook) { + UnhookWindowsHookEx( This->hook ); + This->hook = 0; - if (This->acquired) - { - /* Reinstall previous mouse event handler */ - if (This->hook) { - UnhookWindowsHookEx( This->hook ); - This->hook = 0; - if (This->dwCoopLevel & DISCL_EXCLUSIVE) - ShowCursor(TRUE); /* show cursor */ + if (This->dwCoopLevel & DISCL_EXCLUSIVE) + ShowCursor(TRUE); /* show cursor */ } - + /* No more locks */ current_lock = NULL; - + /* Unacquire device */ This->acquired = 0; - } - else + + /* And put the mouse cursor back where it was at acquire time */ + if (This->absolute == 0) { + TRACE(" warping mouse back to (%ld , %ld)\n", This->org_coords.x, This->org_coords.y); + SetCursorPos(This->org_coords.x, This->org_coords.y); + } + } else { return DI_NOEFFECT; + } return DI_OK; } @@ -674,118 +675,119 @@ static HRESULT WINAPI SysMouseAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface) static HRESULT WINAPI SysMouseAImpl_GetDeviceState( LPDIRECTINPUTDEVICE8A iface,DWORD len,LPVOID ptr ) { - ICOM_THIS(SysMouseImpl,iface); - - EnterCriticalSection(&(This->crit)); - TRACE("(this=%p,0x%08lx,%p): \n",This,len,ptr); - - /* Copy the current mouse state */ - fill_DataFormat(ptr, &(This->m_state), This->wine_df); - - /* Initialize the buffer when in relative mode */ - if (This->absolute == 0) { - This->m_state.lX = 0; - This->m_state.lY = 0; - This->m_state.lZ = 0; - } - - /* Check if we need to do a mouse warping */ - if (This->need_warp == WARP_NEEDED) { - dinput_window_check(This); - TRACE("Warping mouse to %ld - %ld\n", This->mapped_center.x, This->mapped_center.y); - SetCursorPos( This->mapped_center.x, This->mapped_center.y ); - + ICOM_THIS(SysMouseImpl,iface); + + EnterCriticalSection(&(This->crit)); + TRACE("(this=%p,0x%08lx,%p): \n",This,len,ptr); + + /* Copy the current mouse state */ + fill_DataFormat(ptr, &(This->m_state), This->wine_df); + + /* Initialize the buffer when in relative mode */ + if (This->absolute == 0) { + This->m_state.lX = 0; + This->m_state.lY = 0; + This->m_state.lZ = 0; + } + + /* Check if we need to do a mouse warping */ + if (This->need_warp == WARP_NEEDED) { + dinput_window_check(This); + TRACE("Warping mouse to %ld - %ld\n", This->mapped_center.x, This->mapped_center.y); + SetCursorPos( This->mapped_center.x, This->mapped_center.y ); + #ifdef MOUSE_HACK - This->need_warp = WARP_DONE; + This->need_warp = WARP_DONE; #else - This->need_warp = WARP_STARTED; + This->need_warp = WARP_STARTED; #endif - } - - LeaveCriticalSection(&(This->crit)); - - TRACE("(X: %ld - Y: %ld L: %02x M: %02x R: %02x)\n", - This->m_state.lX, This->m_state.lY, - This->m_state.rgbButtons[0], This->m_state.rgbButtons[2], This->m_state.rgbButtons[1]); - - return DI_OK; + } + + LeaveCriticalSection(&(This->crit)); + + TRACE("(X: %ld - Y: %ld - Z: %ld L: %02x M: %02x R: %02x)\n", + This->m_state.lX, This->m_state.lY, This->m_state.lZ, + This->m_state.rgbButtons[0], This->m_state.rgbButtons[2], This->m_state.rgbButtons[1]); + + return DI_OK; } /****************************************************************************** * GetDeviceState : gets buffered input data. */ static HRESULT WINAPI SysMouseAImpl_GetDeviceData(LPDIRECTINPUTDEVICE8A iface, - DWORD dodsize, - LPDIDEVICEOBJECTDATA dod, - LPDWORD entries, - DWORD flags + DWORD dodsize, + LPDIDEVICEOBJECTDATA dod, + LPDWORD entries, + DWORD flags ) { - ICOM_THIS(SysMouseImpl,iface); - DWORD len, nqtail; - - TRACE("(%p)->(dods=%ld,entries=%ld,fl=0x%08lx)\n",This,dodsize,*entries,flags); - - if (This->acquired == 0) { - WARN(" application tries to get data from an unacquired device !\n"); - return DIERR_NOTACQUIRED; - } - - EnterCriticalSection(&(This->crit)); - - len = ((This->queue_head < This->queue_tail) ? This->queue_len : 0) - + (This->queue_head - This->queue_tail); - if (len > *entries) len = *entries; - - if (dod == NULL) { - if (len) - TRACE("Application discarding %ld event(s).\n", len); - - *entries = len; - nqtail = This->queue_tail + len; - while (nqtail >= This->queue_len) nqtail -= This->queue_len; - } else { - if (dodsize < sizeof(DIDEVICEOBJECTDATA)) { - ERR("Wrong structure size !\n"); - LeaveCriticalSection(&(This->crit)); - return DIERR_INVALIDPARAM; + ICOM_THIS(SysMouseImpl,iface); + DWORD len, nqtail; + + TRACE("(%p)->(dods=%ld,entries=%ld,fl=0x%08lx)\n",This,dodsize,*entries,flags); + + if (This->acquired == 0) { + WARN(" application tries to get data from an unacquired device !\n"); + return DIERR_NOTACQUIRED; } - - if (len) - TRACE("Application retrieving %ld event(s).\n", len); - - *entries = 0; - nqtail = This->queue_tail; - while (len) { - DWORD span = ((This->queue_head < nqtail) ? This->queue_len : This->queue_head) - - nqtail; - if (span > len) span = len; - /* Copy the buffered data into the application queue */ - memcpy(dod + *entries, This->data_queue + nqtail, span * dodsize); - /* Advance position */ - nqtail += span; - if (nqtail >= This->queue_len) nqtail -= This->queue_len; - *entries += span; - len -= span; + + EnterCriticalSection(&(This->crit)); + + len = ((This->queue_head < This->queue_tail) ? This->queue_len : 0) + + (This->queue_head - This->queue_tail); + if (len > *entries) len = *entries; + + if (dod == NULL) { + if (len) + TRACE("Application discarding %ld event(s).\n", len); + + *entries = len; + nqtail = This->queue_tail + len; + while (nqtail >= This->queue_len) nqtail -= This->queue_len; + } else { + if (dodsize < sizeof(DIDEVICEOBJECTDATA)) { + ERR("Wrong structure size !\n"); + LeaveCriticalSection(&(This->crit)); + return DIERR_INVALIDPARAM; + } + + if (len) + TRACE("Application retrieving %ld event(s).\n", len); + + *entries = 0; + nqtail = This->queue_tail; + while (len) { + DWORD span = ((This->queue_head < nqtail) ? This->queue_len : This->queue_head) - nqtail; + if (span > len) + span = len; + + /* Copy the buffered data into the application queue */ + memcpy(dod + *entries, This->data_queue + nqtail, span * dodsize); + /* Advance position */ + nqtail += span; + if (nqtail >= This->queue_len) nqtail -= This->queue_len; + *entries += span; + len -= span; + } } - } - if (!(flags & DIGDD_PEEK)) - This->queue_tail = nqtail; - - LeaveCriticalSection(&(This->crit)); - - /* Check if we need to do a mouse warping */ - if (This->need_warp == WARP_NEEDED) { - dinput_window_check(This); - TRACE("Warping mouse to %ld - %ld\n", This->mapped_center.x, This->mapped_center.y); - SetCursorPos( This->mapped_center.x, This->mapped_center.y ); - + if (!(flags & DIGDD_PEEK)) + This->queue_tail = nqtail; + + LeaveCriticalSection(&(This->crit)); + + /* Check if we need to do a mouse warping */ + if (This->need_warp == WARP_NEEDED) { + dinput_window_check(This); + TRACE("Warping mouse to %ld - %ld\n", This->mapped_center.x, This->mapped_center.y); + SetCursorPos( This->mapped_center.x, This->mapped_center.y ); + #ifdef MOUSE_HACK - This->need_warp = WARP_DONE; + This->need_warp = WARP_DONE; #else - This->need_warp = WARP_STARTED; + This->need_warp = WARP_STARTED; #endif - } - return DI_OK; + } + return DI_OK; } /****************************************************************************** @@ -795,37 +797,37 @@ static HRESULT WINAPI SysMouseAImpl_SetProperty(LPDIRECTINPUTDEVICE8A iface, REFGUID rguid, LPCDIPROPHEADER ph) { - ICOM_THIS(SysMouseImpl,iface); - - TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(rguid),ph); - - if (!HIWORD(rguid)) { - switch ((DWORD)rguid) { - case (DWORD) DIPROP_BUFFERSIZE: { - LPCDIPROPDWORD pd = (LPCDIPROPDWORD)ph; - - TRACE("buffersize = %ld\n",pd->dwData); - - This->data_queue = (LPDIDEVICEOBJECTDATA)HeapAlloc(GetProcessHeap(),0, - pd->dwData * sizeof(DIDEVICEOBJECTDATA)); - This->queue_head = 0; - This->queue_tail = 0; - This->queue_len = pd->dwData; - break; + ICOM_THIS(SysMouseImpl,iface); + + TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(rguid),ph); + + if (!HIWORD(rguid)) { + switch ((DWORD)rguid) { + case (DWORD) DIPROP_BUFFERSIZE: { + LPCDIPROPDWORD pd = (LPCDIPROPDWORD)ph; + + TRACE("buffersize = %ld\n",pd->dwData); + + This->data_queue = (LPDIDEVICEOBJECTDATA)HeapAlloc(GetProcessHeap(),0, + pd->dwData * sizeof(DIDEVICEOBJECTDATA)); + This->queue_head = 0; + This->queue_tail = 0; + This->queue_len = pd->dwData; + break; + } + case (DWORD) DIPROP_AXISMODE: { + LPCDIPROPDWORD pd = (LPCDIPROPDWORD)ph; + This->absolute = !(pd->dwData); + TRACE("Using %s coordinates mode now\n", This->absolute ? "absolute" : "relative"); + break; + } + default: + FIXME("Unknown type %ld (%s)\n",(DWORD)rguid,debugstr_guid(rguid)); + break; + } } - case (DWORD) DIPROP_AXISMODE: { - LPCDIPROPDWORD pd = (LPCDIPROPDWORD)ph; - This->absolute = !(pd->dwData); - TRACE("Using %s coordinates mode now\n", This->absolute ? "absolute" : "relative"); - break; - } - default: - FIXME("Unknown type %ld (%s)\n",(DWORD)rguid,debugstr_guid(rguid)); - break; - } - } - - return DI_OK; + + return DI_OK; } /****************************************************************************** @@ -835,57 +837,56 @@ static HRESULT WINAPI SysMouseAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface, REFGUID rguid, LPDIPROPHEADER pdiph) { - ICOM_THIS(SysMouseImpl,iface); - - TRACE("(this=%p,%s,%p): stub!\n", - iface, debugstr_guid(rguid), pdiph); - - if (TRACE_ON(dinput)) - _dump_DIPROPHEADER(pdiph); - - if (!HIWORD(rguid)) { - switch ((DWORD)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; + ICOM_THIS(SysMouseImpl,iface); + + TRACE("(this=%p,%s,%p): stub!\n", + iface, debugstr_guid(rguid), pdiph); + + if (TRACE_ON(dinput)) + _dump_DIPROPHEADER(pdiph); + + if (!HIWORD(rguid)) { + switch ((DWORD)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 %ld (%s)\n",(DWORD)rguid,debugstr_guid(rguid)); + break; + } } - - break; - } - - default: - FIXME("Unknown type %ld (%s)\n",(DWORD)rguid,debugstr_guid(rguid)); - break; - } - } - - - return DI_OK; + + return DI_OK; } @@ -895,13 +896,13 @@ static HRESULT WINAPI SysMouseAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface, */ static HRESULT WINAPI SysMouseAImpl_SetEventNotification(LPDIRECTINPUTDEVICE8A iface, HANDLE hnd) { - ICOM_THIS(SysMouseImpl,iface); - - TRACE("(this=%p,0x%08lx)\n",This,(DWORD)hnd); - - This->hEvent = hnd; - - return DI_OK; + ICOM_THIS(SysMouseImpl,iface); + + TRACE("(this=%p,0x%08lx)\n",This,(DWORD)hnd); + + This->hEvent = hnd; + + return DI_OK; } /****************************************************************************** @@ -911,30 +912,30 @@ static HRESULT WINAPI SysMouseAImpl_GetCapabilities( LPDIRECTINPUTDEVICE8A iface, LPDIDEVCAPS lpDIDevCaps) { - ICOM_THIS(SysMouseImpl,iface); - - TRACE("(this=%p,%p)\n",This,lpDIDevCaps); - - if (lpDIDevCaps->dwSize == sizeof(DIDEVCAPS)) { - lpDIDevCaps->dwFlags = DIDC_ATTACHED; - if (This->dinput->version >= 8) - lpDIDevCaps->dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL << 8); - else - lpDIDevCaps->dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL << 8); - lpDIDevCaps->dwAxes = 3; - lpDIDevCaps->dwButtons = 3; - lpDIDevCaps->dwPOVs = 0; - lpDIDevCaps->dwFFSamplePeriod = 0; - lpDIDevCaps->dwFFMinTimeResolution = 0; - lpDIDevCaps->dwFirmwareRevision = 100; - lpDIDevCaps->dwHardwareRevision = 100; - lpDIDevCaps->dwFFDriverVersion = 0; - } else { - /* DirectX 3.0 */ - FIXME("DirectX 3.0 not supported....\n"); - } - - return DI_OK; + ICOM_THIS(SysMouseImpl,iface); + + TRACE("(this=%p,%p)\n",This,lpDIDevCaps); + + if (lpDIDevCaps->dwSize == sizeof(DIDEVCAPS)) { + lpDIDevCaps->dwFlags = DIDC_ATTACHED; + if (This->dinput->version >= 8) + lpDIDevCaps->dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL << 8); + else + lpDIDevCaps->dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL << 8); + lpDIDevCaps->dwAxes = 3; + lpDIDevCaps->dwButtons = 3; + lpDIDevCaps->dwPOVs = 0; + lpDIDevCaps->dwFFSamplePeriod = 0; + lpDIDevCaps->dwFFMinTimeResolution = 0; + lpDIDevCaps->dwFirmwareRevision = 100; + lpDIDevCaps->dwHardwareRevision = 100; + lpDIDevCaps->dwFFDriverVersion = 0; + } else { + /* DirectX 3.0 */ + FIXME("DirectX 3.0 not supported....\n"); + } + + return DI_OK; } @@ -947,87 +948,87 @@ static HRESULT WINAPI SysMouseAImpl_EnumObjects( LPVOID lpvRef, DWORD dwFlags) { - ICOM_THIS(SysMouseImpl,iface); - DIDEVICEOBJECTINSTANCEA ddoi; + ICOM_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; + } - 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; + 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; } static HRESULT WINAPI SysMouseWImpl_EnumObjects(LPDIRECTINPUTDEVICE8W iface, LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID lpvRef,DWORD dwFlags) { - ICOM_THIS(SysMouseImpl,iface); - - device_enumobjects_AtoWcb_data data; - - data.lpCallBack = lpCallback; - data.lpvRef = lpvRef; - - return SysMouseAImpl_EnumObjects((LPDIRECTINPUTDEVICE8A) This, (LPDIENUMDEVICEOBJECTSCALLBACKA) DIEnumDevicesCallbackAtoW, (LPVOID) &data, dwFlags); + ICOM_THIS(SysMouseImpl,iface); + + device_enumobjects_AtoWcb_data data; + + data.lpCallBack = lpCallback; + data.lpvRef = lpvRef; + + return SysMouseAImpl_EnumObjects((LPDIRECTINPUTDEVICE8A) This, (LPDIENUMDEVICEOBJECTSCALLBACKA) DIEnumDevicesCallbackAtoW, (LPVOID) &data, dwFlags); } /****************************************************************************** @@ -1068,39 +1069,39 @@ static HRESULT WINAPI SysMouseWImpl_GetDeviceInfo(LPDIRECTINPUTDEVICE8W iface, L static ICOM_VTABLE(IDirectInputDevice8A) SysMouseAvt = { - ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE - IDirectInputDevice2AImpl_QueryInterface, - IDirectInputDevice2AImpl_AddRef, - SysMouseAImpl_Release, - SysMouseAImpl_GetCapabilities, - SysMouseAImpl_EnumObjects, - SysMouseAImpl_GetProperty, - SysMouseAImpl_SetProperty, - SysMouseAImpl_Acquire, - SysMouseAImpl_Unacquire, - SysMouseAImpl_GetDeviceState, - SysMouseAImpl_GetDeviceData, - SysMouseAImpl_SetDataFormat, - SysMouseAImpl_SetEventNotification, - SysMouseAImpl_SetCooperativeLevel, - IDirectInputDevice2AImpl_GetObjectInfo, - SysMouseAImpl_GetDeviceInfo, - IDirectInputDevice2AImpl_RunControlPanel, - IDirectInputDevice2AImpl_Initialize, - IDirectInputDevice2AImpl_CreateEffect, - IDirectInputDevice2AImpl_EnumEffects, - IDirectInputDevice2AImpl_GetEffectInfo, - IDirectInputDevice2AImpl_GetForceFeedbackState, - IDirectInputDevice2AImpl_SendForceFeedbackCommand, - IDirectInputDevice2AImpl_EnumCreatedEffectObjects, - IDirectInputDevice2AImpl_Escape, - IDirectInputDevice2AImpl_Poll, - IDirectInputDevice2AImpl_SendDeviceData, - IDirectInputDevice7AImpl_EnumEffectsInFile, - IDirectInputDevice7AImpl_WriteEffectToFile, - IDirectInputDevice8AImpl_BuildActionMap, - IDirectInputDevice8AImpl_SetActionMap, - IDirectInputDevice8AImpl_GetImageInfo + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectInputDevice2AImpl_QueryInterface, + IDirectInputDevice2AImpl_AddRef, + SysMouseAImpl_Release, + SysMouseAImpl_GetCapabilities, + SysMouseAImpl_EnumObjects, + SysMouseAImpl_GetProperty, + SysMouseAImpl_SetProperty, + SysMouseAImpl_Acquire, + SysMouseAImpl_Unacquire, + SysMouseAImpl_GetDeviceState, + SysMouseAImpl_GetDeviceData, + SysMouseAImpl_SetDataFormat, + SysMouseAImpl_SetEventNotification, + SysMouseAImpl_SetCooperativeLevel, + IDirectInputDevice2AImpl_GetObjectInfo, + SysMouseAImpl_GetDeviceInfo, + IDirectInputDevice2AImpl_RunControlPanel, + IDirectInputDevice2AImpl_Initialize, + IDirectInputDevice2AImpl_CreateEffect, + IDirectInputDevice2AImpl_EnumEffects, + IDirectInputDevice2AImpl_GetEffectInfo, + IDirectInputDevice2AImpl_GetForceFeedbackState, + IDirectInputDevice2AImpl_SendForceFeedbackCommand, + IDirectInputDevice2AImpl_EnumCreatedEffectObjects, + IDirectInputDevice2AImpl_Escape, + IDirectInputDevice2AImpl_Poll, + IDirectInputDevice2AImpl_SendDeviceData, + IDirectInputDevice7AImpl_EnumEffectsInFile, + IDirectInputDevice7AImpl_WriteEffectToFile, + IDirectInputDevice8AImpl_BuildActionMap, + IDirectInputDevice8AImpl_SetActionMap, + IDirectInputDevice8AImpl_GetImageInfo }; #if !defined(__STRICT_ANSI__) && defined(__GNUC__) @@ -1111,38 +1112,38 @@ static ICOM_VTABLE(IDirectInputDevice8A) SysMouseAvt = static ICOM_VTABLE(IDirectInputDevice8W) SysMouseWvt = { - ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE - IDirectInputDevice2WImpl_QueryInterface, - XCAST(AddRef)IDirectInputDevice2AImpl_AddRef, - XCAST(Release)SysMouseAImpl_Release, - XCAST(GetCapabilities)SysMouseAImpl_GetCapabilities, - SysMouseWImpl_EnumObjects, - XCAST(GetProperty)SysMouseAImpl_GetProperty, - XCAST(SetProperty)SysMouseAImpl_SetProperty, - XCAST(Acquire)SysMouseAImpl_Acquire, - XCAST(Unacquire)SysMouseAImpl_Unacquire, - XCAST(GetDeviceState)SysMouseAImpl_GetDeviceState, - XCAST(GetDeviceData)SysMouseAImpl_GetDeviceData, - XCAST(SetDataFormat)SysMouseAImpl_SetDataFormat, - XCAST(SetEventNotification)SysMouseAImpl_SetEventNotification, - XCAST(SetCooperativeLevel)SysMouseAImpl_SetCooperativeLevel, - IDirectInputDevice2WImpl_GetObjectInfo, - SysMouseWImpl_GetDeviceInfo, - XCAST(RunControlPanel)IDirectInputDevice2AImpl_RunControlPanel, - XCAST(Initialize)IDirectInputDevice2AImpl_Initialize, - XCAST(CreateEffect)IDirectInputDevice2AImpl_CreateEffect, - IDirectInputDevice2WImpl_EnumEffects, - IDirectInputDevice2WImpl_GetEffectInfo, - XCAST(GetForceFeedbackState)IDirectInputDevice2AImpl_GetForceFeedbackState, - XCAST(SendForceFeedbackCommand)IDirectInputDevice2AImpl_SendForceFeedbackCommand, - XCAST(EnumCreatedEffectObjects)IDirectInputDevice2AImpl_EnumCreatedEffectObjects, - XCAST(Escape)IDirectInputDevice2AImpl_Escape, - XCAST(Poll)IDirectInputDevice2AImpl_Poll, - XCAST(SendDeviceData)IDirectInputDevice2AImpl_SendDeviceData, - IDirectInputDevice7WImpl_EnumEffectsInFile, - IDirectInputDevice7WImpl_WriteEffectToFile, - IDirectInputDevice8WImpl_BuildActionMap, - IDirectInputDevice8WImpl_SetActionMap, - IDirectInputDevice8WImpl_GetImageInfo + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectInputDevice2WImpl_QueryInterface, + XCAST(AddRef)IDirectInputDevice2AImpl_AddRef, + XCAST(Release)SysMouseAImpl_Release, + XCAST(GetCapabilities)SysMouseAImpl_GetCapabilities, + SysMouseWImpl_EnumObjects, + XCAST(GetProperty)SysMouseAImpl_GetProperty, + XCAST(SetProperty)SysMouseAImpl_SetProperty, + XCAST(Acquire)SysMouseAImpl_Acquire, + XCAST(Unacquire)SysMouseAImpl_Unacquire, + XCAST(GetDeviceState)SysMouseAImpl_GetDeviceState, + XCAST(GetDeviceData)SysMouseAImpl_GetDeviceData, + XCAST(SetDataFormat)SysMouseAImpl_SetDataFormat, + XCAST(SetEventNotification)SysMouseAImpl_SetEventNotification, + XCAST(SetCooperativeLevel)SysMouseAImpl_SetCooperativeLevel, + IDirectInputDevice2WImpl_GetObjectInfo, + SysMouseWImpl_GetDeviceInfo, + XCAST(RunControlPanel)IDirectInputDevice2AImpl_RunControlPanel, + XCAST(Initialize)IDirectInputDevice2AImpl_Initialize, + XCAST(CreateEffect)IDirectInputDevice2AImpl_CreateEffect, + IDirectInputDevice2WImpl_EnumEffects, + IDirectInputDevice2WImpl_GetEffectInfo, + XCAST(GetForceFeedbackState)IDirectInputDevice2AImpl_GetForceFeedbackState, + XCAST(SendForceFeedbackCommand)IDirectInputDevice2AImpl_SendForceFeedbackCommand, + XCAST(EnumCreatedEffectObjects)IDirectInputDevice2AImpl_EnumCreatedEffectObjects, + XCAST(Escape)IDirectInputDevice2AImpl_Escape, + XCAST(Poll)IDirectInputDevice2AImpl_Poll, + XCAST(SendDeviceData)IDirectInputDevice2AImpl_SendDeviceData, + IDirectInputDevice7WImpl_EnumEffectsInFile, + IDirectInputDevice7WImpl_WriteEffectToFile, + IDirectInputDevice8WImpl_BuildActionMap, + IDirectInputDevice8WImpl_SetActionMap, + IDirectInputDevice8WImpl_GetImageInfo }; #undef XCAST