[PATCH] dinput: mouse.c: extracted the warping code into a function, got rid from goto's in alloc_device, and made the code more readable. (no change in functionality)

Adam Rimon adamrimon at gmail.com
Fri Dec 14 10:11:06 CST 2007


---

 dlls/dinput/mouse.c |  415 
+++++++++++++++++++++++++++++----------------------
 1 files changed, 235 insertions(+), 180 deletions(-)

diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c
index 35ddc0b..c7ac3b4 100644
--- a/dlls/dinput/mouse.c
+++ b/dlls/dinput/mouse.c
@@ -1,4 +1,4 @@
-/*        DirectInput Mouse device
+/*        DirectInput Mouse device
  *
  * Copyright 1998 Marcus Meissner
  * Copyright 1998,1999 Lionel Ulmer
@@ -57,8 +57,8 @@ struct SysMouseImpl
     /* SysMouseAImpl */
     /* These are used in case of relative -> absolute transitions */
     POINT                           org_coords;
-    POINT                      mapped_center;
-    DWORD                win_centerX, win_centerY;
+    POINT                           mapped_center;
+    DWORD                           win_centerX, win_centerY;
     /* warping: whether we need to move mouse back to middle once we
      * reach window borders (for e.g. shooters, "surface movement" 
games) */
     BOOL                            need_warp;
@@ -81,11 +81,13 @@ void _dump_mouse_state(DIMOUSESTATE2 *m_state)
     if (!TRACE_ON(dinput)) return;
 
     TRACE("(X: %d Y: %d Z: %d", m_state->lX, m_state->lY, m_state->lZ);
-    for (i = 0; i < 5; i++) TRACE(" B%d: %02x", i, m_state->rgbButtons[i]);
+    for (i = 0; i < 5; i++)
+        TRACE(" B%d: %02x", i, m_state->rgbButtons[i]);
     TRACE(")\n");
 }
 
-static void fill_mouse_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, 
DWORD version) {
+static void fill_mouse_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, 
DWORD version)
+{
     DWORD dwSize;
     DIDEVICEINSTANCEA ddi;
    
@@ -99,17 +101,20 @@ static void 
fill_mouse_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, DWORD versio
     ddi.dwSize = dwSize;
     ddi.guidInstance = GUID_SysMouse;/* DInput's GUID */
     ddi.guidProduct = DInput_Wine_Mouse_GUID; /* Vendor's GUID */
+   
     if (version >= 0x0800)
         ddi.dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL 
<< 8);
     else
         ddi.dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL 
<< 8);
+   
     strcpy(ddi.tszInstanceName, "Mouse");
     strcpy(ddi.tszProductName, "Wine Mouse");
 
     memcpy(lpddi, &ddi, (dwSize < sizeof(ddi) ? dwSize : sizeof(ddi)));
 }
 
-static void fill_mouse_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, 
DWORD version) {
+static void fill_mouse_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, 
DWORD version)
+{
     DWORD dwSize;
     DIDEVICEINSTANCEW ddi;
    
@@ -123,10 +128,12 @@ static void 
fill_mouse_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, DWORD versio
     ddi.dwSize = dwSize;
     ddi.guidInstance = GUID_SysMouse;/* DInput's GUID */
     ddi.guidProduct = DInput_Wine_Mouse_GUID; /* Vendor's GUID */
+   
     if (version >= 0x0800)
         ddi.dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL 
<< 8);
     else
         ddi.dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL 
<< 8);
+   
     MultiByteToWideChar(CP_ACP, 0, "Mouse", -1, ddi.tszInstanceName, 
MAX_PATH);
     MultiByteToWideChar(CP_ACP, 0, "Wine Mouse", -1, 
ddi.tszProductName, MAX_PATH);
 
@@ -139,13 +146,14 @@ static BOOL mousedev_enum_deviceA(DWORD dwDevType, 
DWORD dwFlags, LPDIDEVICEINST
         return FALSE;
 
     if ((dwDevType == 0) ||
-    ((dwDevType == DIDEVTYPE_MOUSE) && (version < 0x0800)) ||
-    (((dwDevType == DI8DEVCLASS_POINTER) || (dwDevType == 
DI8DEVTYPE_MOUSE)) && (version >= 0x0800))) {
-    TRACE("Enumerating the mouse device\n");
-   
-    fill_mouse_dideviceinstanceA(lpddi, version);
-   
-    return TRUE;
+        ((dwDevType == DIDEVTYPE_MOUSE) && (version < 0x0800)) ||
+        (((dwDevType == DI8DEVCLASS_POINTER) || (dwDevType == 
DI8DEVTYPE_MOUSE)) && (version >= 0x0800)))
+    {
+        TRACE("Enumerating the mouse device\n");
+       
+        fill_mouse_dideviceinstanceA(lpddi, version);
+       
+        return TRUE;
     }
    
     return FALSE;
@@ -157,13 +165,13 @@ static BOOL mousedev_enum_deviceW(DWORD dwDevType, 
DWORD dwFlags, LPDIDEVICEINST
         return FALSE;
 
     if ((dwDevType == 0) ||
-    ((dwDevType == DIDEVTYPE_MOUSE) && (version < 0x0800)) ||
-    (((dwDevType == DI8DEVCLASS_POINTER) || (dwDevType == 
DI8DEVTYPE_MOUSE)) && (version >= 0x0800))) {
-    TRACE("Enumerating the mouse device\n");
-   
-    fill_mouse_dideviceinstanceW(lpddi, version);
-   
-    return TRUE;
+        ( (dwDevType == DIDEVTYPE_MOUSE) && (version < 0x0800) ) ||
+        ( ( (dwDevType == DI8DEVCLASS_POINTER) || (dwDevType == 
DI8DEVTYPE_MOUSE) ) && (version >= 0x0800) )) {
+        TRACE("Enumerating the mouse device\n");
+       
+        fill_mouse_dideviceinstanceW(lpddi, version);
+       
+        return TRUE;
     }
    
     return FALSE;
@@ -176,20 +184,35 @@ static SysMouseImpl *alloc_device(REFGUID rguid, 
const void *mvt, IDirectInputIm
     unsigned i;
 
     newDevice = 
HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SysMouseImpl));
-    if (!newDevice) return NULL;
+    if (!newDevice)
+        return NULL;
+   
     newDevice->base.lpVtbl = mvt;
     newDevice->base.ref = 1;
     newDevice->base.dwCoopLevel = DISCL_NONEXCLUSIVE | DISCL_BACKGROUND;
+   
     memcpy(&newDevice->base.guid, rguid, sizeof(*rguid));
+   
     InitializeCriticalSection(&newDevice->base.crit);
     newDevice->base.crit.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": 
SysMouseImpl*->base.crit");
+   
     newDevice->base.dinput = dinput;
     newDevice->base.event_proc = dinput_mouse_hook;
 
     /* Create copy of default data format */
-    if (!(df = HeapAlloc(GetProcessHeap(), 0, c_dfDIMouse2.dwSize))) 
goto failed;
+    if ( !( df = HeapAlloc(GetProcessHeap(), 0, c_dfDIMouse2.dwSize) ) )
+    {
+        HeapFree(GetProcessHeap(), 0, newDevice);
+        return NULL;
+    }
     memcpy(df, &c_dfDIMouse2, c_dfDIMouse2.dwSize);
-    if (!(df->rgodf = HeapAlloc(GetProcessHeap(), 0, df->dwNumObjs * 
df->dwObjSize))) goto failed;
+   
+    if ( !( df->rgodf = HeapAlloc(GetProcessHeap(), 0, df->dwNumObjs * 
df->dwObjSize) ) )
+    {
+        HeapFree(GetProcessHeap(), 0, df);
+        HeapFree(GetProcessHeap(), 0, newDevice);
+        return NULL;
+    }
     memcpy(df->rgodf, c_dfDIMouse2.rgodf, df->dwNumObjs * df->dwObjSize);
 
     /* Because we don't do any detection yet just modify instance and 
type */
@@ -200,31 +223,33 @@ static SysMouseImpl *alloc_device(REFGUID rguid, 
const void *mvt, IDirectInputIm
             df->rgodf[i].dwType = DIDFT_MAKEINSTANCE(i) | DIDFT_PSHBUTTON;
 
     newDevice->base.data_format.wine_df = df;
+   
     IDirectInput_AddRef((LPDIRECTINPUTDEVICE8A)newDevice->base.dinput);
+   
     return newDevice;
-
-failed:
-    if (df) HeapFree(GetProcessHeap(), 0, df->rgodf);
-    HeapFree(GetProcessHeap(), 0, df);
-    HeapFree(GetProcessHeap(), 0, newDevice);
-    return NULL;
 }
 
 static HRESULT mousedev_create_deviceA(IDirectInputImpl *dinput, 
REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEA* pdev)
 {
-    if ((IsEqualGUID(&GUID_SysMouse,rguid)) ||             /* Generic 
Mouse */
-    (IsEqualGUID(&DInput_Wine_Mouse_GUID,rguid))) { /* Wine Mouse */
-    if ((riid == NULL) ||
-        IsEqualGUID(&IID_IDirectInputDeviceA,riid) ||
-        IsEqualGUID(&IID_IDirectInputDevice2A,riid) ||
-        IsEqualGUID(&IID_IDirectInputDevice7A,riid) ||
-        IsEqualGUID(&IID_IDirectInputDevice8A,riid)) {
-        *pdev = (IDirectInputDeviceA*) alloc_device(rguid, 
&SysMouseAvt, dinput);
-        TRACE("Creating a Mouse device (%p)\n", *pdev);
-            if (!*pdev) return DIERR_OUTOFMEMORY;
-        return DI_OK;
-    } else
-        return DIERR_NOINTERFACE;
+    if ((IsEqualGUID(&GUID_SysMouse,rguid)) || /* Generic Mouse */
+        (IsEqualGUID(&DInput_Wine_Mouse_GUID,rguid))) /* Wine Mouse */
+    {
+        if ((riid == NULL) ||
+            IsEqualGUID(&IID_IDirectInputDeviceA,riid) ||
+            IsEqualGUID(&IID_IDirectInputDevice2A,riid) ||
+            IsEqualGUID(&IID_IDirectInputDevice7A,riid) ||
+            IsEqualGUID(&IID_IDirectInputDevice8A,riid))
+        {
+            *pdev = (IDirectInputDeviceA*) alloc_device(rguid, 
&SysMouseAvt, dinput);
+            TRACE("Creating a Mouse device (%p)\n", *pdev);
+           
+            if (!*pdev)
+                return DIERR_OUTOFMEMORY;
+           
+            return DI_OK;
+        }
+        else
+            return DIERR_NOINTERFACE;
     }
    
     return DIERR_DEVICENOTREG;
@@ -232,19 +257,25 @@ static HRESULT 
mousedev_create_deviceA(IDirectInputImpl *dinput, REFGUID rguid,
 
 static HRESULT mousedev_create_deviceW(IDirectInputImpl *dinput, 
REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEW* pdev)
 {
-    if ((IsEqualGUID(&GUID_SysMouse,rguid)) ||             /* Generic 
Mouse */
-    (IsEqualGUID(&DInput_Wine_Mouse_GUID,rguid))) { /* Wine Mouse */
-    if ((riid == NULL) ||
-        IsEqualGUID(&IID_IDirectInputDeviceW,riid) ||
-        IsEqualGUID(&IID_IDirectInputDevice2W,riid) ||
-        IsEqualGUID(&IID_IDirectInputDevice7W,riid) ||
-        IsEqualGUID(&IID_IDirectInputDevice8W,riid)) {
-        *pdev = (IDirectInputDeviceW*) alloc_device(rguid, 
&SysMouseWvt, dinput);
-        TRACE("Creating a Mouse device (%p)\n", *pdev);
-            if (!*pdev) return DIERR_OUTOFMEMORY;
-        return DI_OK;
-    } else
-        return DIERR_NOINTERFACE;
+    if ((IsEqualGUID(&GUID_SysMouse,rguid)) || /* Generic Mouse */
+        (IsEqualGUID(&DInput_Wine_Mouse_GUID,rguid))) /* Wine Mouse */
+    {
+        if ((riid == NULL) ||
+            IsEqualGUID(&IID_IDirectInputDeviceW,riid) ||
+            IsEqualGUID(&IID_IDirectInputDevice2W,riid) ||
+            IsEqualGUID(&IID_IDirectInputDevice7W,riid) ||
+            IsEqualGUID(&IID_IDirectInputDevice8W,riid))
+        {
+            *pdev = (IDirectInputDeviceW*) alloc_device(rguid, 
&SysMouseWvt, dinput);
+            TRACE("Creating a Mouse device (%p)\n", *pdev);
+           
+            if (!*pdev)
+                return DIERR_OUTOFMEMORY;
+           
+            return DI_OK;
+        }
+        else
+            return DIERR_NOINTERFACE;
     }
    
     return DIERR_DEVICENOTREG;
@@ -259,7 +290,7 @@ const struct dinput_device mouse_device = {
 };
 
 /******************************************************************************
- *    SysMouseA (DInput Mouse support)
+ *    SysMouseA (DInput Mouse support)
  */
 
 /* low-level mouse hook */
@@ -281,8 +312,8 @@ static void dinput_mouse_hook( LPDIRECTINPUTDEVICE8A 
iface, WPARAM wparam, LPARA
             POINT pt, pt1;
 
             GetCursorPos(&pt);
-            This->m_state.lX += pt.x = hook->pt.x - pt.x;
-            This->m_state.lY += pt.y = hook->pt.y - pt.y;
+            This->m_state.lX += (pt.x = hook->pt.x - pt.x);
+            This->m_state.lY += (pt.y = hook->pt.y - pt.y);
 
             if (This->base.data_format.user_df->dwFlags & DIDF_ABSAXIS)
             {
@@ -296,6 +327,7 @@ static void dinput_mouse_hook( LPDIRECTINPUTDEVICE8A 
iface, WPARAM wparam, LPARA
                 inst_id = 
DIDFT_MAKEINSTANCE(WINE_MOUSE_X_AXIS_INSTANCE) | DIDFT_RELAXIS;
                 wdata = pt1.x;
             }
+           
             if (pt.y)
             {
                 /* Already have X, need to queue it */
@@ -306,41 +338,49 @@ static void dinput_mouse_hook( 
LPDIRECTINPUTDEVICE8A iface, WPARAM wparam, LPARA
                 wdata = pt1.y;
             }
 
-            This->need_warp = (pt.x || pt.y) && dwCoop & DISCL_EXCLUSIVE;
+            This->need_warp = (pt.x || pt.y) && (dwCoop & DISCL_EXCLUSIVE);
             break;
         }
         case WM_MOUSEWHEEL:
             inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_Z_AXIS_INSTANCE) | 
DIDFT_RELAXIS;
             This->m_state.lZ += wdata = (short)HIWORD(hook->mouseData);
             break;
+
         case WM_LBUTTONDOWN:
             inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 
0) | DIDFT_PSHBUTTON;
             This->m_state.rgbButtons[0] = wdata = 0x80;
-        break;
-    case WM_LBUTTONUP:
+            break;
+       
+        case WM_LBUTTONUP:
             inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 
0) | DIDFT_PSHBUTTON;
             This->m_state.rgbButtons[0] = wdata = 0x00;
-        break;
-    case WM_RBUTTONDOWN:
+            break;
+       
+        case WM_RBUTTONDOWN:
             inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 
1) | DIDFT_PSHBUTTON;
             This->m_state.rgbButtons[1] = wdata = 0x80;
-        break;
-    case WM_RBUTTONUP:
+            break;
+       
+        case WM_RBUTTONUP:
             inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 
1) | DIDFT_PSHBUTTON;
             This->m_state.rgbButtons[1] = wdata = 0x00;
-        break;
-    case WM_MBUTTONDOWN:
+            break;
+       
+        case WM_MBUTTONDOWN:
             inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 
2) | DIDFT_PSHBUTTON;
             This->m_state.rgbButtons[2] = wdata = 0x80;
-        break;
-    case WM_MBUTTONUP:
+            break;
+       
+        case WM_MBUTTONUP:
             inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 
2) | DIDFT_PSHBUTTON;
             This->m_state.rgbButtons[2] = wdata = 0x00;
-        break;
+            break;
+       
         case WM_XBUTTONDOWN:
             inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 
2 + HIWORD(hook->mouseData)) | DIDFT_PSHBUTTON;
             This->m_state.rgbButtons[2 + HIWORD(hook->mouseData)] = 
wdata = 0x80;
             break;
+       
         case WM_XBUTTONUP:
             inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 
2 + HIWORD(hook->mouseData)) | DIDFT_PSHBUTTON;
             This->m_state.rgbButtons[2 + HIWORD(hook->mouseData)] = 
wdata = 0x00;
@@ -358,22 +398,42 @@ static void dinput_mouse_hook( 
LPDIRECTINPUTDEVICE8A iface, WPARAM wparam, LPARA
     LeaveCriticalSection(&This->base.crit);
 }
 
-static BOOL dinput_window_check(SysMouseImpl* This) {
+static BOOL dinput_window_check(SysMouseImpl* This)
+{
     RECT rect;
     DWORD centerX, centerY;
 
     /* make sure the window hasn't moved */
     if(!GetWindowRect(This->base.win, &rect))
         return FALSE;
-    centerX = (rect.right  - rect.left) / 2;
-    centerY = (rect.bottom - rect.top ) / 2;
-    if (This->win_centerX != centerX || This->win_centerY != centerY) {
-    This->win_centerX = centerX;
-    This->win_centerY = centerY;
-    }
+   
+    This->win_centerX = (rect.right - rect.left) / 2;
+    This->win_centerY = (rect.bottom - rect.top ) / 2;
+   
     This->mapped_center.x = This->win_centerX;
     This->mapped_center.y = This->win_centerY;
+   
     MapWindowPoints(This->base.win, HWND_DESKTOP, &This->mapped_center, 1);
+   
+    return TRUE;
+}
+
+static BOOL dinput_mouse_warp(SysMouseImpl* This)
+{
+    /* Check if we need to do a mouse warping */   
+    if (This->need_warp && (GetCurrentTime() - This->last_warped > 10))
+    {
+        if(!dinput_window_check(This))
+            return FALSE;
+       
+        TRACE("Warping mouse to %d - %d\n", This->mapped_center.x, 
This->mapped_center.y);
+       
+        SetCursorPos(This->mapped_center.x, This->mapped_center.y);
+      
+        This->last_warped = GetCurrentTime();
+
+        This->need_warp = FALSE;
+    }
     return TRUE;
 }
 
@@ -390,19 +450,23 @@ static HRESULT WINAPI 
SysMouseAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
    
     TRACE("(this=%p)\n",This);
 
-    if ((res = IDirectInputDevice2AImpl_Acquire(iface)) != DI_OK) 
return res;
+    if ((res = IDirectInputDevice2AImpl_Acquire(iface)) != DI_OK)
+        return res;
 
     /* Init the mouse state */
     GetCursorPos( &point );
     if (This->base.data_format.user_df->dwFlags & DIDF_ABSAXIS)
     {
-      This->m_state.lX = point.x;
-      This->m_state.lY = point.y;
-    } else {
-      This->m_state.lX = 0;
-      This->m_state.lY = 0;
-      This->org_coords = point;
+        This->m_state.lX = point.x;
+        This->m_state.lY = point.y;
+    }
+    else
+    {
+        This->m_state.lX = 0;
+        This->m_state.lY = 0;
+        This->org_coords = point;
     }
+   
     This->m_state.lZ = 0;
     This->m_state.rgbButtons[0] = GetKeyState(VK_LBUTTON) & 0x80;
     This->m_state.rgbButtons[1] = GetKeyState(VK_RBUTTON) & 0x80;
@@ -422,24 +486,9 @@ static HRESULT WINAPI 
SysMouseAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
       else
         ERR("Failed to get RECT: %d\n", GetLastError());
     }
-   
-    /* Get the window dimension and find the center */
-    GetWindowRect(This->base.win, &rect);
-    This->win_centerX = (rect.right  - rect.left) / 2;
-    This->win_centerY = (rect.bottom - rect.top ) / 2;
-   
-    /* Warp the mouse to the center of the window */
-    if (This->base.dwCoopLevel & DISCL_EXCLUSIVE)
-    {
-      This->mapped_center.x = This->win_centerX;
-      This->mapped_center.y = This->win_centerY;
-      MapWindowPoints(This->base.win, HWND_DESKTOP, 
&This->mapped_center, 1);
-      TRACE("Warping mouse to %d - %d\n", This->mapped_center.x, 
This->mapped_center.y);
-      SetCursorPos( This->mapped_center.x, This->mapped_center.y );
-      This->last_warped = GetCurrentTime();
-
-      This->need_warp = FALSE;
-    }
+     
+    if ( !dinput_mouse_warp(This) )
+        return DIERR_GENERIC;
 
     return DI_OK;
 }
@@ -454,7 +503,8 @@ static HRESULT WINAPI 
SysMouseAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface)
    
     TRACE("(this=%p)\n",This);
 
-    if ((res = IDirectInputDevice2AImpl_Unacquire(iface)) != DI_OK) 
return res;
+    if ( (res = IDirectInputDevice2AImpl_Unacquire(iface)) != DI_OK )
+        return res;
 
     if (This->base.dwCoopLevel & DISCL_EXCLUSIVE)
     {
@@ -468,7 +518,7 @@ static HRESULT WINAPI 
SysMouseAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface)
       TRACE(" warping mouse back to (%d , %d)\n", This->org_coords.x, 
This->org_coords.y);
       SetCursorPos(This->org_coords.x, This->org_coords.y);
     }
-   
+   
     return DI_OK;
 }
 
@@ -479,11 +529,12 @@ static HRESULT WINAPI 
SysMouseAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface)
   *   supported.
   */
 static HRESULT WINAPI SysMouseAImpl_GetDeviceState(
-    LPDIRECTINPUTDEVICE8A iface,DWORD len,LPVOID ptr
+    LPDIRECTINPUTDEVICE8A iface,DWORD len,LPVOID ptr
 ) {
     SysMouseImpl *This = (SysMouseImpl *)iface;
 
-    if(This->base.acquired == 0) return DIERR_NOTACQUIRED;
+    if(This->base.acquired == 0)
+        return DIERR_NOTACQUIRED;
 
     TRACE("(this=%p,0x%08x,%p):\n", This, len, ptr);
     _dump_mouse_state(&This->m_state);
@@ -495,23 +546,14 @@ static HRESULT WINAPI SysMouseAImpl_GetDeviceState(
     /* Initialize the buffer when in relative mode */
     if (!(This->base.data_format.user_df->dwFlags & DIDF_ABSAXIS))
     {
-    This->m_state.lX = 0;
-    This->m_state.lY = 0;
-    This->m_state.lZ = 0;
+        This->m_state.lX = 0;
+        This->m_state.lY = 0;
+        This->m_state.lZ = 0;
     }
     LeaveCriticalSection(&This->base.crit);
 
-    /* Check if we need to do a mouse warping */
-    if (This->need_warp && (GetCurrentTime() - This->last_warped > 10))
-    {
-        if(!dinput_window_check(This))
-            return DIERR_GENERIC;
-    TRACE("Warping mouse to %d - %d\n", This->mapped_center.x, 
This->mapped_center.y);
-    SetCursorPos( This->mapped_center.x, This->mapped_center.y );
-        This->last_warped = GetCurrentTime();
-
-        This->need_warp = FALSE;
-    }
+    if ( !dinput_mouse_warp(This) )
+        return DIERR_GENERIC;
    
     return DI_OK;
 }
@@ -526,19 +568,12 @@ static HRESULT WINAPI 
SysMouseAImpl_GetDeviceData(LPDIRECTINPUTDEVICE8A iface,
     HRESULT res;
 
     res = IDirectInputDevice2AImpl_GetDeviceData(iface, dodsize, dod, 
entries, flags);
-    if (FAILED(res)) return res;
-
-    /* Check if we need to do a mouse warping */
-    if (This->need_warp && (GetCurrentTime() - This->last_warped > 10))
-    {
-        if(!dinput_window_check(This))
-            return DIERR_GENERIC;
-    TRACE("Warping mouse to %d - %d\n", This->mapped_center.x, 
This->mapped_center.y);
-    SetCursorPos( This->mapped_center.x, This->mapped_center.y );
-        This->last_warped = GetCurrentTime();
+    if (FAILED(res))
+        return res;
 
-        This->need_warp = FALSE;
-    }
+    if ( !dinput_mouse_warp(This) )
+        return DIERR_GENERIC;
+   
     return res;
 }
 
@@ -546,42 +581,48 @@ static HRESULT WINAPI 
SysMouseAImpl_GetDeviceData(LPDIRECTINPUTDEVICE8A iface,
   *     GetProperty : get input device properties
   */
 static HRESULT WINAPI SysMouseAImpl_GetProperty(LPDIRECTINPUTDEVICE8A 
iface,
-                        REFGUID rguid,
-                        LPDIPROPHEADER pdiph)
+                        REFGUID rguid,
+                        LPDIPROPHEADER pdiph)
 {
     SysMouseImpl *This = (SysMouseImpl *)iface;
    
     TRACE("(%p) %s,%p\n", This, debugstr_guid(rguid), pdiph);
     _dump_DIPROPHEADER(pdiph);
    
-    if (!HIWORD(rguid)) {
-    switch (LOWORD(rguid)) {
-        case (DWORD) DIPROP_GRANULARITY: {
-        LPDIPROPDWORD pr = (LPDIPROPDWORD) pdiph;
-       
-        /* We'll just assume that the app asks about the Z axis */
-        pr->dwData = WHEEL_DELTA;
-       
-        break;
-        }
-         
-        case (DWORD) DIPROP_RANGE: {
-        LPDIPROPRANGE pr = (LPDIPROPRANGE) pdiph;
-       
-        if ((pdiph->dwHow == DIPH_BYID) &&
-            ((pdiph->dwObj == 
(DIDFT_MAKEINSTANCE(WINE_MOUSE_X_AXIS_INSTANCE) | DIDFT_RELAXIS)) ||
-             (pdiph->dwObj == 
(DIDFT_MAKEINSTANCE(WINE_MOUSE_Y_AXIS_INSTANCE) | DIDFT_RELAXIS)))) {
-            /* Querying the range of either the X or the Y axis.  As I do
-               not know the range, do as if the range were
-               unrestricted...*/
-            pr->lMin = DIPROPRANGE_NOMIN;
-            pr->lMax = DIPROPRANGE_NOMAX;
-        }
-       
-        break;
-        }
-
-        default:
+    if (!HIWORD(rguid))
+    {
+        switch (LOWORD(rguid))
+        {
+            case (DWORD) DIPROP_GRANULARITY:
+            {
+                LPDIPROPDWORD pr = (LPDIPROPDWORD) pdiph;
+               
+                /* We'll just assume that the app asks about the Z axis */
+                pr->dwData = WHEEL_DELTA;
+               
+                break;
+            }
+         
+            case (DWORD) DIPROP_RANGE:
+            {
+                LPDIPROPRANGE pr = (LPDIPROPRANGE) pdiph;
+               
+                if ( (pdiph->dwHow == DIPH_BYID) &&
+                     (
+                       (pdiph->dwObj == 
(DIDFT_MAKEINSTANCE(WINE_MOUSE_X_AXIS_INSTANCE) | DIDFT_RELAXIS)) ||
+                       (pdiph->dwObj == 
(DIDFT_MAKEINSTANCE(WINE_MOUSE_Y_AXIS_INSTANCE) | DIDFT_RELAXIS))
+                     ) )
+                {
+                    /* Querying the range of either the X or the Y 
axis.  As I do
+                       not know the range, do as if the range were
+                       unrestricted...*/
+                    pr->lMin = DIPROPRANGE_NOMIN;
+                    pr->lMax = DIPROPRANGE_NOMAX;
+                }
+                break;
+            }
+
+            default:
                 return IDirectInputDevice2AImpl_GetProperty(iface, 
rguid, pdiph);
         }
     }
@@ -593,25 +634,28 @@ static HRESULT WINAPI 
SysMouseAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface,
   *     GetCapabilities : get the device capablitites
   */
 static HRESULT WINAPI SysMouseAImpl_GetCapabilities(
-    LPDIRECTINPUTDEVICE8A iface,
-    LPDIDEVCAPS lpDIDevCaps)
+    LPDIRECTINPUTDEVICE8A iface,
+    LPDIDEVCAPS lpDIDevCaps)
 {
     SysMouseImpl *This = (SysMouseImpl *)iface;
     DIDEVCAPS devcaps;
 
     TRACE("(this=%p,%p)\n",This,lpDIDevCaps);
 
-    if ((lpDIDevCaps->dwSize != sizeof(DIDEVCAPS)) && 
(lpDIDevCaps->dwSize != sizeof(DIDEVCAPS_DX3))) {
+    if ((lpDIDevCaps->dwSize != sizeof(DIDEVCAPS)) && 
(lpDIDevCaps->dwSize != sizeof(DIDEVCAPS_DX3)))
+    {
         WARN("invalid parameter\n");
         return DIERR_INVALIDPARAM;
     }
 
     devcaps.dwSize = lpDIDevCaps->dwSize;
     devcaps.dwFlags = DIDC_ATTACHED;
+   
     if (This->base.dinput->dwVersion >= 0x0800)
-    devcaps.dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL 
<< 8);
+        devcaps.dwDevType = DI8DEVTYPE_MOUSE | 
(DI8DEVTYPEMOUSE_TRADITIONAL << 8);
     else
-    devcaps.dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL 
<< 8);
+        devcaps.dwDevType = DIDEVTYPE_MOUSE | 
(DIDEVTYPEMOUSE_TRADITIONAL << 8);
+   
     devcaps.dwAxes = 3;
     devcaps.dwButtons = 8;
     devcaps.dwPOVs = 0;
@@ -640,11 +684,18 @@ static HRESULT WINAPI 
SysMouseWImpl_GetObjectInfo(LPDIRECTINPUTDEVICE8W iface,
     HRESULT res;
 
     res = IDirectInputDevice2WImpl_GetObjectInfo(iface, pdidoi, dwObj, 
dwHow);
-    if (res != DI_OK) return res;
+    if (res != DI_OK)
+        return res;
 
-    if      (IsEqualGUID(&pdidoi->guidType, &GUID_XAxis)) 
strcpyW(pdidoi->tszName, x_axisW);
-    else if (IsEqualGUID(&pdidoi->guidType, &GUID_YAxis)) 
strcpyW(pdidoi->tszName, y_axisW);
-    else if (IsEqualGUID(&pdidoi->guidType, &GUID_ZAxis)) 
strcpyW(pdidoi->tszName, wheelW);
+    if (IsEqualGUID(&pdidoi->guidType, &GUID_XAxis))
+        strcpyW(pdidoi->tszName, x_axisW);
+   
+    else if (IsEqualGUID(&pdidoi->guidType, &GUID_YAxis))
+        strcpyW(pdidoi->tszName, y_axisW);
+   
+    else if (IsEqualGUID(&pdidoi->guidType, &GUID_ZAxis))
+        strcpyW(pdidoi->tszName, wheelW);
+   
     else if (pdidoi->dwType & DIDFT_BUTTON)
         wsprintfW(pdidoi->tszName, buttonW, 
DIDFT_GETINSTANCE(pdidoi->dwType) - 3);
 
@@ -661,11 +712,13 @@ static HRESULT WINAPI 
SysMouseAImpl_GetObjectInfo(LPDIRECTINPUTDEVICE8A iface,
 
     didoiW.dwSize = sizeof(didoiW);
     res = SysMouseWImpl_GetObjectInfo((LPDIRECTINPUTDEVICE8W)iface, 
&didoiW, dwObj, dwHow);
-    if (res != DI_OK) return res;
+    if (res != DI_OK)
+        return res;
 
     memset(pdidoi, 0, pdidoi->dwSize);
     memcpy(pdidoi, &didoiW, FIELD_OFFSET(DIDEVICEOBJECTINSTANCEW, 
tszName));
     pdidoi->dwSize = dwSize;
+   
     WideCharToMultiByte(CP_ACP, 0, didoiW.tszName, -1, pdidoi->tszName,
                         sizeof(pdidoi->tszName), NULL, NULL);
 
@@ -676,15 +729,16 @@ static HRESULT WINAPI 
SysMouseAImpl_GetObjectInfo(LPDIRECTINPUTDEVICE8A iface,
   *     GetDeviceInfo : get information about a device's identity
   */
 static HRESULT WINAPI SysMouseAImpl_GetDeviceInfo(
-    LPDIRECTINPUTDEVICE8A iface,
-    LPDIDEVICEINSTANCEA pdidi)
+    LPDIRECTINPUTDEVICE8A iface,
+    LPDIDEVICEINSTANCEA pdidi)
 {
     SysMouseImpl *This = (SysMouseImpl *)iface;
     TRACE("(this=%p,%p)\n", This, pdidi);
 
-    if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEA)) {
+    if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEA))
+    {
         WARN(" dinput3 not supporte yet...\n");
-    return DI_OK;
+        return DI_OK;
     }
 
     fill_mouse_dideviceinstanceA(pdidi, This->base.dinput->dwVersion);
@@ -697,9 +751,10 @@ static HRESULT WINAPI 
SysMouseWImpl_GetDeviceInfo(LPDIRECTINPUTDEVICE8W iface, L
     SysMouseImpl *This = (SysMouseImpl *)iface;
     TRACE("(this=%p,%p)\n", This, pdidi);
 
-    if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEW)) {
+    if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEW))
+    {
         WARN(" dinput3 not supporte yet...\n");
-    return DI_OK;
+        return DI_OK;
     }
 
     fill_mouse_dideviceinstanceW(pdidi, This->base.dinput->dwVersion);
@@ -745,9 +800,9 @@ static const IDirectInputDevice8AVtbl SysMouseAvt =
 };
 
 #if !defined(__STRICT_ANSI__) && defined(__GNUC__)
-# define XCAST(fun)    (typeof(SysMouseWvt.fun))
+# define XCAST(fun)    (typeof(SysMouseWvt.fun))
 #else
-# define XCAST(fun)    (void*)
+# define XCAST(fun)    (void*)
 #endif
 
 static const IDirectInputDevice8WVtbl SysMouseWvt =
-- 
1.5.2.5




More information about the wine-patches mailing list