Adding support for partial mouse wheel turns as requested by Jason Wilkins in an e-mail dated 5/27/11 10:34 AM

git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@921 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
fayjf 2011-05-27 20:37:31 +00:00
parent 25edeabab4
commit 3a5a72436b

View File

@ -1273,8 +1273,10 @@ void FGAPIENTRY glutMainLoopEvent( void )
* XXX See XFree86 configuration docs (even back in the * XXX See XFree86 configuration docs (even back in the
* XXX 3.x days, and especially with 4.x). * XXX 3.x days, and especially with 4.x).
* *
* XXX Note that {button} has already been decremeted * XXX Note that {button} has already been decremented
* XXX in mapping from X button numbering to GLUT. * XXX in mapping from X button numbering to GLUT.
*
* XXX Should add support for partial wheel turns as Windows does -- 5/27/11
*/ */
int wheel_number = (button - glutDeviceGet ( GLUT_NUM_MOUSE_BUTTONS )) / 2; int wheel_number = (button - glutDeviceGet ( GLUT_NUM_MOUSE_BUTTONS )) / 2;
int direction = -1; int direction = -1;
@ -2058,27 +2060,16 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,
case 0x020a: case 0x020a:
/* Should be WM_MOUSEWHEEL but my compiler doesn't recognize it */ /* Should be WM_MOUSEWHEEL but my compiler doesn't recognize it */
{ {
int wheel_number = LOWORD( wParam );
short ticks = ( short )HIWORD( wParam );
fgState.MouseWheelTicks += ticks;
/* /*
* XXX THIS IS SPECULATIVE -- John Fay, 10/2/03
* XXX Should use WHEEL_DELTA instead of 120 * XXX Should use WHEEL_DELTA instead of 120
*/ */
int wheel_number = LOWORD( wParam ); if ( abs ( fgState.MouseWheelTicks ) > 120 )
short ticks = ( short )HIWORD( wParam ) / 120;
int direction = 1;
if( ticks < 0 )
{ {
direction = -1; int direction = ( fgState.MouseWheelTicks > 0 ) ? 1 : -1;
ticks = -ticks;
}
/*
* The mouse cursor has moved. Remember the new mouse cursor's position
*/
/* window->State.MouseX = LOWORD( lParam ); */
/* Need to adjust by window position, */
/* window->State.MouseY = HIWORD( lParam ); */
/* change "lParam" to other parameter */
if( ! FETCH_WCB( *window, MouseWheel ) && if( ! FETCH_WCB( *window, MouseWheel ) &&
! FETCH_WCB( *window, Mouse ) ) ! FETCH_WCB( *window, Mouse ) )
@ -2087,7 +2078,11 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,
fgSetWindow( window ); fgSetWindow( window );
fgState.Modifiers = fghGetWin32Modifiers( ); fgState.Modifiers = fghGetWin32Modifiers( );
while( ticks-- ) /*
* XXX Should use WHEEL_DELTA instead of 120
*/
while( abs ( fgState.MouseWheelTicks ) > 120 )
{
if( FETCH_WCB( *window, MouseWheel ) ) if( FETCH_WCB( *window, MouseWheel ) )
INVOKE_WCB( *window, MouseWheel, INVOKE_WCB( *window, MouseWheel,
( wheel_number, ( wheel_number,
@ -2118,8 +2113,15 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,
); );
} }
/*
* XXX Should use WHEEL_DELTA instead of 120
*/
fgState.MouseWheelTicks -= 120 * direction;
}
fgState.Modifiers = INVALID_MODIFIERS; fgState.Modifiers = INVALID_MODIFIERS;
} }
}
break ; break ;
case WM_SYSKEYDOWN: case WM_SYSKEYDOWN: