Aric Stewart : dinput: Move joystick mapping functions to the generic part.

Alexandre Julliard julliard at winehq.org
Tue Mar 10 10:53:31 CDT 2009


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

Author: Aric Stewart <aric at codeweavers.com>
Date:   Mon Mar  9 10:07:07 2009 -0500

dinput: Move joystick mapping functions to the generic part.

---

 dlls/dinput/joystick.c            |   55 +++++++++++++++++++++++++++++++++++
 dlls/dinput/joystick_linuxinput.c |   57 +------------------------------------
 dlls/dinput/joystick_private.h    |    3 ++
 3 files changed, 59 insertions(+), 56 deletions(-)

diff --git a/dlls/dinput/joystick.c b/dlls/dinput/joystick.c
index 006e5be..a19cf27 100644
--- a/dlls/dinput/joystick.c
+++ b/dlls/dinput/joystick.c
@@ -387,3 +387,58 @@ HRESULT WINAPI JoystickAGenericImpl_GetDeviceState(
 
     return DI_OK;
 }
+
+/*
+ * This maps the read value (from the input event) to a value in the
+ * 'wanted' range.
+ * Notes:
+ *   Dead zone is in % multiplied by a 100 (range 0..10000)
+ */
+LONG joystick_map_axis(ObjProps *props, int val)
+{
+    LONG ret;
+    LONG dead_zone = MulDiv( props->lDeadZone, props->lDevMax - props->lDevMin, 10000 );
+    LONG dev_range = props->lDevMax - props->lDevMin - dead_zone;
+
+    /* Center input */
+    val -= (props->lDevMin + props->lDevMax) / 2;
+
+    /* Remove dead zone */
+    if (abs( val ) <= dead_zone / 2)
+        val = 0;
+    else
+        val = val < 0 ? val + dead_zone / 2 : val - dead_zone / 2;
+
+    /* Scale and map the value from the device range into the required range */
+    ret = MulDiv( val, props->lMax - props->lMin, dev_range ) +
+          (props->lMin + props->lMax) / 2;
+
+    /* Clamp in case or rounding errors */
+    if      (ret > props->lMax) ret = props->lMax;
+    else if (ret < props->lMin) ret = props->lMin;
+
+    TRACE( "(%d <%d> %d) -> (%d <%d> %d): val=%d ret=%d\n",
+           props->lDevMin, dead_zone, props->lDevMax,
+           props->lMin, props->lDeadZone, props->lMax,
+           val, ret );
+
+    return ret;
+}
+
+/*
+ * Maps POV x & y event values to a DX "clock" position:
+ *         0
+ *   31500    4500
+ * 27000  -1    9000
+ *   22500   13500
+ *       18000
+ */
+DWORD joystick_map_pov(POINTL *p)
+{
+    if (p->x > 0)
+        return p->y < 0 ?  4500 : !p->y ?  9000 : 13500;
+    else if (p->x < 0)
+        return p->y < 0 ? 31500 : !p->y ? 27000 : 22500;
+    else
+        return p->y < 0 ?     0 : !p->y ?    -1 : 18000;
+}
diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c
index c24ade9..548f920 100644
--- a/dlls/dinput/joystick_linuxinput.c
+++ b/dlls/dinput/joystick_linuxinput.c
@@ -64,65 +64,10 @@
 
 #include "dinput_private.h"
 #include "device_private.h"
+#include "joystick_private.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(dinput);
 
-
-/*
- * Maps POV x & y event values to a DX "clock" position:
- *         0
- *   31500    4500
- * 27000  -1    9000
- *   22500   13500
- *       18000
- */
-DWORD joystick_map_pov(POINTL *p)
-{
-    if (p->x > 0)
-        return p->y < 0 ?  4500 : !p->y ?  9000 : 13500;
-    else if (p->x < 0)
-        return p->y < 0 ? 31500 : !p->y ? 27000 : 22500;
-    else
-        return p->y < 0 ?     0 : !p->y ?    -1 : 18000;
-}
-
-/*
- * This maps the read value (from the input event) to a value in the
- * 'wanted' range.
- * Notes:
- *   Dead zone is in % multiplied by a 100 (range 0..10000)
- */
-LONG joystick_map_axis(ObjProps *props, int val)
-{
-    LONG ret;
-    LONG dead_zone = MulDiv( props->lDeadZone, props->lDevMax - props->lDevMin, 10000 );
-    LONG dev_range = props->lDevMax - props->lDevMin - dead_zone;
-
-    /* Center input */
-    val -= (props->lDevMin + props->lDevMax) / 2;
-
-    /* Remove dead zone */
-    if (abs( val ) <= dead_zone / 2)
-        val = 0;
-    else
-        val = val < 0 ? val + dead_zone / 2 : val - dead_zone / 2;
-
-    /* Scale and map the value from the device range into the required range */
-    ret = MulDiv( val, props->lMax - props->lMin, dev_range ) +
-          (props->lMin + props->lMax) / 2;
-
-    /* Clamp in case or rounding errors */
-    if      (ret > props->lMax) ret = props->lMax;
-    else if (ret < props->lMin) ret = props->lMin;
-
-    TRACE( "(%d <%d> %d) -> (%d <%d> %d): val=%d ret=%d\n",
-           props->lDevMin, dead_zone, props->lDevMax,
-           props->lMin, props->lDeadZone, props->lMax,
-           val, ret );
-
-    return ret;
-}
-
 #ifdef HAVE_CORRECT_LINUXINPUT_H
 
 #define EVDEVPREFIX	"/dev/input/event"
diff --git a/dlls/dinput/joystick_private.h b/dlls/dinput/joystick_private.h
index 3d87c7c..e1709e9 100644
--- a/dlls/dinput/joystick_private.h
+++ b/dlls/dinput/joystick_private.h
@@ -46,6 +46,9 @@ typedef struct JoystickGenericImpl
     joy_polldev_handler *joy_polldev;
 } JoystickGenericImpl;
 
+LONG joystick_map_axis(ObjProps *props, int val);
+
+DWORD joystick_map_pov(POINTL *p);
 
 HRESULT WINAPI JoystickWGenericImpl_GetObjectInfo(LPDIRECTINPUTDEVICE8W iface,
         LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow);




More information about the wine-cvs mailing list