dinput: Implement IDirectInputDevice_GetImageInfo WtoA conversion.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Rémi Bernon 2021-05-27 10:50:00 +02:00 committed by Alexandre Julliard
parent 58694d1f75
commit 5df60ff2ba
2 changed files with 57 additions and 13 deletions

View file

@ -73,6 +73,42 @@ static void dieffectinfo_wtoa( const DIEFFECTINFOW *in, DIEFFECTINFOA *out )
WideCharToMultiByte( CP_ACP, 0, in->tszName, -1, out->tszName, sizeof(out->tszName), NULL, NULL );
}
static void dideviceimageinfo_wtoa( const DIDEVICEIMAGEINFOW *in, DIDEVICEIMAGEINFOA *out )
{
WideCharToMultiByte( CP_ACP, 0, in->tszImagePath, -1, out->tszImagePath,
sizeof(out->tszImagePath), NULL, NULL );
out->dwFlags = in->dwFlags;
out->dwViewID = in->dwViewID;
out->rcOverlay = in->rcOverlay;
out->dwObjID = in->dwObjID;
out->dwcValidPts = in->dwcValidPts;
out->rgptCalloutLine[0] = in->rgptCalloutLine[0];
out->rgptCalloutLine[1] = in->rgptCalloutLine[1];
out->rgptCalloutLine[2] = in->rgptCalloutLine[2];
out->rgptCalloutLine[3] = in->rgptCalloutLine[3];
out->rgptCalloutLine[4] = in->rgptCalloutLine[4];
out->rcCalloutRect = in->rcCalloutRect;
out->dwTextAlign = in->dwTextAlign;
}
static void dideviceimageinfoheader_wtoa( const DIDEVICEIMAGEINFOHEADERW *in, DIDEVICEIMAGEINFOHEADERA *out )
{
DWORD i;
out->dwcViews = in->dwcViews;
out->dwcButtons = in->dwcButtons;
out->dwcAxes = in->dwcAxes;
out->dwcPOVs = in->dwcPOVs;
out->dwBufferUsed = 0;
for (i = 0; i < in->dwBufferUsed / sizeof(DIDEVICEIMAGEINFOW); ++i)
{
dideviceimageinfo_wtoa( &in->lprgImageInfoArray[i], &out->lprgImageInfoArray[i] );
out->dwBufferUsed += sizeof(DIDEVICEIMAGEINFOA);
}
}
HRESULT WINAPI IDirectInputDevice2AImpl_QueryInterface( IDirectInputDevice8A *iface_a, REFIID iid, void **out )
{
IDirectInputDeviceImpl *impl = impl_from_IDirectInputDevice8A( iface_a );
@ -331,3 +367,24 @@ HRESULT WINAPI IDirectInputDevice7AImpl_WriteEffectToFile( IDirectInputDevice8A
return IDirectInputDevice8_WriteEffectToFile( iface_w, filename_w, entries, file_effect, flags );
}
HRESULT WINAPI IDirectInputDevice8AImpl_GetImageInfo( IDirectInputDevice8A *iface_a, DIDEVICEIMAGEINFOHEADERA *header_a )
{
IDirectInputDeviceImpl *impl = impl_from_IDirectInputDevice8A( iface_a );
IDirectInputDevice8W *iface_w = IDirectInputDevice8W_from_impl( impl );
DIDEVICEIMAGEINFOHEADERW header_w = {sizeof(header_w), sizeof(DIDEVICEIMAGEINFOW)};
HRESULT hr;
if (!header_a) return E_POINTER;
if (header_a->dwSize != sizeof(DIDEVICEIMAGEINFOHEADERA)) return DIERR_INVALIDPARAM;
if (header_a->dwSizeImageInfo != sizeof(DIDEVICEIMAGEINFOA)) return DIERR_INVALIDPARAM;
header_w.dwBufferSize = (header_a->dwBufferSize / sizeof(DIDEVICEIMAGEINFOA)) * sizeof(DIDEVICEIMAGEINFOW);
header_w.lprgImageInfoArray = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, header_w.dwBufferSize );
if (!header_w.lprgImageInfoArray) return DIERR_OUTOFMEMORY;
hr = IDirectInputDevice8_GetImageInfo( iface_w, &header_w );
dideviceimageinfoheader_wtoa( &header_w, header_a );
HeapFree( GetProcessHeap(), 0, header_w.lprgImageInfoArray );
return hr;
}

View file

@ -43,10 +43,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(dinput);
static inline IDirectInputDeviceImpl *impl_from_IDirectInputDevice8A(IDirectInputDevice8A *iface)
{
return CONTAINING_RECORD(iface, IDirectInputDeviceImpl, IDirectInputDevice8A_iface);
}
static inline IDirectInputDeviceImpl *impl_from_IDirectInputDevice8W(IDirectInputDevice8W *iface)
{
return CONTAINING_RECORD(iface, IDirectInputDeviceImpl, IDirectInputDevice8W_iface);
@ -1699,15 +1695,6 @@ HRESULT WINAPI IDirectInputDevice8WImpl_BuildActionMap(LPDIRECTINPUTDEVICE8W ifa
return DI_OK;
}
HRESULT WINAPI IDirectInputDevice8AImpl_GetImageInfo(LPDIRECTINPUTDEVICE8A iface,
LPDIDEVICEIMAGEINFOHEADERA lpdiDevImageInfoHeader)
{
IDirectInputDeviceImpl *This = impl_from_IDirectInputDevice8A(iface);
FIXME("(%p)->(%p): stub !\n", This, lpdiDevImageInfoHeader);
return DI_OK;
}
HRESULT WINAPI IDirectInputDevice8WImpl_GetImageInfo(LPDIRECTINPUTDEVICE8W iface,
LPDIDEVICEIMAGEINFOHEADERW lpdiDevImageInfoHeader)
{