Vitaliy Margolen : dinput: Move axes mapping array and default dead-zone into generic joystick class.

Alexandre Julliard julliard at winehq.org
Wed Aug 19 11:31:47 CDT 2009


Module: wine
Branch: master
Commit: 5347ab427a14b6c90a2b8fbcc2d28c6497b7693c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5347ab427a14b6c90a2b8fbcc2d28c6497b7693c

Author: Vitaliy Margolen <wine-patches at kievinfo.com>
Date:   Sat Aug 15 12:52:48 2009 -0600

dinput: Move axes mapping array and default dead-zone into generic joystick class.

---

 dlls/dinput/joystick_linux.c   |   36 +++++++++++++++++-------------------
 dlls/dinput/joystick_private.h |    3 +++
 2 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/dlls/dinput/joystick_linux.c b/dlls/dinput/joystick_linux.c
index 3a8487b..0f9a691 100644
--- a/dlls/dinput/joystick_linux.c
+++ b/dlls/dinput/joystick_linux.c
@@ -87,8 +87,6 @@ struct JoystickImpl
 
 	/* joystick private */
 	int				joyfd;
-	LONG				deadzone;
-	int				*axis_map;
 	int				axes;
         POINTL                          povs[4];
 };
@@ -257,12 +255,12 @@ static HRESULT setup_dinput_options(JoystickImpl * device)
     /* get options */
 
     if (!get_config_key( hkey, appkey, "DefaultDeadZone", buffer, MAX_PATH )) {
-        device->deadzone = atoi(buffer);
-        TRACE("setting default deadzone to: \"%s\" %d\n", buffer, device->deadzone);
+        device->generic.deadzone = atoi(buffer);
+        TRACE("setting default deadzone to: \"%s\" %d\n", buffer, device->generic.deadzone);
     }
 
-    device->axis_map = HeapAlloc(GetProcessHeap(), 0, device->axes * sizeof(int));
-    if (!device->axis_map) return DIERR_OUTOFMEMORY;
+    device->generic.axis_map = HeapAlloc(GetProcessHeap(), 0, device->axes * sizeof(int));
+    if (!device->generic.axis_map) return DIERR_OUTOFMEMORY;
 
     if (!get_config_key( hkey, appkey, device->generic.name, buffer, MAX_PATH )) {
         static const char *axis_names[] = {"X", "Y", "Z", "Rx", "Ry", "Rz",
@@ -289,7 +287,7 @@ static HRESULT setup_dinput_options(JoystickImpl * device)
                             else
                             {
                                 /* Pov takes two axes */
-                                device->axis_map[tokens++] = i;
+                                device->generic.axis_map[tokens++] = i;
                                 pov++;
                             }
                         }
@@ -312,14 +310,14 @@ static HRESULT setup_dinput_options(JoystickImpl * device)
                     i = -1;
                 }
 
-                device->axis_map[tokens] = i;
+                device->generic.axis_map[tokens] = i;
                 tokens++;
             } while ((ptr = strtok(NULL, delim)) != NULL);
 
             if (tokens != device->axes) {
                 ERR("not all joystick axes mapped: %d axes(%d,%d), %d arguments\n", device->axes, axis, pov,tokens);
                 while (tokens < device->axes) {
-                    device->axis_map[tokens] = -1;
+                    device->generic.axis_map[tokens] = -1;
                     tokens++;
                 }
             }
@@ -330,14 +328,14 @@ static HRESULT setup_dinput_options(JoystickImpl * device)
         for (tokens = 0; tokens < device->axes; tokens++)
         {
             if (tokens < 8)
-                device->axis_map[tokens] = axis++;
+                device->generic.axis_map[tokens] = axis++;
             else if (tokens < 16)
             {
-                device->axis_map[tokens++] = 8 + pov;
-                device->axis_map[tokens  ] = 8 + pov++;
+                device->generic.axis_map[tokens++] = 8 + pov;
+                device->generic.axis_map[tokens  ] = 8 + pov++;
             }
             else
-                device->axis_map[tokens] = -1;
+                device->generic.axis_map[tokens] = -1;
         }
     }
     device->generic.devcaps.dwAxes = axis;
@@ -425,7 +423,7 @@ static HRESULT alloc_device(REFGUID rguid, const void *jvt, IDirectInputImpl *di
     newDevice->generic.base.crit.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": JoystickImpl*->generic.base.crit");
 
     /* setup_dinput_options may change these */
-    newDevice->deadzone = 0;
+    newDevice->generic.deadzone = 0;
 
     /* do any user specified configuration */
     hr = setup_dinput_options(newDevice);
@@ -441,7 +439,7 @@ static HRESULT alloc_device(REFGUID rguid, const void *jvt, IDirectInputImpl *di
 
     for (i = 0; i < newDevice->axes; i++)
     {
-        int wine_obj = newDevice->axis_map[i];
+        int wine_obj = newDevice->generic.axis_map[i];
 
         if (wine_obj < 0) continue;
 
@@ -468,7 +466,7 @@ static HRESULT alloc_device(REFGUID rguid, const void *jvt, IDirectInputImpl *di
         newDevice->generic.props[i].lDevMax = +32767;
         newDevice->generic.props[i].lMin = 0;
         newDevice->generic.props[i].lMax = 0xffff;
-        newDevice->generic.props[i].lDeadZone = newDevice->deadzone;	/* % * 1000 */
+        newDevice->generic.props[i].lDeadZone = newDevice->generic.deadzone; /* % * 1000 */
         newDevice->generic.props[i].lSaturation = 0;
     }
 
@@ -489,7 +487,7 @@ static HRESULT alloc_device(REFGUID rguid, const void *jvt, IDirectInputImpl *di
     if (TRACE_ON(dinput)) {
         _dump_DIDATAFORMAT(newDevice->generic.base.data_format.wine_df);
        for (i = 0; i < (newDevice->axes); i++)
-           TRACE("axis_map[%d] = %d\n", i, newDevice->axis_map[i]);
+           TRACE("axis_map[%d] = %d\n", i, newDevice->generic.axis_map[i]);
         _dump_DIDEVCAPS(&newDevice->generic.devcaps);
     }
 
@@ -503,7 +501,7 @@ FAILED1:
     if (df) HeapFree(GetProcessHeap(), 0, df->rgodf);
     HeapFree(GetProcessHeap(), 0, df);
     release_DataFormat(&newDevice->generic.base.data_format);
-    HeapFree(GetProcessHeap(),0,newDevice->axis_map);
+    HeapFree(GetProcessHeap(),0,newDevice->generic.axis_map);
     HeapFree(GetProcessHeap(),0,newDevice->generic.name);
     HeapFree(GetProcessHeap(),0,newDevice);
     *pdev = 0;
@@ -684,7 +682,7 @@ static void joy_polldev(JoystickGenericImpl *This_in) {
         }
         else if (jse.type & JS_EVENT_AXIS)
         {
-            int number = This->axis_map[jse.number];	/* wine format object index */
+            int number = This->generic.axis_map[jse.number];	/* wine format object index */
 
             if (number < 0) return;
             inst_id = DIDFT_MAKEINSTANCE(number) | (number < 8 ? DIDFT_ABSAXIS : DIDFT_POV);
diff --git a/dlls/dinput/joystick_private.h b/dlls/dinput/joystick_private.h
index 5b7923d..18e03e6 100644
--- a/dlls/dinput/joystick_private.h
+++ b/dlls/dinput/joystick_private.h
@@ -46,6 +46,9 @@ typedef struct JoystickGenericImpl
     GUID        guidInstance;
     char        *name;
 
+    int        *axis_map;               /* User axes remapping */
+    LONG        deadzone;               /* Default dead-zone */
+
     joy_polldev_handler *joy_polldev;
 } JoystickGenericImpl;
 




More information about the wine-cvs mailing list