From: Richard Rauch Date: Thu, 30 Oct 2003 03:20:24 +0000 (+0000) Subject: Minor fix to allow for multiple ticks to be received at one time by the X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=commitdiff_plain;ds=inline;h=473e31c2358ce574a7eb52f14ecdc7fc22f0f3e9;p=freeglut Minor fix to allow for multiple ticks to be received at one time by the WIN32 code. Take abs(direction) as the number of ticks, and count it down. *should* be included by freeglut_internal.h, I think, so it should be okay; otherwise add a suitable #include. git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@268 7f0cb862-5218-0410-a997-914c9d46530a --- diff --git a/src/freeglut_main.c b/src/freeglut_main.c index e54fc81..e1138f3 100644 --- a/src/freeglut_main.c +++ b/src/freeglut_main.c @@ -1461,6 +1461,7 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara /* THIS IS SPECULATIVE -- John Fay, 10/2/03 */ int direction = HIWORD ( lParam ) / 120 ; /* Should be WHEEL_DELTA instead of 120 */ + int ticks = abs( direction ); /* * The mouse cursor has moved. Remember the new mouse cursor's position @@ -1483,28 +1484,29 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara ( ( (GetKeyState( VK_LMENU ) < 0 ) || ( GetKeyState( VK_RMENU ) < 0 )) ? GLUT_ACTIVE_ALT : 0 ); - if ( window->Callbacks.MouseWheel ) - window->Callbacks.MouseWheel( - wheel_number, - direction, - window->State.MouseX, - window->State.MouseY - ) ; - else /* No mouse wheel, call the mouse button callback twice */ - { - int button = wheel_number * 2 + 4; - /* - * XXX The above assumes that you have no more than 3 mouse - * XXX buttons. Sorry. - */ - button += (1 + direction)/2; - window->Callbacks.Mouse ( button, GLUT_DOWN, - window->State.MouseX, - window->State.MouseY ) ; - window->Callbacks.Mouse ( button, GLUT_UP, - window->State.MouseX, - window->State.MouseY ) ; - } + while( ticks-- ) + if ( window->Callbacks.MouseWheel ) + window->Callbacks.MouseWheel( + wheel_number, + direction, + window->State.MouseX, + window->State.MouseY + ) ; + else /* No mouse wheel, call the mouse button callback twice */ + { + /* + * XXX The below assumes that you have no more than 3 mouse + * XXX buttons. Sorry. + */ + int button = wheel_number * 2 + 4; + button += (1 + direction)/2; + window->Callbacks.Mouse ( button, GLUT_DOWN, + window->State.MouseX, + window->State.MouseY ) ; + window->Callbacks.Mouse ( button, GLUT_UP, + window->State.MouseX, + window->State.MouseY ) ; + } fgStructure.Window->State.Modifiers = 0xffffffff; }