X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_window.c;h=af294254ce7f0ae41fd7a28b0c5d762bd4bd88f7;hb=fe6b05020a6274423643f766f6d7b651a6264cbb;hp=cd9b0292c87f0e6f20339e7bf857d0d088a01d0b;hpb=78d46c63a115e0a868d83f365399864b62a4ea7f;p=freeglut diff --git a/src/freeglut_window.c b/src/freeglut_window.c index cd9b029..af29425 100644 --- a/src/freeglut_window.c +++ b/src/freeglut_window.c @@ -184,6 +184,9 @@ GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly, if( fgState.DisplayMode & GLUT_DOUBLE ) flags |= PFD_DOUBLEBUFFER; + if( fgState.DisplayMode & GLUT_STEREO ) + flags |= PFD_STEREO; + #if defined(_MSC_VER) #pragma message( "fgSetupPixelFormat(): there is still some work to do here!" ) #endif @@ -350,7 +353,7 @@ void fgOpenWindow( SFG_Window* window, const char* title, mask = CWBackPixmap | CWBorderPixel | CWColormap | CWEventMask; - if( window->IsMenu ) + if( window->IsMenu || ( gameMode == GL_TRUE ) ) { winAttr.override_redirect = True; mask |= CWOverrideRedirect; @@ -380,14 +383,14 @@ void fgOpenWindow( SFG_Window* window, const char* title, { fgStructure.MenuContext = (SFG_MenuContext *)malloc( sizeof(SFG_MenuContext) ); - fgStructure.MenuContext->VisualInfo = window->Window.VisualInfo; - fgStructure.MenuContext->Context = glXCreateContext( - fgDisplay.Display, fgStructure.MenuContext->VisualInfo, + fgStructure.MenuContext->MVisualInfo = window->Window.VisualInfo; + fgStructure.MenuContext->MContext = glXCreateContext( + fgDisplay.Display, fgStructure.MenuContext->MVisualInfo, NULL, ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT ) ); } - /* window->Window.Context = fgStructure.MenuContext->Context; */ + /* window->Window.Context = fgStructure.MenuContext->MContext; */ window->Window.Context = glXCreateContext( fgDisplay.Display, window->Window.VisualInfo, NULL, ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT ) @@ -462,6 +465,7 @@ void fgOpenWindow( SFG_Window* window, const char* title, &wmHints, NULL ); + XFree( textProperty.value ); XSetWMProtocols( fgDisplay.Display, window->Window.Handle, &fgDisplay.DeleteWindow, 1 ); @@ -617,6 +621,7 @@ void fgCloseWindow( SFG_Window* window ) #if TARGET_HOST_UNIX_X11 glXDestroyContext( fgDisplay.Display, window->Window.Context ); + XFree( window->Window.VisualInfo ); XDestroyWindow( fgDisplay.Display, window->Window.Handle ); XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */ @@ -659,6 +664,12 @@ void fgCloseWindow( SFG_Window* window ) */ int FGAPIENTRY glutCreateWindow( const char* title ) { + /* XXX GLUT does not exit; it simply calls "glutInit" quietly if the + * XXX application has not already done so. The "freeglut" community + * XXX decided not to go this route (freeglut-developer e-mail from + * XXX Steve Baker, 12/16/04, 4:22 PM CST, "Re: [Freeglut-developer] + * XXX Desired 'freeglut' behaviour when there is no current window" + */ FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCreateWindow" ); return fgCreateWindow( NULL, title, fgState.Position.X, fgState.Position.Y, @@ -678,6 +689,32 @@ int FGAPIENTRY glutCreateSubWindow( int parentID, int x, int y, int w, int h ) FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCreateSubWindow" ); parent = fgWindowByID( parentID ); freeglut_return_val_if_fail( parent != NULL, 0 ); + if ( x < 0 ) + { + x = parent->State.Width + x ; + if ( w >= 0 ) x -= w ; + } + + if ( w < 0 ) w = parent->State.Width - x + w ; + if ( w < 0 ) + { + x += w ; + w = -w ; + } + + if ( y < 0 ) + { + y = parent->State.Height + y ; + if ( h >= 0 ) y -= h ; + } + + if ( h < 0 ) h = parent->State.Height - y + h ; + if ( h < 0 ) + { + y += h ; + h = -h ; + } + window = fgCreateWindow( parent, "", x, y, w, h, GL_FALSE, GL_FALSE ); ret = window->ID;