dinput: Move IDirectInput7 WtoA wrappers to ansi.c.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
bfc805194f
commit
a6d3d74ff2
|
@ -49,6 +49,21 @@ static inline IDirectInputDevice8A *IDirectInputDevice8A_from_IDirectInputDevice
|
|||
return &CONTAINING_RECORD( iface, IDirectInputDeviceImpl, IDirectInputDevice8W_iface )->IDirectInputDevice8A_iface;
|
||||
}
|
||||
|
||||
static inline IDirectInputDeviceA *IDirectInputDeviceA_from_IDirectInputDeviceW( IDirectInputDeviceW *iface )
|
||||
{
|
||||
return (IDirectInputDeviceA *)IDirectInputDevice8A_from_IDirectInputDevice8W( (IDirectInputDevice8W *)iface );
|
||||
}
|
||||
|
||||
static IDirectInputImpl *impl_from_IDirectInput7A( IDirectInput7A *iface )
|
||||
{
|
||||
return CONTAINING_RECORD( iface, IDirectInputImpl, IDirectInput7A_iface );
|
||||
}
|
||||
|
||||
static IDirectInput7W *IDirectInput7W_from_impl( IDirectInputImpl *impl )
|
||||
{
|
||||
return &impl->IDirectInput7W_iface;
|
||||
}
|
||||
|
||||
static IDirectInputImpl *impl_from_IDirectInput8A( IDirectInput8A *iface )
|
||||
{
|
||||
return CONTAINING_RECORD( iface, IDirectInputImpl, IDirectInput8A_iface );
|
||||
|
@ -852,3 +867,110 @@ const IDirectInput8AVtbl dinput8_a_vtbl =
|
|||
dinput8_a_EnumDevicesBySemantics,
|
||||
dinput8_a_ConfigureDevices,
|
||||
};
|
||||
|
||||
static HRESULT WINAPI dinput7_a_QueryInterface( IDirectInput7A *iface_a, REFIID iid, void **out )
|
||||
{
|
||||
IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
|
||||
IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
|
||||
return IDirectInput7_QueryInterface( iface_w, iid, out );
|
||||
}
|
||||
|
||||
static ULONG WINAPI dinput7_a_AddRef( IDirectInput7A *iface_a )
|
||||
{
|
||||
IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
|
||||
IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
|
||||
return IDirectInput7_AddRef( iface_w );
|
||||
}
|
||||
|
||||
static ULONG WINAPI dinput7_a_Release( IDirectInput7A *iface_a )
|
||||
{
|
||||
IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
|
||||
IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
|
||||
return IDirectInput7_Release( iface_w );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dinput7_a_CreateDevice( IDirectInput7A *iface_a, REFGUID guid, IDirectInputDeviceA **out_a, IUnknown *outer )
|
||||
{
|
||||
IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
|
||||
IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
|
||||
IDirectInputDeviceW *out_w;
|
||||
HRESULT hr;
|
||||
|
||||
if (!out_a) return E_POINTER;
|
||||
|
||||
hr = IDirectInput7_CreateDevice( iface_w, guid, &out_w, outer );
|
||||
*out_a = IDirectInputDeviceA_from_IDirectInputDeviceW( out_w );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dinput7_a_EnumDevices( IDirectInput7A *iface_a, DWORD type, LPDIENUMDEVICESCALLBACKA callback,
|
||||
void *ref, DWORD flags )
|
||||
{
|
||||
struct enum_devices_wtoa_params params = {callback, ref};
|
||||
IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
|
||||
IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
|
||||
|
||||
if (!callback) return DIERR_INVALIDPARAM;
|
||||
|
||||
return IDirectInput7_EnumDevices( iface_w, type, enum_devices_wtoa_callback, ¶ms, flags );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dinput7_a_GetDeviceStatus( IDirectInput7A *iface_a, REFGUID instance_guid )
|
||||
{
|
||||
IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
|
||||
IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
|
||||
return IDirectInput7_GetDeviceStatus( iface_w, instance_guid );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dinput7_a_RunControlPanel( IDirectInput7A *iface_a, HWND owner, DWORD flags )
|
||||
{
|
||||
IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
|
||||
IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
|
||||
return IDirectInput7_RunControlPanel( iface_w, owner, flags );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dinput7_a_Initialize( IDirectInput7A *iface_a, HINSTANCE instance, DWORD version )
|
||||
{
|
||||
IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
|
||||
IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
|
||||
return IDirectInput7_Initialize( iface_w, instance, version );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dinput7_a_FindDevice( IDirectInput7A *iface_a, REFGUID guid, const char *name_a, GUID *instance_guid )
|
||||
{
|
||||
IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
|
||||
IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
|
||||
HRESULT hr;
|
||||
WCHAR *name_w;
|
||||
|
||||
if (FAILED(hr = string_atow( name_a, &name_w ))) return hr;
|
||||
|
||||
hr = IDirectInput7_FindDevice( iface_w, guid, name_w, instance_guid );
|
||||
HeapFree( GetProcessHeap(), 0, name_w );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dinput7_a_CreateDeviceEx( IDirectInput7A *iface_a, REFGUID guid, REFIID iid, void **out, IUnknown *outer )
|
||||
{
|
||||
IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
|
||||
IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
|
||||
return IDirectInput7_CreateDeviceEx( iface_w, guid, iid, out, outer );
|
||||
}
|
||||
|
||||
const IDirectInput7AVtbl dinput7_a_vtbl =
|
||||
{
|
||||
/*** IUnknown methods ***/
|
||||
dinput7_a_QueryInterface,
|
||||
dinput7_a_AddRef,
|
||||
dinput7_a_Release,
|
||||
/*** IDirectInputA methods ***/
|
||||
dinput7_a_CreateDevice,
|
||||
dinput7_a_EnumDevices,
|
||||
dinput7_a_GetDeviceStatus,
|
||||
dinput7_a_RunControlPanel,
|
||||
dinput7_a_Initialize,
|
||||
/*** IDirectInput2A methods ***/
|
||||
dinput7_a_FindDevice,
|
||||
/*** IDirectInput7A methods ***/
|
||||
dinput7_a_CreateDeviceEx,
|
||||
};
|
||||
|
|
|
@ -55,16 +55,10 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(dinput);
|
||||
|
||||
static const IDirectInput7AVtbl ddi7avt;
|
||||
static const IDirectInput7WVtbl ddi7wvt;
|
||||
static const IDirectInput8WVtbl ddi8wvt;
|
||||
static const IDirectInputJoyConfig8Vtbl JoyConfig8vt;
|
||||
|
||||
static inline IDirectInputImpl *impl_from_IDirectInput7A( IDirectInput7A *iface )
|
||||
{
|
||||
return CONTAINING_RECORD( iface, IDirectInputImpl, IDirectInput7A_iface );
|
||||
}
|
||||
|
||||
static inline IDirectInputImpl *impl_from_IDirectInput7W( IDirectInput7W *iface )
|
||||
{
|
||||
return CONTAINING_RECORD( iface, IDirectInputImpl, IDirectInput7W_iface );
|
||||
|
@ -136,7 +130,7 @@ static HRESULT create_directinput_instance(REFIID riid, LPVOID *ppDI, IDirectInp
|
|||
if (!This)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
This->IDirectInput7A_iface.lpVtbl = &ddi7avt;
|
||||
This->IDirectInput7A_iface.lpVtbl = &dinput7_a_vtbl;
|
||||
This->IDirectInput7W_iface.lpVtbl = &ddi7wvt;
|
||||
This->IDirectInput8A_iface.lpVtbl = &dinput8_a_vtbl;
|
||||
This->IDirectInput8W_iface.lpVtbl = &ddi8wvt;
|
||||
|
@ -361,47 +355,6 @@ __ASM_GLOBAL_FUNC( enum_callback_wrapper,
|
|||
#define enum_callback_wrapper(callback, instance, ref) (callback)((instance), (ref))
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* IDirectInputA_EnumDevices
|
||||
*/
|
||||
static HRESULT WINAPI IDirectInputAImpl_EnumDevices(
|
||||
LPDIRECTINPUT7A iface, DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback,
|
||||
LPVOID pvRef, DWORD dwFlags)
|
||||
{
|
||||
IDirectInputImpl *This = impl_from_IDirectInput7A(iface);
|
||||
DIDEVICEINSTANCEA devInstance;
|
||||
unsigned int i;
|
||||
int j;
|
||||
HRESULT r;
|
||||
|
||||
TRACE("(this=%p,0x%04x '%s',%p,%p,0x%04x)\n",
|
||||
This, dwDevType, _dump_DIDEVTYPE_value(dwDevType, This->dwVersion),
|
||||
lpCallback, pvRef, dwFlags);
|
||||
_dump_EnumDevices_dwFlags(dwFlags);
|
||||
|
||||
if (!lpCallback ||
|
||||
dwFlags & ~(DIEDFL_ATTACHEDONLY | DIEDFL_FORCEFEEDBACK | DIEDFL_INCLUDEALIASES | DIEDFL_INCLUDEPHANTOMS | DIEDFL_INCLUDEHIDDEN) ||
|
||||
(dwDevType > DI8DEVCLASS_GAMECTRL && dwDevType < DI8DEVTYPE_DEVICE) || dwDevType > DI8DEVTYPE_SUPPLEMENTAL)
|
||||
return DIERR_INVALIDPARAM;
|
||||
|
||||
if (!This->initialized)
|
||||
return DIERR_NOTINITIALIZED;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(dinput_devices); i++) {
|
||||
if (!dinput_devices[i]->enum_deviceA) continue;
|
||||
|
||||
TRACE(" Checking device %u ('%s')\n", i, dinput_devices[i]->name);
|
||||
for (j = 0, r = S_OK; SUCCEEDED(r); j++) {
|
||||
devInstance.dwSize = sizeof(devInstance);
|
||||
r = dinput_devices[i]->enum_deviceA(dwDevType, dwFlags, &devInstance, This->dwVersion, j);
|
||||
if (r == S_OK)
|
||||
if (enum_callback_wrapper(lpCallback, &devInstance, pvRef) == DIENUM_STOP)
|
||||
return S_OK;
|
||||
}
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
/******************************************************************************
|
||||
* IDirectInputW_EnumDevices
|
||||
*/
|
||||
|
@ -452,12 +405,6 @@ static ULONG WINAPI IDirectInputWImpl_AddRef( IDirectInput7W *iface )
|
|||
return ref;
|
||||
}
|
||||
|
||||
static ULONG WINAPI IDirectInputAImpl_AddRef( IDirectInput7A *iface )
|
||||
{
|
||||
IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
|
||||
return IDirectInput_AddRef( &This->IDirectInput7W_iface );
|
||||
}
|
||||
|
||||
static ULONG WINAPI IDirectInputWImpl_Release( IDirectInput7W *iface )
|
||||
{
|
||||
IDirectInputImpl *This = impl_from_IDirectInput7W( iface );
|
||||
|
@ -474,12 +421,6 @@ static ULONG WINAPI IDirectInputWImpl_Release( IDirectInput7W *iface )
|
|||
return ref;
|
||||
}
|
||||
|
||||
static ULONG WINAPI IDirectInputAImpl_Release( IDirectInput7A *iface )
|
||||
{
|
||||
IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
|
||||
return IDirectInput_Release( &This->IDirectInput7W_iface );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectInputWImpl_QueryInterface( IDirectInput7W *iface, REFIID riid, LPVOID *ppobj )
|
||||
{
|
||||
IDirectInputImpl *This = impl_from_IDirectInput7W( iface );
|
||||
|
@ -525,12 +466,6 @@ static HRESULT WINAPI IDirectInputWImpl_QueryInterface( IDirectInput7W *iface, R
|
|||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectInputAImpl_QueryInterface( IDirectInput7A *iface, REFIID riid, LPVOID *ppobj )
|
||||
{
|
||||
IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
|
||||
return IDirectInput_QueryInterface( &This->IDirectInput7W_iface, riid, ppobj );
|
||||
}
|
||||
|
||||
static LRESULT WINAPI di_em_win_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
|
||||
{
|
||||
IDirectInputDeviceImpl *dev;
|
||||
|
@ -655,12 +590,6 @@ static HRESULT WINAPI IDirectInputWImpl_Initialize( IDirectInput7W *iface, HINST
|
|||
return initialize_directinput_instance(This, version);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectInputAImpl_Initialize( IDirectInput7A *iface, HINSTANCE hinst, DWORD version )
|
||||
{
|
||||
IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
|
||||
return IDirectInput_Initialize( &This->IDirectInput7W_iface, hinst, version );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectInputWImpl_GetDeviceStatus( IDirectInput7W *iface, REFGUID rguid )
|
||||
{
|
||||
IDirectInputImpl *This = impl_from_IDirectInput7W( iface );
|
||||
|
@ -681,12 +610,6 @@ static HRESULT WINAPI IDirectInputWImpl_GetDeviceStatus( IDirectInput7W *iface,
|
|||
return DI_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectInputAImpl_GetDeviceStatus( IDirectInput7A *iface, REFGUID rguid )
|
||||
{
|
||||
IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
|
||||
return IDirectInput_GetDeviceStatus( &This->IDirectInput7W_iface, rguid );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectInputWImpl_RunControlPanel( IDirectInput7W *iface, HWND hwndOwner, DWORD dwFlags )
|
||||
{
|
||||
IDirectInputImpl *This = impl_from_IDirectInput7W( iface );
|
||||
|
@ -711,22 +634,6 @@ static HRESULT WINAPI IDirectInputWImpl_RunControlPanel( IDirectInput7W *iface,
|
|||
return DI_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectInputAImpl_RunControlPanel( IDirectInput7A *iface, HWND hwndOwner, DWORD dwFlags )
|
||||
{
|
||||
IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
|
||||
return IDirectInput_RunControlPanel( &This->IDirectInput7W_iface, hwndOwner, dwFlags );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectInput2AImpl_FindDevice(LPDIRECTINPUT7A iface, REFGUID rguid,
|
||||
LPCSTR pszName, LPGUID pguidInstance)
|
||||
{
|
||||
IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
|
||||
|
||||
FIXME( "(%p)->(%s, %s, %p): stub\n", This, debugstr_guid(rguid), pszName, pguidInstance );
|
||||
|
||||
return DI_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectInput2WImpl_FindDevice(LPDIRECTINPUT7W iface, REFGUID rguid,
|
||||
LPCWSTR pszName, LPGUID pguidInstance)
|
||||
{
|
||||
|
@ -764,16 +671,6 @@ static HRESULT create_device(IDirectInputImpl *This, REFGUID rguid, REFIID riid,
|
|||
return DIERR_DEVICENOTREG;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectInput7AImpl_CreateDeviceEx(LPDIRECTINPUT7A iface, REFGUID rguid,
|
||||
REFIID riid, LPVOID* pvOut, LPUNKNOWN lpUnknownOuter)
|
||||
{
|
||||
IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
|
||||
|
||||
TRACE("(%p)->(%s, %s, %p, %p)\n", This, debugstr_guid(rguid), debugstr_guid(riid), pvOut, lpUnknownOuter);
|
||||
|
||||
return create_device(This, rguid, riid, pvOut, FALSE);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectInput7WImpl_CreateDeviceEx(LPDIRECTINPUT7W iface, REFGUID rguid,
|
||||
REFIID riid, LPVOID* pvOut, LPUNKNOWN lpUnknownOuter)
|
||||
{
|
||||
|
@ -784,12 +681,6 @@ static HRESULT WINAPI IDirectInput7WImpl_CreateDeviceEx(LPDIRECTINPUT7W iface, R
|
|||
return create_device(This, rguid, riid, pvOut, TRUE);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectInputAImpl_CreateDevice(LPDIRECTINPUT7A iface, REFGUID rguid,
|
||||
LPDIRECTINPUTDEVICEA* pdev, LPUNKNOWN punk)
|
||||
{
|
||||
return IDirectInput7_CreateDeviceEx( iface, rguid, NULL, (LPVOID *)pdev, punk );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectInputWImpl_CreateDevice(LPDIRECTINPUT7W iface, REFGUID rguid,
|
||||
LPDIRECTINPUTDEVICEW* pdev, LPUNKNOWN punk)
|
||||
{
|
||||
|
@ -1175,19 +1066,6 @@ static HRESULT WINAPI JoyConfig8Impl_OpenAppStatusKey(IDirectInputJoyConfig8 *if
|
|||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const IDirectInput7AVtbl ddi7avt = {
|
||||
IDirectInputAImpl_QueryInterface,
|
||||
IDirectInputAImpl_AddRef,
|
||||
IDirectInputAImpl_Release,
|
||||
IDirectInputAImpl_CreateDevice,
|
||||
IDirectInputAImpl_EnumDevices,
|
||||
IDirectInputAImpl_GetDeviceStatus,
|
||||
IDirectInputAImpl_RunControlPanel,
|
||||
IDirectInputAImpl_Initialize,
|
||||
IDirectInput2AImpl_FindDevice,
|
||||
IDirectInput7AImpl_CreateDeviceEx
|
||||
};
|
||||
|
||||
static const IDirectInput7WVtbl ddi7wvt = {
|
||||
IDirectInputWImpl_QueryInterface,
|
||||
IDirectInputWImpl_AddRef,
|
||||
|
|
|
@ -49,6 +49,7 @@ struct IDirectInputImpl
|
|||
struct list device_players; /* device instance guid to player name */
|
||||
};
|
||||
|
||||
extern const IDirectInput7AVtbl dinput7_a_vtbl DECLSPEC_HIDDEN;
|
||||
extern const IDirectInput8AVtbl dinput8_a_vtbl DECLSPEC_HIDDEN;
|
||||
|
||||
/* Function called by all devices that Wine supports */
|
||||
|
|
Loading…
Reference in New Issue