Fixed redisplay bug.

Fixed modifier values.


git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@19 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
cjp 2001-08-04 12:24:21 +00:00
parent 32b7dcf989
commit 0e3fcc69ea
2 changed files with 37 additions and 16 deletions

View File

@ -72,7 +72,7 @@ static void fghRedrawWindowByHandle
/* /*
* Return if the window is not visible * Return if the window is not visible
*/ */
freeglut_return_if_fail( window->State.Visible != TRUE ); freeglut_return_if_fail( window->State.Visible == TRUE );
/* /*
* Set the window as the current one. Calling glutSetWindow() * Set the window as the current one. Calling glutSetWindow()
@ -139,9 +139,8 @@ static void fghcbDisplayWindow( SFG_Window *window, SFG_Enumerator *enumerator )
/* /*
* Check if there is an idle callback hooked * Check if there is an idle callback hooked
*/ */
# warning there is a redisplay hack here (see the code commented out)
if( (window->Callbacks.Display != NULL) && if( (window->Callbacks.Display != NULL) &&
/*(window->State.Redisplay == TRUE) &&*/ (window->State.Redisplay == TRUE) &&
(window->State.Visible == TRUE) ) (window->State.Visible == TRUE) )
{ {
/* /*
@ -369,6 +368,7 @@ void FGAPIENTRY glutMainLoop( void )
#if TARGET_HOST_UNIX_X11 #if TARGET_HOST_UNIX_X11
SFG_Window* window; SFG_Window* window;
XEvent event; XEvent event;
int modifiers;
/* /*
* This code was repeated constantly, so here it goes into a definition: * This code was repeated constantly, so here it goes into a definition:
@ -672,7 +672,14 @@ void FGAPIENTRY glutMainLoop( void )
/* /*
* Remember the current modifiers state * Remember the current modifiers state
*/ */
window->State.Modifiers = event.xbutton.state; modifiers = 0;
if (event.xbutton.state & (ShiftMask|LockMask))
modifiers |= GLUT_ACTIVE_SHIFT;
if (event.xbutton.state & ControlMask)
modifiers |= GLUT_ACTIVE_CTRL;
if (event.xbutton.state & Mod1Mask)
modifiers |= GLUT_ACTIVE_ALT;
window->State.Modifiers = modifiers;
/* /*
* Finally execute the mouse callback * Finally execute the mouse callback
@ -731,7 +738,14 @@ void FGAPIENTRY glutMainLoop( void )
/* /*
* Remember the current modifiers state * Remember the current modifiers state
*/ */
window->State.Modifiers = event.xkey.state; modifiers = 0;
if (event.xkey.state & (ShiftMask|LockMask))
modifiers |= GLUT_ACTIVE_SHIFT;
if (event.xkey.state & ControlMask)
modifiers |= GLUT_ACTIVE_CTRL;
if (event.xkey.state & Mod1Mask)
modifiers |= GLUT_ACTIVE_ALT;
window->State.Modifiers = modifiers;
/* /*
* Execute the callback * Execute the callback
@ -784,17 +798,24 @@ void FGAPIENTRY glutMainLoop( void )
*/ */
if( (window->Callbacks.Special != NULL) && (special != -1) ) if( (window->Callbacks.Special != NULL) && (special != -1) )
{ {
/* /*
* Remember the current modifiers state * Remember the current modifiers state
*/ */
window->State.Modifiers = event.xkey.state; modifiers = 0;
if (event.xkey.state & (ShiftMask|LockMask))
modifiers |= GLUT_ACTIVE_SHIFT;
if (event.xkey.state & ControlMask)
modifiers |= GLUT_ACTIVE_CTRL;
if (event.xkey.state & Mod1Mask)
modifiers |= GLUT_ACTIVE_ALT;
window->State.Modifiers = modifiers;
window->Callbacks.Special( special, event.xkey.x, event.xkey.y ); window->Callbacks.Special( special, event.xkey.x, event.xkey.y );
/* /*
* Trash the modifiers state * Trash the modifiers state
*/ */
window->State.Modifiers = 0xffffffff; window->State.Modifiers = 0xffffffff;
} }
} }
} }

View File

@ -262,8 +262,8 @@
* GLUT API macro definitions -- the glutGetModifiers parameters * GLUT API macro definitions -- the glutGetModifiers parameters
*/ */
#define GLUT_ACTIVE_SHIFT 0x0001 #define GLUT_ACTIVE_SHIFT 0x0001
#define GLUT_ACTIVE_CTRL 0x0004 #define GLUT_ACTIVE_CTRL 0x0002
#define GLUT_ACTIVE_ALT 0x0008 #define GLUT_ACTIVE_ALT 0x0004
/* /*
* GLUT API macro definitions -- the glutSetCursor parameters * GLUT API macro definitions -- the glutSetCursor parameters