*/
SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
{
- int x = 100, y = 100, w = 100, h = 100 ;
- SFG_Window *current_window = fgStructure.Window ;
+ int x = 100, y = 100, w = 100, h = 100;
+ SFG_Window *current_window = fgStructure.Window;
/*
* Have the menu object created
if( !fgState.Time.Set )
glutInit( &fakeArgc, NULL );
- menu->ParentWindow = fgStructure.Window ;
+ menu->ParentWindow = fgStructure.Window;
/*
* Create a window for the menu to reside in. Set the
* global variable BuildingAMenu to true so we can ensure
* it is created without decorations.
*/
- fgState.BuildingAMenu = TRUE ;
+ fgState.BuildingAMenu = TRUE;
- fgCreateWindow ( NULL, NULL, x, y, w, h, FALSE ) ;
- menu->Window = fgStructure.Window ;
- glutDisplayFunc ( fgDisplayMenu ) ;
+ fgCreateWindow( NULL, NULL, x, y, w, h, FALSE );
+ menu->Window = fgStructure.Window;
+ glutDisplayFunc( fgDisplayMenu );
/*
* While BuildingAMenu is true, all windows built have no decorations.
* That's not a good default behavior, so let's set it false again.
*/
- fgState.BuildingAMenu = FALSE ;
+ fgState.BuildingAMenu = FALSE;
- glutHideWindow () ; /* Hide the window for now */
- fgSetWindow ( current_window ) ;
+ glutHideWindow( ); /* Hide the window for now */
+ fgSetWindow( current_window );
/*
* Initialize the object properties:
*/
menu->ID = ++fgStructure.MenuID;
menu->Callback = menuCallback;
- menu->ActiveEntry = NULL ;
+ menu->ActiveEntry = NULL;
fgListInit( &menu->Entries );
fgListAppend( &fgStructure.Menus, &menu->Node );
* extremely dim view of this.
*/
-static SFG_WindowList* WindowsToDestroy = (SFG_WindowList*)NULL ;
+static SFG_WindowList* WindowsToDestroy = ( SFG_WindowList* )NULL;
/*
* Function to add a window to the linked list of windows to destroy.
* Subwindows are automatically added because they hang from the window
* structure.
*/
-void fgAddToWindowDestroyList ( SFG_Window* window, GLboolean needToClose )
+void fgAddToWindowDestroyList( SFG_Window* window, GLboolean needToClose )
{
SFG_WindowList *new_list_entry =
( SFG_WindowList* )malloc( sizeof(SFG_WindowList ) );
SFG_Window* subWindow;
int menu_index ;
- assert( window != NULL );
+ assert( window );
freeglut_assert_ready;
- while ( (subWindow = (SFG_Window *)window->Children.First) != NULL )
+ while( subWindow = ( SFG_Window * )window->Children.First )
fgDestroyWindow( subWindow, needToClose );
/*
* XXX this unconditional? Overhead is close to nil, and it would
* XXX clarify the code by omitting a conditional test.
*/
- if ( FETCH_WCB( *window, Destroy ) )
+ if( FETCH_WCB( *window, Destroy ) )
{
- SFG_Window *activeWindow = fgStructure.Window ;
- INVOKE_WCB( *window, Destroy, ( ) );
- fgSetWindow ( activeWindow ) ;
+ SFG_Window *activeWindow = fgStructure.Window ;
+ INVOKE_WCB( *window, Destroy, ( ) );
+ fgSetWindow ( activeWindow ) ;
}
- if ( window->Parent != NULL )
+ if( window->Parent )
fgListRemove( &window->Parent->Children, &window->Node );
else
fgListRemove( &fgStructure.Windows, &window->Node );
- if ( window->ActiveMenu != NULL )
- fgDeactivateMenu ( window ) ;
+ if( window->ActiveMenu )
+ fgDeactivateMenu( window );
for ( menu_index = 0; menu_index < 3; menu_index ++ )
{
if( needToClose == TRUE )
fgCloseWindow( window );
free( window );
- if ( fgStructure.Window == window )
- fgStructure.Window = NULL ;
+ if( fgStructure.Window == window )
+ fgStructure.Window = NULL;
fgClearCallBacks( window );
}
* Check if the menu is attached to the current window,
* if so, have it detached (by overwriting with a NULL):
*/
- for( i=0; i<3; i++ )
+ for( i = 0; i < 3; i++ )
if( window->Menu[ i ] == menu )
window->Menu[ i ] = NULL;
/*
* Call this function for all of the window's children recursively:
*/
- for( subWindow = (SFG_Window *)window->Children.First; subWindow;
+ for( subWindow = (SFG_Window *)window->Children.First;
+ subWindow;
subWindow = (SFG_Window *)subWindow->Node.Next)
fghRemoveMenuFromWindow( subWindow, menu );
}
*/
static void fghRemoveMenuFromMenu( SFG_Menu* from, SFG_Menu* menu )
{
- SFG_MenuEntry *entry;
+ SFG_MenuEntry *entry;
- for( entry = (SFG_MenuEntry *)from->Entries.First;
- entry;
- entry = (SFG_MenuEntry *)entry->Node.Next )
- if (entry->SubMenu == menu)
- entry->SubMenu = NULL;
+ for( entry = (SFG_MenuEntry *)from->Entries.First;
+ entry;
+ entry = ( SFG_MenuEntry * )entry->Node.Next )
+ if( entry->SubMenu == menu )
+ entry->SubMenu = NULL;
}
/*
*/
void fgDestroyMenu( SFG_Menu* menu )
{
- SFG_Window *window;
- SFG_Menu *from;
- SFG_MenuEntry *entry;
-
- assert( menu != NULL );
- freeglut_assert_ready;
-
- /*
- * First of all, have all references to this menu removed from all windows:
- */
- for( window = (SFG_Window *)fgStructure.Windows.First;
- window;
- window = (SFG_Window *)window->Node.Next )
- fghRemoveMenuFromWindow( window, menu );
-
- /*
- * Now proceed with removing menu entries that lead to this menu
- */
- for( from = (SFG_Menu *)fgStructure.Menus.First;
- from;
- from = (SFG_Menu *)from->Node.Next )
- fghRemoveMenuFromMenu( from, menu );
-
- /*
- * If the programmer defined a destroy callback, call it
- * A. Donev: But first make this the active menu
- */
- if ( menu->Destroy != NULL )
- {
- SFG_Menu *activeMenu=fgStructure.Menu;
- fgStructure.Menu = menu;
- menu->Destroy () ;
- fgStructure.Menu = activeMenu;
- }
-
- /*
- * Now we are pretty sure the menu is not used anywhere
- * and that we can remove all of its entries
- */
- while( (entry = (SFG_MenuEntry *)menu->Entries.First) != NULL )
- {
- fgListRemove(&menu->Entries, &entry->Node);
-
- if( entry->Text )
- free( entry->Text );
- entry->Text = NULL;
-
- free( entry );
- entry = NULL;
- }
-
- if ( fgStructure.Window == menu->Window )
- fgSetWindow ( menu->ParentWindow ) ;
- fgDestroyWindow ( menu->Window, TRUE ) ;
- fgListRemove( &fgStructure.Menus, &menu->Node );
- if( fgStructure.Menu == menu )
- fgStructure.Menu = NULL;
-
- free( menu );
+ SFG_Window *window;
+ SFG_Menu *from;
+ SFG_MenuEntry *entry;
+
+ assert( menu );
+ freeglut_assert_ready;
+
+ /*
+ * First of all, have all references to this menu removed from all windows:
+ */
+ for( window = (SFG_Window *)fgStructure.Windows.First;
+ window;
+ window = (SFG_Window *)window->Node.Next )
+ fghRemoveMenuFromWindow( window, menu );
+
+ /*
+ * Now proceed with removing menu entries that lead to this menu
+ */
+ for( from = ( SFG_Menu * )fgStructure.Menus.First;
+ from;
+ from = ( SFG_Menu * )from->Node.Next )
+ fghRemoveMenuFromMenu( from, menu );
+
+ /*
+ * If the programmer defined a destroy callback, call it
+ * A. Donev: But first make this the active menu
+ */
+ if( menu->Destroy )
+ {
+ SFG_Menu *activeMenu=fgStructure.Menu;
+ fgStructure.Menu = menu;
+ menu->Destroy( );
+ fgStructure.Menu = activeMenu;
+ }
+
+ /*
+ * Now we are pretty sure the menu is not used anywhere
+ * and that we can remove all of its entries
+ */
+ while( entry = ( SFG_MenuEntry * )menu->Entries.First )
+ {
+ fgListRemove( &menu->Entries, &entry->Node );
+
+ if( entry->Text )
+ free( entry->Text );
+ entry->Text = NULL;
+
+ free( entry );
+ entry = NULL;
+ }
+
+ if( fgStructure.Window == menu->Window )
+ fgSetWindow( menu->ParentWindow );
+ fgDestroyWindow( menu->Window, TRUE );
+ fgListRemove( &fgStructure.Menus, &menu->Node );
+ if( fgStructure.Menu == menu )
+ fgStructure.Menu = NULL;
+
+ free( menu );
}
/*
*/
void fgCreateStructure( void )
{
- /*
- * We will be needing two lists: the first containing windows,
- * and the second containing the user-defined menus.
- * Also, no current window/menu is set, as none has been created yet.
- */
-
- fgListInit(&fgStructure.Windows);
- fgListInit(&fgStructure.Menus);
+ /*
+ * We will be needing two lists: the first containing windows,
+ * and the second containing the user-defined menus.
+ * Also, no current window/menu is set, as none has been created yet.
+ */
+
+ fgListInit(&fgStructure.Windows);
+ fgListInit(&fgStructure.Menus);
}
/*
*/
void fgDestroyStructure( void )
{
- SFG_Window *window;
- SFG_Menu *menu;
+ SFG_Window *window;
+ SFG_Menu *menu;
- freeglut_assert_ready;
+ freeglut_assert_ready;
- /*
- * Make sure all windows and menus have been deallocated
- */
- while( (menu = (SFG_Menu *)fgStructure.Menus.First) != NULL )
- fgDestroyMenu( menu );
+ /*
+ * Make sure all windows and menus have been deallocated
+ */
+ while( menu = ( SFG_Menu * )fgStructure.Menus.First )
+ fgDestroyMenu( menu );
- while( (window = (SFG_Window *)fgStructure.Windows.First) != NULL )
- fgDestroyWindow( window, TRUE );
+ while( window = ( SFG_Window * )fgStructure.Windows.First )
+ fgDestroyWindow( window, TRUE );
}
/*
*/
void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator )
{
- SFG_Window *window;
-
- assert( (enumCallback != NULL) && (enumerator != NULL) );
- freeglut_assert_ready;
-
- /*
- * Check every of the top-level windows
- */
- for( window = (SFG_Window *)fgStructure.Windows.First;
- window;
- window = (SFG_Window *)window->Node.Next )
- {
- enumCallback( window, enumerator );
- if( enumerator->found == TRUE )
- return;
- }
+ SFG_Window *window;
+
+ assert( enumCallback && enumerator );
+ freeglut_assert_ready;
+
+ /*
+ * Check every of the top-level windows
+ */
+ for( window = ( SFG_Window * )fgStructure.Windows.First;
+ window;
+ window = ( SFG_Window * )window->Node.Next )
+ {
+ enumCallback( window, enumerator );
+ if( enumerator->found == TRUE )
+ return;
+ }
}
/*
void fgEnumSubWindows( SFG_Window* window, FGCBenumerator enumCallback,
SFG_Enumerator* enumerator )
{
- SFG_Window *child;
-
- assert( (enumCallback != NULL) && (enumerator != NULL) );
- freeglut_assert_ready;
-
- for( child = (SFG_Window *)window->Children.First;
- child;
- child = (SFG_Window *)child->Node.Next )
- {
- enumCallback( child, enumerator );
- if( enumerator->found == TRUE )
- return;
- }
+ SFG_Window *child;
+
+ assert( enumCallback && enumerator );
+ freeglut_assert_ready;
+
+ for( child = ( SFG_Window * )window->Children.First;
+ child;
+ child = ( SFG_Window * )child->Node.Next )
+ {
+ enumCallback( child, enumerator );
+ if( enumerator->found == TRUE )
+ return;
+ }
}
/*
{
SFG_Node *ln;
- if ( (ln = (SFG_Node *)node->Next) != NULL )
+ if( ln = (SFG_Node *)node->Next )
ln->Prev = node->Prev;
- if ( (ln = (SFG_Node *)node->Prev) != NULL )
+ if( ln = (SFG_Node *)node->Prev )
ln->Next = node->Next;
- if ( (ln = (SFG_Node *)list->First) == node )
+ if( ( ln = (SFG_Node *)list->First ) == node )
list->First = node->Next;
- if ( (ln = (SFG_Node *)list->Last) == node )
+ if( ( ln = (SFG_Node *)list->Last ) == node )
list->Last = node->Prev;
}
SFG_Node *node;
int length = 0;
- for( node = (SFG_Node *)list->First; node; node = (SFG_Node *)node->Next )
+ for( node =( SFG_Node * )list->First;
+ node;
+ node = ( SFG_Node * )node->Next )
++length;
return length;