Defined logic for glutCreateSubWindow when negative position is allowed
[freeglut] / src / fg_structure.c
index 1d6c3a6..f0bc9a2 100644 (file)
@@ -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) );
@@ -132,6 +137,7 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
     menu->ID       = ++fgStructure.MenuID;
     menu->Callback = menuCallback;
     menu->ActiveEntry = NULL;
+    menu->Font     = fgState.MenuFont;
 
     fgListInit( &menu->Entries );
     fgListAppend( &fgStructure.Menus, &menu->Node );
@@ -189,7 +195,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 +337,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 +470,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 +511,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 +573,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 +585,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( )