Merge remote-tracking branch 'svn/trunk' into git_master
This commit is contained in:
commit
9ea7d99574
@ -807,11 +807,8 @@ void fgPlatformProcessSingleEvent ( void )
|
|||||||
case ButtonRelease:
|
case ButtonRelease:
|
||||||
case ButtonPress:
|
case ButtonPress:
|
||||||
{
|
{
|
||||||
GLboolean pressed = GL_TRUE;
|
GLboolean pressed;
|
||||||
int button;
|
int button, x, y;
|
||||||
|
|
||||||
if( event.type == ButtonRelease )
|
|
||||||
pressed = GL_FALSE ;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A mouse button has been pressed or released. Traditionally,
|
* A mouse button has been pressed or released. Traditionally,
|
||||||
@ -829,59 +826,46 @@ void fgPlatformProcessSingleEvent ( void )
|
|||||||
*/
|
*/
|
||||||
button = event.xbutton.button - 1;
|
button = event.xbutton.button - 1;
|
||||||
|
|
||||||
|
pressed = event.type == ButtonPress ? GL_TRUE : GL_FALSE;
|
||||||
|
x = event.xbutton.x;
|
||||||
|
y = event.xbutton.y;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Do not execute the application's mouse callback if a menu
|
* Do not execute the application's mouse callback if a menu
|
||||||
* is hooked to this button. In that case an appropriate
|
* is hooked to this button. In that case an appropriate
|
||||||
* private call should be generated.
|
* private call should be generated.
|
||||||
*/
|
*/
|
||||||
if( fgCheckActiveMenu( window, button, pressed,
|
if(fgCheckActiveMenu( window, button, pressed, x, y))
|
||||||
event.xbutton.x, event.xbutton.y ) )
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if there is a mouse or mouse wheel callback hooked to the
|
* Check if there is a mouse or mouse wheel callback hooked to the
|
||||||
* window
|
* window
|
||||||
*/
|
*/
|
||||||
if( ! FETCH_WCB( *window, Mouse ) &&
|
if(!FETCH_WCB(*window, Mouse) && !FETCH_WCB(*window, MouseWheel))
|
||||||
! FETCH_WCB( *window, MouseWheel ) )
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
fgState.Modifiers = fgPlatformGetModifiers( event.xbutton.state );
|
fgState.Modifiers = fgPlatformGetModifiers(event.xbutton.state);
|
||||||
|
|
||||||
/* Finally execute the mouse or mouse wheel callback */
|
/* Finally execute the mouse or mouse wheel callback.
|
||||||
if( ( button < glutDeviceGet ( GLUT_NUM_MOUSE_BUTTONS ) ) || ( ! FETCH_WCB( *window, MouseWheel ) ) )
|
* The mouse wheel is reported as buttons 4 (down) and 5 (up) by
|
||||||
INVOKE_WCB( *window, Mouse, ( button,
|
* the X server. "button" has been converted to 0-based above, so
|
||||||
pressed ? GLUT_DOWN : GLUT_UP,
|
* that's 3 and 4 for us.
|
||||||
event.xbutton.x,
|
* If a wheel callback hasn't been registered, we simply treat them
|
||||||
event.xbutton.y )
|
* as button presses and pass them to the mouse handler. This is
|
||||||
);
|
* important for compatibility with the original GLUT.
|
||||||
else
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Map 4 and 5 to wheel zero; EVEN to +1, ODD to -1
|
|
||||||
* " 6 and 7 " " one; ...
|
|
||||||
*
|
|
||||||
* XXX This *should* be behind some variables/macros,
|
|
||||||
* XXX since the order and numbering isn't certain
|
|
||||||
* 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 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;
|
if(button < 3 || button > 4 || !FETCH_WCB(*window, MouseWheel)) {
|
||||||
int direction = -1;
|
INVOKE_WCB(*window, Mouse, (button, pressed ? GLUT_DOWN : GLUT_UP, x, y));
|
||||||
if( button % 2 )
|
} else {
|
||||||
direction = 1;
|
if(pressed) {
|
||||||
|
int dir = button & 1 ? 1 : -1;
|
||||||
if( pressed )
|
/* there's no way to know if X buttons after 5 are more
|
||||||
INVOKE_WCB( *window, MouseWheel, ( wheel_number,
|
* wheels/wheel axes, or regular buttons. So we'll only
|
||||||
direction,
|
* ever invoke the wheel CB for wheel 0.
|
||||||
event.xbutton.x,
|
*/
|
||||||
event.xbutton.y )
|
INVOKE_WCB(*window, MouseWheel, (0, dir, x, y));
|
||||||
);
|
}
|
||||||
}
|
}
|
||||||
fgState.Modifiers = INVALID_MODIFIERS;
|
fgState.Modifiers = INVALID_MODIFIERS;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user