Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
8109f839
Commit
8109f839
authored
May 27, 2021
by
Rémi Bernon
Committed by
Alexandre Julliard
May 27, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dinput: Factor out IDirectInputDevice_BuildActionMap WtoA conversions.
Signed-off-by:
Rémi Bernon
<
rbernon@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
27ea33ba
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
112 additions
and
96 deletions
+112
-96
ansi.c
dlls/dinput/ansi.c
+105
-0
device_private.h
dlls/dinput/device_private.h
+2
-0
joystick.c
dlls/dinput/joystick.c
+0
-30
joystick_linux.c
dlls/dinput/joystick_linux.c
+1
-1
joystick_linuxinput.c
dlls/dinput/joystick_linuxinput.c
+1
-1
joystick_osx.c
dlls/dinput/joystick_osx.c
+1
-1
joystick_private.h
dlls/dinput/joystick_private.h
+0
-1
keyboard.c
dlls/dinput/keyboard.c
+1
-31
mouse.c
dlls/dinput/mouse.c
+1
-31
No files found.
dlls/dinput/ansi.c
View file @
8109f839
...
...
@@ -90,6 +90,82 @@ static void dieffectinfo_wtoa( const DIEFFECTINFOW *in, DIEFFECTINFOA *out )
WideCharToMultiByte
(
CP_ACP
,
0
,
in
->
tszName
,
-
1
,
out
->
tszName
,
sizeof
(
out
->
tszName
),
NULL
,
NULL
);
}
static
HRESULT
string_atow
(
const
char
*
in
,
WCHAR
**
out
)
{
int
len
;
*
out
=
NULL
;
if
(
!
in
)
return
DI_OK
;
len
=
MultiByteToWideChar
(
CP_ACP
,
0
,
in
,
-
1
,
NULL
,
0
);
if
(
!
(
*
out
=
HeapAlloc
(
GetProcessHeap
(),
0
,
len
*
sizeof
(
WCHAR
)
)))
return
DIERR_OUTOFMEMORY
;
MultiByteToWideChar
(
CP_ACP
,
0
,
in
,
-
1
,
*
out
,
len
);
return
DI_OK
;
}
static
void
diactionformat_wtoa
(
const
DIACTIONFORMATW
*
in
,
DIACTIONFORMATA
*
out
)
{
DWORD
i
;
out
->
dwDataSize
=
in
->
dwDataSize
;
out
->
dwNumActions
=
in
->
dwNumActions
;
for
(
i
=
0
;
i
<
in
->
dwNumActions
;
++
i
)
{
out
->
rgoAction
[
i
].
uAppData
=
in
->
rgoAction
[
i
].
uAppData
;
out
->
rgoAction
[
i
].
dwSemantic
=
in
->
rgoAction
[
i
].
dwSemantic
;
out
->
rgoAction
[
i
].
dwFlags
=
in
->
rgoAction
[
i
].
dwFlags
;
out
->
rgoAction
[
i
].
guidInstance
=
in
->
rgoAction
[
i
].
guidInstance
;
out
->
rgoAction
[
i
].
dwObjID
=
in
->
rgoAction
[
i
].
dwObjID
;
out
->
rgoAction
[
i
].
dwHow
=
in
->
rgoAction
[
i
].
dwHow
;
out
->
rgoAction
[
i
].
lptszActionName
=
0
;
}
out
->
guidActionMap
=
in
->
guidActionMap
;
out
->
dwGenre
=
in
->
dwGenre
;
out
->
dwBufferSize
=
in
->
dwBufferSize
;
out
->
lAxisMin
=
in
->
lAxisMin
;
out
->
lAxisMax
=
in
->
lAxisMax
;
out
->
hInstString
=
in
->
hInstString
;
out
->
ftTimeStamp
=
in
->
ftTimeStamp
;
out
->
dwCRC
=
in
->
dwCRC
;
WideCharToMultiByte
(
CP_ACP
,
0
,
in
->
tszActionMap
,
-
1
,
out
->
tszActionMap
,
sizeof
(
out
->
tszActionMap
),
NULL
,
NULL
);
}
static
void
diactionformat_atow
(
const
DIACTIONFORMATA
*
in
,
DIACTIONFORMATW
*
out
)
{
DWORD
i
;
out
->
dwDataSize
=
in
->
dwDataSize
;
out
->
dwNumActions
=
in
->
dwNumActions
;
for
(
i
=
0
;
i
<
out
->
dwNumActions
;
++
i
)
{
out
->
rgoAction
[
i
].
uAppData
=
in
->
rgoAction
[
i
].
uAppData
;
out
->
rgoAction
[
i
].
dwSemantic
=
in
->
rgoAction
[
i
].
dwSemantic
;
out
->
rgoAction
[
i
].
dwFlags
=
in
->
rgoAction
[
i
].
dwFlags
;
out
->
rgoAction
[
i
].
guidInstance
=
in
->
rgoAction
[
i
].
guidInstance
;
out
->
rgoAction
[
i
].
dwObjID
=
in
->
rgoAction
[
i
].
dwObjID
;
out
->
rgoAction
[
i
].
dwHow
=
in
->
rgoAction
[
i
].
dwHow
;
out
->
rgoAction
[
i
].
lptszActionName
=
0
;
}
out
->
guidActionMap
=
in
->
guidActionMap
;
out
->
dwGenre
=
in
->
dwGenre
;
out
->
dwBufferSize
=
in
->
dwBufferSize
;
out
->
lAxisMin
=
in
->
lAxisMin
;
out
->
lAxisMax
=
in
->
lAxisMax
;
out
->
hInstString
=
in
->
hInstString
;
out
->
ftTimeStamp
=
in
->
ftTimeStamp
;
out
->
dwCRC
=
in
->
dwCRC
;
MultiByteToWideChar
(
CP_ACP
,
0
,
in
->
tszActionMap
,
-
1
,
out
->
tszActionMap
,
sizeof
(
out
->
tszActionMap
)
/
sizeof
(
WCHAR
)
);
}
static
void
dideviceimageinfo_wtoa
(
const
DIDEVICEIMAGEINFOW
*
in
,
DIDEVICEIMAGEINFOA
*
out
)
{
WideCharToMultiByte
(
CP_ACP
,
0
,
in
->
tszImagePath
,
-
1
,
out
->
tszImagePath
,
...
...
@@ -416,6 +492,35 @@ HRESULT WINAPI IDirectInputDevice7AImpl_WriteEffectToFile( IDirectInputDevice8A
return
IDirectInputDevice8_WriteEffectToFile
(
iface_w
,
filename_w
,
entries
,
file_effect
,
flags
);
}
HRESULT
WINAPI
IDirectInputDevice8AImpl_BuildActionMap
(
IDirectInputDevice8A
*
iface_a
,
DIACTIONFORMATA
*
format_a
,
const
char
*
username_a
,
DWORD
flags
)
{
IDirectInputDeviceImpl
*
impl
=
impl_from_IDirectInputDevice8A
(
iface_a
);
IDirectInputDevice8W
*
iface_w
=
IDirectInputDevice8W_from_impl
(
impl
);
DIACTIONFORMATW
format_w
=
{
sizeof
(
format_w
),
sizeof
(
DIACTIONW
)};
HRESULT
hr
;
WCHAR
*
username_w
;
if
(
!
format_a
)
return
E_POINTER
;
if
(
format_a
->
dwSize
!=
sizeof
(
DIACTIONFORMATA
))
return
DIERR_INVALIDPARAM
;
if
(
format_a
->
dwActionSize
!=
sizeof
(
DIACTIONA
))
return
DIERR_INVALIDPARAM
;
if
(
FAILED
(
hr
=
string_atow
(
username_a
,
&
username_w
)))
return
hr
;
format_w
.
dwNumActions
=
format_a
->
dwNumActions
;
format_w
.
rgoAction
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
format_a
->
dwNumActions
*
sizeof
(
DIACTIONW
)
);
if
(
!
format_w
.
rgoAction
)
hr
=
DIERR_OUTOFMEMORY
;
else
{
diactionformat_atow
(
format_a
,
&
format_w
);
hr
=
IDirectInputDevice8_BuildActionMap
(
iface_w
,
&
format_w
,
username_w
,
flags
);
diactionformat_wtoa
(
&
format_w
,
format_a
);
HeapFree
(
GetProcessHeap
(),
0
,
format_w
.
rgoAction
);
}
HeapFree
(
GetProcessHeap
(),
0
,
username_w
);
return
hr
;
}
HRESULT
WINAPI
IDirectInputDevice8AImpl_GetImageInfo
(
IDirectInputDevice8A
*
iface_a
,
DIDEVICEIMAGEINFOHEADERA
*
header_a
)
{
IDirectInputDeviceImpl
*
impl
=
impl_from_IDirectInputDevice8A
(
iface_a
);
...
...
dlls/dinput/device_private.h
View file @
8109f839
...
...
@@ -248,6 +248,8 @@ extern HRESULT WINAPI IDirectInputDevice8WImpl_BuildActionMap(LPDIRECTINPUTDEVIC
LPDIACTIONFORMATW
lpdiaf
,
LPCWSTR
lpszUserName
,
DWORD
dwFlags
)
DECLSPEC_HIDDEN
;
extern
HRESULT
WINAPI
IDirectInputDevice8AImpl_BuildActionMap
(
LPDIRECTINPUTDEVICE8A
iface
,
DIACTIONFORMATA
*
format
,
const
char
*
username
,
DWORD
flags
)
DECLSPEC_HIDDEN
;
extern
HRESULT
WINAPI
IDirectInputDevice8AImpl_GetImageInfo
(
LPDIRECTINPUTDEVICE8A
iface
,
LPDIDEVICEIMAGEINFOHEADERA
lpdiDevImageInfoHeader
)
DECLSPEC_HIDDEN
;
extern
HRESULT
WINAPI
IDirectInputDevice8WImpl_GetImageInfo
(
LPDIRECTINPUTDEVICE8W
iface
,
...
...
dlls/dinput/joystick.c
View file @
8109f839
...
...
@@ -773,36 +773,6 @@ HRESULT WINAPI JoystickWGenericImpl_BuildActionMap(LPDIRECTINPUTDEVICE8W iface,
return
IDirectInputDevice8WImpl_BuildActionMap
(
iface
,
lpdiaf
,
lpszUserName
,
dwFlags
);
}
HRESULT
WINAPI
JoystickAGenericImpl_BuildActionMap
(
LPDIRECTINPUTDEVICE8A
iface
,
LPDIACTIONFORMATA
lpdiaf
,
LPCSTR
lpszUserName
,
DWORD
dwFlags
)
{
JoystickGenericImpl
*
This
=
impl_from_IDirectInputDevice8A
(
iface
);
DIACTIONFORMATW
diafW
;
HRESULT
hr
;
WCHAR
*
lpszUserNameW
=
NULL
;
int
username_size
;
diafW
.
rgoAction
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
DIACTIONW
)
*
lpdiaf
->
dwNumActions
);
_copy_diactionformatAtoW
(
&
diafW
,
lpdiaf
);
if
(
lpszUserName
!=
NULL
)
{
username_size
=
MultiByteToWideChar
(
CP_ACP
,
0
,
lpszUserName
,
-
1
,
NULL
,
0
);
lpszUserNameW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
WCHAR
)
*
username_size
);
MultiByteToWideChar
(
CP_ACP
,
0
,
lpszUserName
,
-
1
,
lpszUserNameW
,
username_size
);
}
hr
=
JoystickWGenericImpl_BuildActionMap
(
&
This
->
base
.
IDirectInputDevice8W_iface
,
&
diafW
,
lpszUserNameW
,
dwFlags
);
_copy_diactionformatWtoA
(
lpdiaf
,
&
diafW
);
HeapFree
(
GetProcessHeap
(),
0
,
diafW
.
rgoAction
);
HeapFree
(
GetProcessHeap
(),
0
,
lpszUserNameW
);
return
hr
;
}
HRESULT
WINAPI
JoystickWGenericImpl_SetActionMap
(
LPDIRECTINPUTDEVICE8W
iface
,
LPDIACTIONFORMATW
lpdiaf
,
LPCWSTR
lpszUserName
,
...
...
dlls/dinput/joystick_linux.c
View file @
8109f839
...
...
@@ -909,7 +909,7 @@ static const IDirectInputDevice8AVtbl JoystickAvt =
IDirectInputDevice2AImpl_SendDeviceData
,
IDirectInputDevice7AImpl_EnumEffectsInFile
,
IDirectInputDevice7AImpl_WriteEffectToFile
,
JoystickAGeneric
Impl_BuildActionMap
,
IDirectInputDevice8A
Impl_BuildActionMap
,
JoystickAGenericImpl_SetActionMap
,
IDirectInputDevice8AImpl_GetImageInfo
};
...
...
dlls/dinput/joystick_linuxinput.c
View file @
8109f839
...
...
@@ -1339,7 +1339,7 @@ static const IDirectInputDevice8AVtbl JoystickAvt =
IDirectInputDevice2AImpl_SendDeviceData
,
IDirectInputDevice7AImpl_EnumEffectsInFile
,
IDirectInputDevice7AImpl_WriteEffectToFile
,
JoystickAGeneric
Impl_BuildActionMap
,
IDirectInputDevice8A
Impl_BuildActionMap
,
JoystickAGenericImpl_SetActionMap
,
IDirectInputDevice8AImpl_GetImageInfo
};
...
...
dlls/dinput/joystick_osx.c
View file @
8109f839
...
...
@@ -1600,7 +1600,7 @@ static const IDirectInputDevice8AVtbl JoystickAvt =
IDirectInputDevice2AImpl_SendDeviceData
,
IDirectInputDevice7AImpl_EnumEffectsInFile
,
IDirectInputDevice7AImpl_WriteEffectToFile
,
JoystickAGeneric
Impl_BuildActionMap
,
IDirectInputDevice8A
Impl_BuildActionMap
,
JoystickAGenericImpl_SetActionMap
,
IDirectInputDevice8AImpl_GetImageInfo
};
...
...
dlls/dinput/joystick_private.h
View file @
8109f839
...
...
@@ -77,7 +77,6 @@ HRESULT WINAPI JoystickWGenericImpl_Poll(LPDIRECTINPUTDEVICE8W iface) DECLSPEC_H
HRESULT
WINAPI
JoystickWGenericImpl_GetDeviceState
(
LPDIRECTINPUTDEVICE8W
iface
,
DWORD
len
,
LPVOID
ptr
)
DECLSPEC_HIDDEN
;
HRESULT
WINAPI
JoystickAGenericImpl_BuildActionMap
(
LPDIRECTINPUTDEVICE8A
iface
,
LPDIACTIONFORMATA
lpdiaf
,
LPCSTR
lpszUserName
,
DWORD
dwFlags
)
DECLSPEC_HIDDEN
;
HRESULT
WINAPI
JoystickWGenericImpl_BuildActionMap
(
LPDIRECTINPUTDEVICE8W
iface
,
LPDIACTIONFORMATW
lpdiaf
,
LPCWSTR
lpszUserName
,
DWORD
dwFlags
)
DECLSPEC_HIDDEN
;
HRESULT
WINAPI
JoystickAGenericImpl_SetActionMap
(
LPDIRECTINPUTDEVICE8A
iface
,
LPDIACTIONFORMATA
lpdiaf
,
LPCSTR
lpszUserName
,
DWORD
dwFlags
)
DECLSPEC_HIDDEN
;
...
...
dlls/dinput/keyboard.c
View file @
8109f839
...
...
@@ -554,36 +554,6 @@ static HRESULT WINAPI SysKeyboardWImpl_BuildActionMap(LPDIRECTINPUTDEVICE8W ifac
return
_build_action_map
(
iface
,
lpdiaf
,
lpszUserName
,
dwFlags
,
DIKEYBOARD_MASK
,
&
c_dfDIKeyboard
);
}
static
HRESULT
WINAPI
SysKeyboardAImpl_BuildActionMap
(
LPDIRECTINPUTDEVICE8A
iface
,
LPDIACTIONFORMATA
lpdiaf
,
LPCSTR
lpszUserName
,
DWORD
dwFlags
)
{
SysKeyboardImpl
*
This
=
impl_from_IDirectInputDevice8A
(
iface
);
DIACTIONFORMATW
diafW
;
HRESULT
hr
;
WCHAR
*
lpszUserNameW
=
NULL
;
int
username_size
;
diafW
.
rgoAction
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
DIACTIONW
)
*
lpdiaf
->
dwNumActions
);
_copy_diactionformatAtoW
(
&
diafW
,
lpdiaf
);
if
(
lpszUserName
!=
NULL
)
{
username_size
=
MultiByteToWideChar
(
CP_ACP
,
0
,
lpszUserName
,
-
1
,
NULL
,
0
);
lpszUserNameW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
WCHAR
)
*
username_size
);
MultiByteToWideChar
(
CP_ACP
,
0
,
lpszUserName
,
-
1
,
lpszUserNameW
,
username_size
);
}
hr
=
SysKeyboardWImpl_BuildActionMap
(
&
This
->
base
.
IDirectInputDevice8W_iface
,
&
diafW
,
lpszUserNameW
,
dwFlags
);
_copy_diactionformatWtoA
(
lpdiaf
,
&
diafW
);
HeapFree
(
GetProcessHeap
(),
0
,
diafW
.
rgoAction
);
HeapFree
(
GetProcessHeap
(),
0
,
lpszUserNameW
);
return
hr
;
}
static
HRESULT
WINAPI
SysKeyboardWImpl_SetActionMap
(
LPDIRECTINPUTDEVICE8W
iface
,
LPDIACTIONFORMATW
lpdiaf
,
LPCWSTR
lpszUserName
,
...
...
@@ -655,7 +625,7 @@ static const IDirectInputDevice8AVtbl SysKeyboardAvt =
IDirectInputDevice2AImpl_SendDeviceData
,
IDirectInputDevice7AImpl_EnumEffectsInFile
,
IDirectInputDevice7AImpl_WriteEffectToFile
,
SysKeyboard
AImpl_BuildActionMap
,
IDirectInputDevice8
AImpl_BuildActionMap
,
SysKeyboardAImpl_SetActionMap
,
IDirectInputDevice8AImpl_GetImageInfo
};
...
...
dlls/dinput/mouse.c
View file @
8109f839
...
...
@@ -807,36 +807,6 @@ static HRESULT WINAPI SysMouseWImpl_BuildActionMap(LPDIRECTINPUTDEVICE8W iface,
return
_build_action_map
(
iface
,
lpdiaf
,
lpszUserName
,
dwFlags
,
DIMOUSE_MASK
,
&
c_dfDIMouse2
);
}
static
HRESULT
WINAPI
SysMouseAImpl_BuildActionMap
(
LPDIRECTINPUTDEVICE8A
iface
,
LPDIACTIONFORMATA
lpdiaf
,
LPCSTR
lpszUserName
,
DWORD
dwFlags
)
{
SysMouseImpl
*
This
=
impl_from_IDirectInputDevice8A
(
iface
);
DIACTIONFORMATW
diafW
;
HRESULT
hr
;
WCHAR
*
lpszUserNameW
=
NULL
;
int
username_size
;
diafW
.
rgoAction
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
DIACTIONW
)
*
lpdiaf
->
dwNumActions
);
_copy_diactionformatAtoW
(
&
diafW
,
lpdiaf
);
if
(
lpszUserName
!=
NULL
)
{
username_size
=
MultiByteToWideChar
(
CP_ACP
,
0
,
lpszUserName
,
-
1
,
NULL
,
0
);
lpszUserNameW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
WCHAR
)
*
username_size
);
MultiByteToWideChar
(
CP_ACP
,
0
,
lpszUserName
,
-
1
,
lpszUserNameW
,
username_size
);
}
hr
=
SysMouseWImpl_BuildActionMap
(
&
This
->
base
.
IDirectInputDevice8W_iface
,
&
diafW
,
lpszUserNameW
,
dwFlags
);
_copy_diactionformatWtoA
(
lpdiaf
,
&
diafW
);
HeapFree
(
GetProcessHeap
(),
0
,
diafW
.
rgoAction
);
HeapFree
(
GetProcessHeap
(),
0
,
lpszUserNameW
);
return
hr
;
}
static
HRESULT
WINAPI
SysMouseWImpl_SetActionMap
(
LPDIRECTINPUTDEVICE8W
iface
,
LPDIACTIONFORMATW
lpdiaf
,
LPCWSTR
lpszUserName
,
...
...
@@ -908,7 +878,7 @@ static const IDirectInputDevice8AVtbl SysMouseAvt =
IDirectInputDevice2AImpl_SendDeviceData
,
IDirectInputDevice7AImpl_EnumEffectsInFile
,
IDirectInputDevice7AImpl_WriteEffectToFile
,
SysMouse
AImpl_BuildActionMap
,
IDirectInputDevice8
AImpl_BuildActionMap
,
SysMouseAImpl_SetActionMap
,
IDirectInputDevice8AImpl_GetImageInfo
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment