X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffg_structure.c;h=c279b4a84bf7cda60d6d766420bcb776b27ca0a4;hb=76bb5e2f2b60a3cb15fe7fa0142d80a89065cf30;hp=1d6c3a6b9526e872ee61bbd0b17f5f6835969635;hpb=26913c37ab4ecff6a3d43c1e1dfcd58141079e60;p=freeglut diff --git a/src/fg_structure.c b/src/fg_structure.c index 1d6c3a6..c279b4a 100644 --- a/src/fg_structure.c +++ b/src/fg_structure.c @@ -1,5 +1,5 @@ /* - * freeglut_structure.c + * fg_structure.c * * Windows and menus need tree structure * @@ -75,6 +75,11 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title, /* Have the window object created */ SFG_Window *window = (SFG_Window *)calloc( 1, sizeof(SFG_Window) ); + if( !window ) + { + fgError( "Out of memory. Could not create window." ); + } + fgPlatformCreateWindow ( window ); fghClearCallBacks( window ); @@ -100,7 +105,7 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title, /* * Open the window now. The fgOpenWindow() function is system - * dependant, and resides in freeglut_window.c. Uses fgState. + * dependent, and resides in fg_window.c. Uses fgState. */ fgOpenWindow( window, title, positionUse, x, y, sizeUse, w, h, gameMode, (GLboolean)(parent ? GL_TRUE : GL_FALSE) ); @@ -111,7 +116,7 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title, /* * This private function creates a menu and adds it to the menus list */ -SFG_Menu* fgCreateMenu( FGCBMenu menuCallback ) +SFG_Menu* fgCreateMenu( FGCBMenuUC menuCallback, FGCBUserData userData ) { SFG_Window *current_window = fgStructure.CurrentWindow; @@ -129,9 +134,11 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback ) fgSetWindow( current_window ); /* Initialize the object properties: */ - menu->ID = ++fgStructure.MenuID; - menu->Callback = menuCallback; - menu->ActiveEntry = NULL; + menu->ID = ++fgStructure.MenuID; + menu->Callback = menuCallback; + menu->CallbackData = userData; + menu->ActiveEntry = NULL; + menu->Font = fgState.MenuFont; fgListInit( &menu->Entries ); fgListAppend( &fgStructure.Menus, &menu->Node ); @@ -189,7 +196,7 @@ void fgCloseWindows( ) /* * This function destroys a window and all of its subwindows. Actually, - * another function, defined in freeglut_window.c is called, but this is + * another function, defined in fg_window.c is called, but this is * a whole different story... */ void fgDestroyWindow( SFG_Window* window ) @@ -331,7 +338,7 @@ void fgDestroyMenu( SFG_Menu* menu ) * This function should be called on glutInit(). It will prepare the internal * structure of freeglut to be used in the application. The structure will be * destroyed using fgDestroyStructure() on glutMainLoop() return. In that - * case further use of freeglut should be preceeded with a glutInit() call. + * case further use of freeglut should be preceded with a glutInit() call. */ void fgCreateStructure( void ) { @@ -464,7 +471,7 @@ static void fghcbWindowByHandle( SFG_Window *window, /* * fgWindowByHandle returns a (SFG_Window *) value pointing to the * first window in the queue matching the specified window handle. - * The function is defined in freeglut_structure.c file. + * The function is defined in fg_structure.c file. */ SFG_Window* fgWindowByHandle ( SFG_WindowHandleType hWindow ) { @@ -505,7 +512,7 @@ static void fghcbWindowByID( SFG_Window *window, SFG_Enumerator *enumerator ) /* * This function is similar to the previous one, except it is * looking for a specified (sub)window identifier. The function - * is defined in freeglut_structure.c file. + * is defined in fg_structure.c file. */ SFG_Window* fgWindowByID( int windowID ) { @@ -567,7 +574,7 @@ static void fghcbGetActiveMenu( SFG_Menu *menu, if ( enumerator->found ) return; - /* Check the menu's ID. */ + /* Check the menu's is active */ if( menu->IsActive ) { enumerator->found = GL_TRUE; @@ -579,6 +586,7 @@ static void fghcbGetActiveMenu( SFG_Menu *menu, /* * Returns active menu, if any. Assumption: only one menu active throughout application at any one time. + * This is false when a submenu is also open. * This is easier than fgWindowByXXX as all menus are placed in one doubly linked list... */ SFG_Menu* fgGetActiveMenu( )