Hrm. I misunderstood the purpose of {window->State.Width} and
authorRichard Rauch <rkr@olib.org>
Wed, 3 Dec 2003 02:07:36 +0000 (02:07 +0000)
committerRichard Rauch <rkr@olib.org>
Wed, 3 Dec 2003 02:07:36 +0000 (02:07 +0000)
{...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

src/freeglut_internal.h
src/freeglut_main.c
src/freeglut_window.c

index 1c07129..177b200 100644 (file)
@@ -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         */
index d875e6a..95efa18 100644 (file)
@@ -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
index 07422f7..743b94f 100644 (file)
@@ -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;
 }