X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffg_window.c;h=1a65c1f8460a0badde83e4ab2711b65f4d33c976;hb=99d53f15a4216240088132f6af9cb194b519b1cc;hp=5c431ead58696e387bf81d4e957cbb5976035fd1;hpb=3fe7f83d7e5101f5b834a42dfe8c64c2679b3169;p=freeglut diff --git a/src/fg_window.c b/src/fg_window.c index 5c431ea..1a65c1f 100644 --- a/src/fg_window.c +++ b/src/fg_window.c @@ -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 ---------------------------------------------------- */ @@ -148,8 +139,11 @@ void fgOpenWindow( SFG_Window* window, const char* title, #endif window->Window.attribute_v_coord = -1; window->Window.attribute_v_normal = -1; + window->Window.attribute_v_texture = -1; fgInitGL2(); + + window->State.WorkMask |= GLUT_INIT_WORK; } /* @@ -298,7 +292,8 @@ 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; } @@ -311,7 +306,8 @@ 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; } @@ -324,9 +320,8 @@ void FGAPIENTRY glutIconifyWindow( void ) FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutIconifyWindow" ); FREEGLUT_EXIT_IF_NO_WINDOW ( "glutIconifyWindow" ); - fgStructure.CurrentWindow->State.Visible = GL_FALSE; - - fgPlatformGlutIconifyWindow (); + fgStructure.CurrentWindow->State.WorkMask |= GLUT_VISIBILITY_WORK; + fgStructure.CurrentWindow->State.DesiredVisibility = DesireIconicState; fgStructure.CurrentWindow->State.Redisplay = GL_FALSE; } @@ -372,9 +367,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; } /* @@ -391,7 +386,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; } /* @@ -402,7 +399,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; } /* @@ -413,7 +411,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; } /* @@ -437,13 +436,16 @@ void FGAPIENTRY glutFullScreen( void ) fgWarning("glutFullScreen called on a child window, ignoring..."); return; } - else if (fgStructure.GameModeWindow != NULL && fgStructure.GameModeWindow->ID==win->ID) + else if (fgStructure.GameModeWindow != NULL && fgStructure.GameModeWindow->ID==win->ID && win->State.IsFullscreen) { - /* Ignore fullscreen call on GameMode window, those are always fullscreen already */ + /* Ignore fullscreen call on GameMode window, those are always fullscreen already + * only exception is when first entering GameMode + */ return; } - fgPlatformGlutFullScreen ( win ); + if (!win->State.IsFullscreen) + win->State.WorkMask |= GLUT_FULL_SCREEN_WORK; } /* @@ -451,14 +453,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; } /* @@ -466,14 +465,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; } /*