if( window->State.Redisplay &&
window->State.Visible )
{
+ /*
+ * XXX Resizing should *not* depend upon whether there
+ * XXX is a pending redisplay flag, as far as I can tell.
+ * XXX
+ * XXX Note, too, that the {NeedToResize} flag is a little
+ * XXX fuzzy in its meaning, since for WIN32, this also
+ * XXX means "we need to tell the application that the window has
+ * XXX changed size", while in X11, it only means "we need
+ * XXX to ask the window system to resize the window.
+ * XXX Splitting the flag's meaning might be desirable, but
+ * XXX that could complicate the code more. (On X11, the
+ * XXX user callback is called as soon as the event is
+ * XXX discovered, but resizing the window is postponed
+ * XXX until after other events.)
+ */
if( window->State.NeedToResize )
{
SFG_Window *current_window = fgStructure.Window;
* (in freeglut only) will not get an initial reshape event,
* which can break things.
*
- * XXX NOTE that it is possible that you will more than one Reshape
- * XXX event for your top-level window, but something like this
- * XXX appears to be required for compatbility.
- *
* GLUT presumably does this because it generally tries to treat
* sub-windows the same as windows.
*/
int width = event.xconfigure.width;
int height = event.xconfigure.height;
- GETWINDOW( xconfigure );
- if( FETCH_WCB( *window, Reshape ) )
- INVOKE_WCB( *window, Reshape, ( width, height ) );
- else
+ if( ( width != window->State.OldWidth ) ||
+ ( height != window->State.OldHeight ) )
{
- fgSetWindow( window );
- glViewport( 0, 0, width, height );
+ window->State.OldWidth = width;
+ window->State.OldHeight = height;
+ if( FETCH_WCB( *window, Reshape ) )
+ INVOKE_WCB( *window, Reshape, ( width, height ) );
+ else
+ {
+ fgSetWindow( window );
+ glViewport( 0, 0, width, height );
+ }
+ glutPostRedisplay( );
}
}
break;