Module: wine Branch: refs/heads/master Commit: 101e9e64e6748951bf0b733829de405defb354bd URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=101e9e64e6748951bf0b7338...
Author: Vitaliy Margolen wine-patch@kievinfo.com Date: Thu Jun 22 07:30:52 2006 -0600
dinput: Warp mouse each 10ms instead of dropping events.
---
dlls/dinput/mouse.c | 24 +++++++++--------------- 1 files changed, 9 insertions(+), 15 deletions(-)
diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c index 8bd395e..e626bf6 100644 --- a/dlls/dinput/mouse.c +++ b/dlls/dinput/mouse.c @@ -136,6 +136,7 @@ struct SysMouseImpl /* 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; + DWORD last_warped; int acquired; HANDLE hEvent; CRITICAL_SECTION crit; @@ -418,7 +419,6 @@ static LRESULT CALLBACK dinput_mouse_hoo MSLLHOOKSTRUCT *hook = (MSLLHOOKSTRUCT *)lparam; SysMouseImpl* This = (SysMouseImpl*) current_lock; DWORD dwCoop; - static long last_event = 0; int wdata;
if (code != HC_ACTION) return CallNextHookEx( 0, code, wparam, lparam ); @@ -426,16 +426,6 @@ static LRESULT CALLBACK dinput_mouse_hoo EnterCriticalSection(&(This->crit)); dwCoop = This->dwCoopLevel;
- /* Only allow mouse events every 10 ms. - * This is to allow the cursor to start acceleration before - * the warps happen. But if it involves a mouse button event we - * allow it since we don't want to lose the clicks. - */ - if (((GetCurrentTime() - last_event) < 10) - && wparam == WM_MOUSEMOVE) - goto end; - else last_event = GetCurrentTime(); - /* Mouse moved -> send event if asked */ if (This->hEvent) SetEvent(This->hEvent); @@ -623,6 +613,8 @@ static HRESULT WINAPI SysMouseAImpl_Acqu MapWindowPoints(This->win, HWND_DESKTOP, &This->mapped_center, 1); TRACE("Warping mouse to %ld - %ld\n", This->mapped_center.x, This->mapped_center.y); SetCursorPos( This->mapped_center.x, This->mapped_center.y ); + This->last_warped = GetCurrentTime(); + #ifdef MOUSE_HACK This->need_warp = WARP_DONE; #else @@ -698,11 +690,12 @@ static HRESULT WINAPI SysMouseAImpl_GetD }
/* Check if we need to do a mouse warping */ - if (This->need_warp == WARP_NEEDED) { + if (This->need_warp == WARP_NEEDED && (GetCurrentTime() - This->last_warped > 10)) { dinput_window_check(This); TRACE("Warping mouse to %ld - %ld\n", This->mapped_center.x, This->mapped_center.y); SetCursorPos( This->mapped_center.x, This->mapped_center.y ); - + This->last_warped = GetCurrentTime(); + #ifdef MOUSE_HACK This->need_warp = WARP_DONE; #else @@ -791,11 +784,12 @@ static HRESULT WINAPI SysMouseAImpl_GetD LeaveCriticalSection(&(This->crit));
/* Check if we need to do a mouse warping */ - if (This->need_warp == WARP_NEEDED) { + if (This->need_warp == WARP_NEEDED && (GetCurrentTime() - This->last_warped > 10)) { dinput_window_check(This); TRACE("Warping mouse to %ld - %ld\n", This->mapped_center.x, This->mapped_center.y); SetCursorPos( This->mapped_center.x, This->mapped_center.y ); - + This->last_warped = GetCurrentTime(); + #ifdef MOUSE_HACK This->need_warp = WARP_DONE; #else