*/
static void fghReshapeWindow ( SFG_Window *window, int width, int height )
{
- SFG_Window *current_window = fgStructure.Window;
+ SFG_Window *current_window = fgStructure.CurrentWindow;
freeglut_return_if_fail( window != NULL );
*/
static void fghRedrawWindow ( SFG_Window *window )
{
- SFG_Window *current_window = fgStructure.Window;
+ SFG_Window *current_window = fgStructure.CurrentWindow;
freeglut_return_if_fail( window );
freeglut_return_if_fail( FETCH_WCB ( *window, Display ) );
fgState.Modifiers = fghGetXModifiers( &event );
- /*
- * Finally execute the mouse or mouse wheel callback
- *
- * XXX Use a symbolic constant, *not* "4"! ("3, sire!")
- */
- if( ( button < 3 ) || ( ! FETCH_WCB( *window, MouseWheel ) ) )
+ /* Finally execute the mouse or mouse wheel callback */
+ if( ( button < glutDeviceGet ( GLUT_NUM_MOUSE_BUTTONS ) ) || ( ! FETCH_WCB( *window, MouseWheel ) ) )
INVOKE_WCB( *window, Mouse, ( button,
pressed ? GLUT_DOWN : GLUT_UP,
event.xbutton.x,
* XXX Note that {button} has already been decremeted
* XXX in mapping from X button numbering to GLUT.
*/
- int wheel_number = (button - 3) / 2;
+ int wheel_number = (button - glutDeviceGet ( GLUT_NUM_MOUSE_BUTTONS )) / 2;
int direction = -1;
if( button % 2 )
direction = 1;
if( event.type == KeyPress )
{
- keyboard_cb = FETCH_WCB( *window, Keyboard );
- special_cb = FETCH_WCB( *window, Special );
+ keyboard_cb = (FGCBKeyboard)( FETCH_WCB( *window, Keyboard ));
+ special_cb = (FGCBSpecial) ( FETCH_WCB( *window, Special ));
}
else
{
- keyboard_cb = FETCH_WCB( *window, KeyboardUp );
- special_cb = FETCH_WCB( *window, SpecialUp );
+ keyboard_cb = (FGCBKeyboard)( FETCH_WCB( *window, KeyboardUp ));
+ special_cb = (FGCBSpecial) ( FETCH_WCB( *window, SpecialUp ));
}
/* Is there a keyboard/special callback hooked for this window? */
{
if ( FETCH_WCB( *window, Visibility ) )
{
- SFG_Window *current_window = fgStructure.Window ;
+ SFG_Window *current_window = fgStructure.CurrentWindow ;
INVOKE_WCB( *window, Visibility, ( window->State.Visible ) );
fgSetWindow( current_window );
*/
return 0;
+ /* XXX For a future patch: we need a mouse entry event. Unfortunately Windows
+ * XXX doesn't give us one, so we will probably need a "MouseInWindow" flag in
+ * XXX the SFG_Window structure. Set it to true to begin with and then have the
+ * XXX WM_MOUSELEAVE code set it to false. Then when we get a WM_MOUSEMOVE event,
+ * XXX if the flag is false we invoke the Entry callback and set the flag to true.
+ */
+ case 0x02a2: /* This is the message we get when the mouse is leaving the window */
+ INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) );
+ break ;
+
case WM_MOUSEMOVE:
{
#if TARGET_HOST_WINCE