X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffg_window.c;h=09fcddfe66b55e1489c55ccc1bd6fcc4f9b2f717;hb=2c12c9eb8d63cabac2d4113b4f54fdf53da8368c;hp=711defb641b8a488f4eaacb9dbb683b860b1f482;hpb=b180b2a7d0d012ff8dc6a8c823dc358c378c4509;p=freeglut diff --git a/src/fg_window.c b/src/fg_window.c index 711defb..09fcddf 100644 --- a/src/fg_window.c +++ b/src/fg_window.c @@ -1,5 +1,5 @@ /* - * freeglut_window.c + * fg_window.c * * Window management methods. * @@ -56,17 +56,8 @@ extern void fgPlatformOpenWindow( SFG_Window* window, const char* title, GLboolean sizeUse, int w, int h, GLboolean gameMode, GLboolean isSubWindow ); extern void fgPlatformCloseWindow( SFG_Window* window ); -extern void fgPlatformGlutShowWindow( void ); -extern void fgPlatformGlutHideWindow( void ); -extern void fgPlatformGlutIconifyWindow( void ); extern void fgPlatformGlutSetWindowTitle( const char* title ); extern void fgPlatformGlutSetIconTitle( const char* title ); -extern void fgPlatformGlutPositionWindow( int x, int y ); -extern void fgPlatformGlutPushWindow( void ); -extern void fgPlatformGlutPopWindow( void ); -extern void fgPlatformGlutFullScreen( SFG_Window *win ); -extern void fgPlatformGlutLeaveFullScreen( SFG_Window *win ); -extern void fgPlatformGlutFullScreenToggle( SFG_Window *win ); /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ @@ -115,7 +106,7 @@ void fghContextCreationError( void ) */ void fgSetWindow ( SFG_Window *window ) { - fgPlatformSetWindow ( window ); + fgPlatformSetWindow ( window ); fgStructure.CurrentWindow = window; } @@ -129,22 +120,26 @@ void fgOpenWindow( SFG_Window* window, const char* title, GLboolean sizeUse, int w, int h, GLboolean gameMode, GLboolean isSubWindow ) { - fgPlatformOpenWindow( window, title, - positionUse, x, y, - sizeUse, w, h, - gameMode, isSubWindow ); + fgPlatformOpenWindow( window, title, + positionUse, x, y, + sizeUse, w, h, + gameMode, isSubWindow ); 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; @@ -152,7 +147,7 @@ void fgOpenWindow( SFG_Window* window, const char* title, fgInitGL2(); - window->State.NeedToInitContext = GL_TRUE; + window->State.WorkMask |= GLUT_INIT_WORK; } /* @@ -167,7 +162,7 @@ void fgCloseWindow( SFG_Window* window ) if (fgStructure.GameModeWindow != NULL && fgStructure.GameModeWindow->ID==window->ID) glutLeaveGameMode(); - fgPlatformCloseWindow ( window ); + fgPlatformCloseWindow ( window ); } @@ -301,9 +296,10 @@ void FGAPIENTRY glutShowWindow( void ) FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutShowWindow" ); FREEGLUT_EXIT_IF_NO_WINDOW ( "glutShowWindow" ); - fgPlatformGlutShowWindow (); + fgStructure.CurrentWindow->State.WorkMask |= GLUT_VISIBILITY_WORK; + fgStructure.CurrentWindow->State.DesiredVisibility = DesireNormalState; - fgStructure.CurrentWindow->State.Redisplay = GL_TRUE; + fgStructure.CurrentWindow->State.WorkMask |= GLUT_DISPLAY_WORK; } /* @@ -314,9 +310,10 @@ void FGAPIENTRY glutHideWindow( void ) FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutHideWindow" ); FREEGLUT_EXIT_IF_NO_WINDOW ( "glutHideWindow" ); - fgPlatformGlutHideWindow (); + fgStructure.CurrentWindow->State.WorkMask |= GLUT_VISIBILITY_WORK; + fgStructure.CurrentWindow->State.DesiredVisibility = DesireHiddenState; - fgStructure.CurrentWindow->State.Redisplay = GL_FALSE; + fgStructure.CurrentWindow->State.WorkMask &= ~GLUT_DISPLAY_WORK; } /* @@ -327,9 +324,10 @@ void FGAPIENTRY glutIconifyWindow( void ) FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutIconifyWindow" ); FREEGLUT_EXIT_IF_NO_WINDOW ( "glutIconifyWindow" ); - fgPlatformGlutIconifyWindow (); + fgStructure.CurrentWindow->State.WorkMask |= GLUT_VISIBILITY_WORK; + fgStructure.CurrentWindow->State.DesiredVisibility = DesireIconicState; - fgStructure.CurrentWindow->State.Redisplay = GL_FALSE; + fgStructure.CurrentWindow->State.WorkMask &= ~GLUT_DISPLAY_WORK; } /* @@ -341,7 +339,7 @@ void FGAPIENTRY glutSetWindowTitle( const char* title ) FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetWindowTitle" ); if( ! fgStructure.CurrentWindow->Parent ) { - fgPlatformGlutSetWindowTitle ( title ); + fgPlatformGlutSetWindowTitle ( title ); } } @@ -355,7 +353,7 @@ void FGAPIENTRY glutSetIconTitle( const char* title ) if( ! fgStructure.CurrentWindow->Parent ) { - fgPlatformGlutSetIconTitle ( title ); + fgPlatformGlutSetIconTitle ( title ); } } @@ -373,9 +371,9 @@ void FGAPIENTRY glutReshapeWindow( int width, int height ) glutLeaveFullScreen(); } - fgStructure.CurrentWindow->State.NeedToResize = GL_TRUE; - fgStructure.CurrentWindow->State.Width = width ; - fgStructure.CurrentWindow->State.Height = height; + fgStructure.CurrentWindow->State.WorkMask |= GLUT_SIZE_WORK; + fgStructure.CurrentWindow->State.DesiredWidth = width ; + fgStructure.CurrentWindow->State.DesiredHeight = height; } /* @@ -392,7 +390,9 @@ void FGAPIENTRY glutPositionWindow( int x, int y ) glutLeaveFullScreen(); } - fgPlatformGlutPositionWindow ( x, y ); + fgStructure.CurrentWindow->State.WorkMask |= GLUT_POSITION_WORK; + fgStructure.CurrentWindow->State.DesiredXpos = x; + fgStructure.CurrentWindow->State.DesiredYpos = y; } /* @@ -403,7 +403,8 @@ void FGAPIENTRY glutPushWindow( void ) FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPushWindow" ); FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPushWindow" ); - fgPlatformGlutPushWindow (); + fgStructure.CurrentWindow->State.WorkMask |= GLUT_ZORDER_WORK; + fgStructure.CurrentWindow->State.DesiredZOrder = -1; } /* @@ -414,7 +415,8 @@ void FGAPIENTRY glutPopWindow( void ) FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPopWindow" ); FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPopWindow" ); - fgPlatformGlutPopWindow (); + fgStructure.CurrentWindow->State.WorkMask |= GLUT_ZORDER_WORK; + fgStructure.CurrentWindow->State.DesiredZOrder = 1; } /* @@ -441,12 +443,13 @@ void FGAPIENTRY glutFullScreen( void ) else if (fgStructure.GameModeWindow != NULL && fgStructure.GameModeWindow->ID==win->ID && win->State.IsFullscreen) { /* Ignore fullscreen call on GameMode window, those are always fullscreen already - * only exception is during first entering GameMode + * only exception is when first entering GameMode */ return; } - fgPlatformGlutFullScreen ( win ); + if (!win->State.IsFullscreen) + win->State.WorkMask |= GLUT_FULL_SCREEN_WORK; } /* @@ -454,14 +457,11 @@ void FGAPIENTRY glutFullScreen( void ) */ void FGAPIENTRY glutLeaveFullScreen( void ) { - SFG_Window *win; - FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutFullScreen" ); FREEGLUT_EXIT_IF_NO_WINDOW ( "glutFullScreen" ); - win = fgStructure.CurrentWindow; - - fgPlatformGlutLeaveFullScreen ( win ); + if (fgStructure.CurrentWindow->State.IsFullscreen) + fgStructure.CurrentWindow->State.WorkMask |= GLUT_FULL_SCREEN_WORK; } /* @@ -469,14 +469,10 @@ void FGAPIENTRY glutLeaveFullScreen( void ) */ void FGAPIENTRY glutFullScreenToggle( void ) { - SFG_Window *win; - FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutFullScreenToggle" ); FREEGLUT_EXIT_IF_NO_WINDOW ( "glutFullScreenToggle" ); - win = fgStructure.CurrentWindow; - - fgPlatformGlutFullScreenToggle ( win ); + fgStructure.CurrentWindow->State.WorkMask |= GLUT_FULL_SCREEN_WORK; } /*