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:
parent
25edeabab4
commit
3a5a72436b
@ -1273,8 +1273,10 @@ void FGAPIENTRY glutMainLoopEvent( void )
|
||||
* XXX See XFree86 configuration docs (even back in the
|
||||
* 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 Should add support for partial wheel turns as Windows does -- 5/27/11
|
||||
*/
|
||||
int wheel_number = (button - glutDeviceGet ( GLUT_NUM_MOUSE_BUTTONS )) / 2;
|
||||
int direction = -1;
|
||||
@ -2058,27 +2060,16 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,
|
||||
case 0x020a:
|
||||
/* 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
|
||||
*/
|
||||
int wheel_number = LOWORD( wParam );
|
||||
short ticks = ( short )HIWORD( wParam ) / 120;
|
||||
int direction = 1;
|
||||
|
||||
if( ticks < 0 )
|
||||
if ( abs ( fgState.MouseWheelTicks ) > 120 )
|
||||
{
|
||||
direction = -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 */
|
||||
int direction = ( fgState.MouseWheelTicks > 0 ) ? 1 : -1;
|
||||
|
||||
if( ! FETCH_WCB( *window, MouseWheel ) &&
|
||||
! FETCH_WCB( *window, Mouse ) )
|
||||
@ -2087,7 +2078,11 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,
|
||||
fgSetWindow( window );
|
||||
fgState.Modifiers = fghGetWin32Modifiers( );
|
||||
|
||||
while( ticks-- )
|
||||
/*
|
||||
* XXX Should use WHEEL_DELTA instead of 120
|
||||
*/
|
||||
while( abs ( fgState.MouseWheelTicks ) > 120 )
|
||||
{
|
||||
if( FETCH_WCB( *window, MouseWheel ) )
|
||||
INVOKE_WCB( *window, MouseWheel,
|
||||
( 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;
|
||||
}
|
||||
}
|
||||
break ;
|
||||
|
||||
case WM_SYSKEYDOWN:
|
||||
|
Reference in New Issue
Block a user