From: Richard Rauch Date: Wed, 3 Dec 2003 02:07:36 +0000 (+0000) Subject: Hrm. I misunderstood the purpose of {window->State.Width} and X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=commitdiff_plain;h=e914664550e34587f4b10d3fe52c61fbe6d61771;p=freeglut Hrm. I misunderstood the purpose of {window->State.Width} and {...Height}. Those are *not* records of the old values, but rather of the *desired* *new* values, hence it was inappropriate to use them in ConfigureNotify X11 event handling. Doing so introduced some new problems. So, I created OldHeight and OldWidth in the window State structure, and *those* do what I require. I also stripped out the obsolete comment about getting extra/bogus reshape events. (Though I maintain that an application should be robust against them, freeglut should no longer generate them if the window has not changed size since last reported.) git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@378 7f0cb862-5218-0410-a997-914c9d46530a --- diff --git a/src/freeglut_internal.h b/src/freeglut_internal.h index 1c07129..177b200 100644 --- a/src/freeglut_internal.h +++ b/src/freeglut_internal.h @@ -353,6 +353,8 @@ struct tagSFG_WindowState { int Width; /* Window's width in pixels */ int Height; /* The same about the height */ + int OldWidth; /* Window width from before a resize */ + int OldHeight; /* " height " " " " */ GLboolean Redisplay; /* Do we have to redisplay? */ GLboolean Visible; /* Is the window visible now */ diff --git a/src/freeglut_main.c b/src/freeglut_main.c index d875e6a..95efa18 100644 --- a/src/freeglut_main.c +++ b/src/freeglut_main.c @@ -559,10 +559,6 @@ void FGAPIENTRY glutMainLoopEvent( void ) * (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. */ @@ -573,11 +569,11 @@ void FGAPIENTRY glutMainLoopEvent( void ) int width = event.xconfigure.width; int height = event.xconfigure.height; - if( ( width != window->State.Width ) || - ( height != window->State.Height ) ) + if( ( width != window->State.OldWidth ) || + ( height != window->State.OldHeight ) ) { - window->State.Width = width; - window->State.Height = height; + window->State.OldWidth = width; + window->State.OldHeight = height; if( FETCH_WCB( *window, Reshape ) ) INVOKE_WCB( *window, Reshape, ( width, height ) ); else diff --git a/src/freeglut_window.c b/src/freeglut_window.c index 07422f7..743b94f 100644 --- a/src/freeglut_window.c +++ b/src/freeglut_window.c @@ -610,6 +610,7 @@ int FGAPIENTRY glutCreateSubWindow( int parentID, int x, int y, int w, int h ) parent = fgWindowByID( parentID ); freeglut_return_val_if_fail( parent != NULL, 0 ); window = fgCreateWindow( parent, "", x, y, w, h, GL_FALSE, GL_FALSE ); + window->State.OldHeight = window->State.OldWidth = -1; return window->ID; }