X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffg_window.c;h=366bbf31120ccfb8565911991452dfe8c9c62636;hb=a67edfb64096e4da7f8b7d6cd34de78c7fc72c54;hp=cf1dff8c14d2c123920c87c4393af672838db5dd;hpb=cc2a530d408fb9781516aeee18523541fea11165;p=freeglut diff --git a/src/fg_window.c b/src/fg_window.c index cf1dff8..366bbf3 100644 --- a/src/fg_window.c +++ b/src/fg_window.c @@ -1,5 +1,5 @@ /* - * freeglut_window.c + * fg_window.c * * Window management methods. * @@ -127,15 +127,19 @@ void fgOpenWindow( SFG_Window* window, const char* title, fgSetWindow( window ); +#ifndef EGL_VERSION_1_0 window->Window.DoubleBuffered = ( fgState.DisplayMode & GLUT_DOUBLE ) ? 1 : 0; -#ifndef EGL_VERSION_1_0 /* No glDrawBuffer/glReadBuffer in GLES */ if ( ! window->Window.DoubleBuffered ) { glDrawBuffer ( GL_FRONT ); glReadBuffer ( GL_FRONT ); } +#else + /* - EGL is always double-buffered */ + /* - No glDrawBuffer/glReadBuffer in GLES */ + window->Window.DoubleBuffered = 1; #endif window->Window.attribute_v_coord = -1; window->Window.attribute_v_normal = -1; @@ -173,12 +177,12 @@ int FGAPIENTRY glutCreateWindow( const char* title ) * 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" + * XXX Desired 'freeglut' behaviour when there is no current window") */ FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCreateWindow" ); - return fgCreateWindow( NULL, title, fgState.Position.Use, - fgState.Position.X, fgState.Position.Y, + return fgCreateWindow( NULL, title, + fgState.Position.Use, fgState.Position.X, fgState.Position.Y, fgState.Size.Use, fgState.Size.X, fgState.Size.Y, GL_FALSE, GL_FALSE )->ID; } @@ -195,33 +199,51 @@ 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 ) + if ( fgState.AllowNegativeWindowPosition ) { - x += w ; - w = -w ; - } + /* XXX This results in different widths/heights than if AllowNegativeWindowPosition + * XXX was false. The "freeglut" community defined this logic. + * XXX (freeglut-developer e-mail from Diederick C. Niehorster, 11/15/2015, 4:06 PM EST. + * XXX "Re: [Freeglut-developer] glutInitWindowPosition with negative coordinate(s)") + */ - if ( y < 0 ) - { - y = parent->State.Height + y ; - if ( h >= 0 ) y -= h ; + if ( w < 0 ) w = parent->State.Width + w ; + if ( h < 0 ) h = parent->State.Height + h ; } - - if ( h < 0 ) h = parent->State.Height - y + h ; - if ( h < 0 ) + else { - y += h ; - h = -h ; + 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, "", GL_TRUE, x, y, GL_TRUE, w, h, GL_FALSE, GL_FALSE ); + window = fgCreateWindow( parent, "", + GL_TRUE, x, y, + GL_TRUE, w, h, + GL_FALSE, GL_FALSE ); ret = window->ID; return ret;