/* * Changes the specified menu item in the current menu into a sub-menu trigger. */ void FGAPIENTRY glutChangeToSubMenu( int item, const char* label, int subMenuID ) { SFG_Menu* subMenu = fgMenuByID( subMenuID ); SFG_MenuEntry* menuEntry = NULL; freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu ); freeglut_return_if_fail( subMenu ); /* * Get n-th menu entry in the current menu, starting from one: */ menuEntry = fghFindMenuEntry( fgStructure.Menu, item ); freeglut_return_if_fail( menuEntry ); /* * We want it to become a sub menu entry, so: */ if( menuEntry->Text ) free( menuEntry->Text ); menuEntry->Text = strdup( label ); menuEntry->SubMenu = subMenu; menuEntry->ID = -1; fghCalculateMenuBoxSize( ); }
/* * Changes the specified menu item in the current menu into a sub-menu trigger. */ void FGAPIENTRY glutChangeToSubMenu( int item, const char* label, int subMenuID ) { SFG_Menu* subMenu; SFG_MenuEntry* menuEntry; FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutChangeToSubMenu" ); freeglut_return_if_fail( fgStructure.CurrentMenu ); if (fgGetActiveMenu()) fgError("Menu manipulation not allowed while menus in use."); /* Get handle to sub menu */ subMenu = fgMenuByID( subMenuID ); menuEntry = NULL; freeglut_return_if_fail( subMenu ); /* Get n-th menu entry in the current menu, starting from one: */ menuEntry = fghFindMenuEntry( fgStructure.CurrentMenu, item ); freeglut_return_if_fail( menuEntry ); /* We want it to become a sub menu entry, so: */ if( menuEntry->Text ) free( menuEntry->Text ); menuEntry->Text = strdup( label ); menuEntry->SubMenu = subMenu; menuEntry->ID = -1; fghCalculateMenuBoxSize( ); }
/* * Sets the current menu given its menu ID */ void FGAPIENTRY glutSetMenu( int menuID ) { SFG_Menu* menu = fgMenuByID( menuID ); freeglut_assert_ready; freeglut_return_if_fail( menu ); fgStructure.Menu = menu; }
/* * Sets the current menu given its menu ID */ void FGAPIENTRY glutSetMenu( int menuID ) { SFG_Menu* menu; FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetMenu" ); menu = fgMenuByID( menuID ); freeglut_return_if_fail( menu ); fgStructure.CurrentMenu = menu; }
/* * Destroys a menu object, removing all references to it */ void FGAPIENTRY glutDestroyMenu( int menuID ) { SFG_Menu* menu = fgMenuByID( menuID ); freeglut_assert_ready; freeglut_return_if_fail( menu ); /* * The menu object destruction code resides in freeglut_structure.c */ fgDestroyMenu( menu ); }
/* * Destroys a menu object, removing all references to it */ void FGAPIENTRY glutDestroyMenu( int menuID ) { SFG_Menu* menu; FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDestroyMenu" ); menu = fgMenuByID( menuID ); freeglut_return_if_fail( menu ); /* The menu object destruction code resides in freeglut_structure.c */ fgDestroyMenu( menu ); }
/* * Destroys a menu object, removing all references to it */ void FGAPIENTRY glutDestroyMenu( int menuID ) { SFG_Menu* menu; FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDestroyMenu" ); menu = fgMenuByID( menuID ); freeglut_return_if_fail( menu ); if (fgState.ActiveMenus) fgError("Menu manipulation not allowed while menus in use."); /* The menu object destruction code resides in freeglut_structure.c */ fgDestroyMenu( menu ); }
/* * Add a sub menu to the bottom of the current menu */ void FGAPIENTRY glutAddSubMenu( const char *label, int subMenuID ) { SFG_MenuEntry *menuEntry; SFG_Menu *subMenu; FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutAddSubMenu" ); menuEntry = ( SFG_MenuEntry * )calloc( sizeof( SFG_MenuEntry ), 1 ); subMenu = fgMenuByID( subMenuID ); freeglut_return_if_fail( fgStructure.CurrentMenu ); freeglut_return_if_fail( subMenu ); menuEntry->Text = strdup( label ); menuEntry->SubMenu = subMenu; menuEntry->ID = -1; fgListAppend( &fgStructure.CurrentMenu->Entries, &menuEntry->Node ); fghCalculateMenuBoxSize( ); }
/* * Changes the current menu's font */ void FGAPIENTRY glutSetMenuFont( int menuID, void* fontID ) { SFG_Font* font; SFG_Menu* menu; FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetMenuFont" ); menu = fgMenuByID( menuID ); freeglut_return_if_fail( menu ); if (fgState.ActiveMenus) fgError("Menu manipulation not allowed while menus in use."); font = fghFontByID( fontID ); if (!font) { fgWarning("glutChangeMenuFont: bitmap font 0x%08x not found. Make sure you're not passing a stroke font. Ignoring...\n",fontID); return; } fgStructure.CurrentMenu->Font = fontID; fghCalculateMenuBoxSize( ); }
/* * Add a sub menu to the bottom of the current menu */ void FGAPIENTRY glutAddSubMenu( const char *label, int subMenuID ) { SFG_MenuEntry *menuEntry = ( SFG_MenuEntry * )calloc( sizeof( SFG_MenuEntry ), 1 ); SFG_Menu *subMenu = fgMenuByID( subMenuID ); freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu ); freeglut_return_if_fail( subMenu ); menuEntry->Text = strdup( label ); menuEntry->SubMenu = subMenu; menuEntry->ID = -1; /* * Make the submenu's parent window be the menu's parent window */ fghSetSubmenuParentWindow( fgStructure.Menu->ParentWindow, subMenu ); fgListAppend( &fgStructure.Menu->Entries, &menuEntry->Node ); fghCalculateMenuBoxSize( ); }