Module: wine Branch: master Commit: fa9c11dad396cdabf7527f7aef94f2cd49efb888 URL: http://source.winehq.org/git/wine.git/?a=commit;h=fa9c11dad396cdabf7527f7aef...
Author: Vitaliy Margolen wine-patches@kievinfo.com Date: Sat Aug 15 11:58:52 2009 -0600
dinput: Let driver specify default axis mapping.
---
dlls/dinput/joystick.c | 42 ++++++++++++++++++++++++++++-------- dlls/dinput/joystick_linux.c | 2 +- dlls/dinput/joystick_linuxinput.c | 2 +- dlls/dinput/joystick_private.h | 2 +- 4 files changed, 35 insertions(+), 13 deletions(-)
diff --git a/dlls/dinput/joystick.c b/dlls/dinput/joystick.c index 158e4e0..e0be179 100644 --- a/dlls/dinput/joystick.c +++ b/dlls/dinput/joystick.c @@ -448,7 +448,7 @@ DWORD joystick_map_pov(POINTL *p) * Setup the dinput options. */
-HRESULT setup_dinput_options(JoystickGenericImpl *This) +HRESULT setup_dinput_options(JoystickGenericImpl *This, const BYTE *default_axis_map) { char buffer[MAX_PATH+16]; HKEY hkey, appkey; @@ -540,18 +540,40 @@ HRESULT setup_dinput_options(JoystickGenericImpl *This) } else { - /* No config - set default mapping. */ - for (tokens = 0; tokens < This->device_axis_count; tokens++) + int i; + + if (default_axis_map) { - if (tokens < 8) - This->axis_map[tokens] = axis++; - else if (tokens < 15) + /* Use default mapping from the driver */ + for (i = 0; i < This->device_axis_count; i++) { - This->axis_map[tokens++] = 8 + pov; - This->axis_map[tokens ] = 8 + pov++; + This->axis_map[i] = default_axis_map[i]; + tokens = default_axis_map[i]; + if (tokens >= 0 && tokens < 8) + axis++; + else if (tokens < 15) + { + i++; + pov++; + This->axis_map[i] = default_axis_map[i]; + } + } + } + else + { + /* No config - set default mapping. */ + for (i = 0; i < This->device_axis_count; i++) + { + if (i < 8) + This->axis_map[i] = axis++; + else if (i < 15) + { + This->axis_map[i++] = 8 + pov; + This->axis_map[i ] = 8 + pov++; + } + else + This->axis_map[i] = -1; } - else - This->axis_map[tokens] = -1; } } This->devcaps.dwAxes = axis; diff --git a/dlls/dinput/joystick_linux.c b/dlls/dinput/joystick_linux.c index 6e1988b..764931e 100644 --- a/dlls/dinput/joystick_linux.c +++ b/dlls/dinput/joystick_linux.c @@ -310,7 +310,7 @@ static HRESULT alloc_device(REFGUID rguid, const void *jvt, IDirectInputImpl *di newDevice->generic.deadzone = 0;
/* do any user specified configuration */ - hr = setup_dinput_options(&newDevice->generic); + hr = setup_dinput_options(&newDevice->generic, NULL); if (hr != DI_OK) goto FAILED1;
diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c index 1dda212..07524c0 100644 --- a/dlls/dinput/joystick_linuxinput.c +++ b/dlls/dinput/joystick_linuxinput.c @@ -433,7 +433,7 @@ static JoystickImpl *alloc_device(REFGUID rguid, const void *jvt, IDirectInputIm }
/* do any user specified configuration */ - if (setup_dinput_options(&newDevice->generic) != DI_OK) goto failed; + if (setup_dinput_options(&newDevice->generic, NULL) != DI_OK) goto failed;
/* Create copy of default data format */ if (!(df = HeapAlloc(GetProcessHeap(), 0, c_dfDIJoystick2.dwSize))) goto failed; diff --git a/dlls/dinput/joystick_private.h b/dlls/dinput/joystick_private.h index 577bf5d..027e81a 100644 --- a/dlls/dinput/joystick_private.h +++ b/dlls/dinput/joystick_private.h @@ -53,7 +53,7 @@ typedef struct JoystickGenericImpl } JoystickGenericImpl;
LONG joystick_map_axis(ObjProps *props, int val); -HRESULT setup_dinput_options(JoystickGenericImpl *This); +HRESULT setup_dinput_options(JoystickGenericImpl *This, const BYTE *default_axis_map);
DWORD joystick_map_pov(POINTL *p);