Hi all, originally I tried to debug why some game's cursor was stuck in the middle, but I couldn't find it out properly (due to incomprehensible warping magic). This is said to be broken since moving the code from direct X11 addressing to USER driver addressing. - apply some small cleanups to dinput mouse code -- Andreas Mohr Stauferstr. 6, D-71272 Renningen, Germany
Determining best CVS host... Using CVSROOT :pserver:cvs@rhlx01.fht-esslingen.de:/home/wine Index: dlls/dinput/mouse/main.c =================================================================== RCS file: /home/wine/wine/dlls/dinput/mouse/main.c,v retrieving revision 1.10 diff -u -r1.10 main.c --- dlls/dinput/mouse/main.c 18 Oct 2001 21:30:46 -0000 1.10 +++ dlls/dinput/mouse/main.c 3 Mar 2002 22:08:53 -0000 @@ -109,6 +109,8 @@ DWORD win_centerX, win_centerY; LPDIDEVICEOBJECTDATA data_queue; int queue_head, queue_tail, queue_len; + /* warping: whether we need to move mouse back to middle once we + * reach window borders (for e.g. shooters, "surface movement" games) */ WARP_STATUS need_warp; int acquired; HANDLE hEvent; @@ -132,7 +134,7 @@ static BOOL mousedev_enum_device(DWORD dwDevType, DWORD dwFlags, LPCDIDEVICEINSTANCEA lpddi) { if ((dwDevType == 0) || (dwDevType == DIDEVTYPE_MOUSE)) { - TRACE("Enumerating the Mouse device\n"); + TRACE("Enumerating the mouse device\n"); /* Return mouse */ lpddi->guidInstance = GUID_SysMouse;/* DInput's GUID */ @@ -350,7 +352,7 @@ GEN_EVENT(This->offset_array[WINE_MOUSE_Y_POSITION], hook->pt.y - This->prevY, hook->time, (This->dinput->evsequence)++); } else { /* This is the first time the event handler has been called after a - GetData of GetState. */ + GetDeviceData or GetDeviceState. */ if (hook->pt.x != This->mapped_center.x) { GEN_EVENT(This->offset_array[WINE_MOUSE_X_POSITION], hook->pt.x - This->mapped_center.x, hook->time, (This->dinput->evsequence)++); This->need_warp = WARP_NEEDED; @@ -375,8 +377,8 @@ } } - TRACE(" msg %x pt %ld %ld (W=%d)", - wparam, hook->pt.x, hook->pt.y, This->absolute && This->need_warp ); + TRACE(" msg %x pt %ld %ld (W=%d)\n", + wparam, hook->pt.x, hook->pt.y, (!This->absolute) && This->need_warp ); switch(wparam) { @@ -657,7 +659,7 @@ case (DWORD) DIPROP_AXISMODE: { LPCDIPROPDWORD pd = (LPCDIPROPDWORD)ph; This->absolute = !(pd->dwData); - TRACE("absolute mode: %d\n", This->absolute); + TRACE("Using %s coordinates mode now\n", This->absolute ? "absolute" : "relative"); break; } default: @@ -701,7 +703,7 @@ ((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 where + not know the range, do as if the range were unrestricted...*/ pr->lMin = DIPROPRANGE_NOMIN; pr->lMax = DIPROPRANGE_NOMAX;