X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_menu.c;h=bdff2a530eb5acdf9508468f476e408f48e6faf0;hb=5422ecc3a08d6c8a85b4693d227079c4d7ff0108;hp=464081e668ddfa0416d07f18fcde30455c54724c;hpb=fbc36ed71c03ab6aa7b06919d57abfe12b471e18;p=freeglut diff --git a/src/freeglut_menu.c b/src/freeglut_menu.c index 464081e..bdff2a5 100644 --- a/src/freeglut_menu.c +++ b/src/freeglut_menu.c @@ -29,7 +29,7 @@ #include "config.h" #endif -#include "../include/GL/freeglut.h" +#include #include "freeglut_internal.h" /* -- DEFINITIONS ---------------------------------------------------------- */ @@ -124,10 +124,10 @@ static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu ) menuEntry; menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next ) { - if( menuEntry->SubMenu && ( menuEntry->IsActive == TRUE ) ) + if( menuEntry->SubMenu && menuEntry->IsActive ) { /* - * OK, have the sub-menu checked, too. If it returns TRUE, it + * OK, have the sub-menu checked, too. If it returns GL_TRUE, it * will mean that it caught the mouse cursor and we do not need * to regenerate the activity list, and so our parents do... */ @@ -138,9 +138,9 @@ static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu ) * Reactivate the submenu as the checkMenuStatus may have turned * it off if the mouse is in its parent menu entry. */ - menuEntry->SubMenu->IsActive = TRUE; - if ( return_status == TRUE ) - return TRUE; + menuEntry->SubMenu->IsActive = GL_TRUE; + if ( return_status ) + return GL_TRUE; } } @@ -153,9 +153,9 @@ static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu ) for( menuEntry = (SFG_MenuEntry *)menu->Entries.First; menuEntry; menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next ) - menuEntry->IsActive = FALSE; + menuEntry->IsActive = GL_FALSE; - menu->IsActive = FALSE; + menu->IsActive = GL_FALSE; /* * Check if the mouse cursor is contained within the current menu box @@ -174,7 +174,7 @@ static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu ) menuEntry = fghFindMenuEntry( menu, menuID + 1 ); assert( menuEntry ); - menuEntry->IsActive = TRUE; + menuEntry->IsActive = GL_TRUE; menuEntry->Ordinal = menuID; /* @@ -183,13 +183,11 @@ static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu ) * was a submenu then deactivate it. */ if( menu->ActiveEntry && ( menuEntry != menu->ActiveEntry ) ) - { if( menu->ActiveEntry->SubMenu ) fgDeactivateSubMenu( menu->ActiveEntry ); - } menu->ActiveEntry = menuEntry; - menu->IsActive = TRUE; + menu->IsActive = GL_TRUE; /* * OKi, we have marked that entry as active, but it would be also @@ -205,7 +203,7 @@ static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu ) /* * Set up the initial menu position now... */ - menuEntry->SubMenu->IsActive = TRUE; + menuEntry->SubMenu->IsActive = GL_TRUE; /* * Set up the initial submenu position now: @@ -241,19 +239,19 @@ static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu ) /* * Activate it because its parent entry is active */ - menuEntry->SubMenu->IsActive = TRUE; + menuEntry->SubMenu->IsActive = GL_TRUE; } /* * Report back that we have caught the menu cursor */ - return TRUE; + return GL_TRUE; } /* * Looks like the menu cursor is somewhere else... */ - return FALSE; + return GL_FALSE; } /* @@ -272,31 +270,31 @@ static void fghDisplayMenuBox( SFG_Menu* menu ) /* a non-black dark version of the below. */ glColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); glBegin( GL_QUAD_STRIP ); - glVertex2i( menu->Width , 0 ); - glVertex2i( menu->Width-border, border); - glVertex2i( 0 , 0 ); - glVertex2i( border, border); - glVertex2i( 0 , menu->Height ); - glVertex2i( border, menu->Height-border); + glVertex2i( menu->Width , 0 ); + glVertex2i( menu->Width - border, border); + glVertex2i( 0 , 0 ); + glVertex2i( border, border); + glVertex2i( 0 , menu->Height ); + glVertex2i( border, menu->Height - border); glEnd( ); /* a non-black dark version of the below. */ glColor4f( 0.5f, 0.5f, 0.5f, 1.0f ); glBegin( GL_QUAD_STRIP ); - glVertex2i( 0 , menu->Height ); - glVertex2i( border, menu->Height-border); - glVertex2i( menu->Width , menu->Height ); - glVertex2i( menu->Width-border, menu->Height-border); - glVertex2i( menu->Width , 0 ); - glVertex2i( menu->Width-border, border); + glVertex2i( 0 , menu->Height ); + glVertex2i( border, menu->Height - border); + glVertex2i( menu->Width , menu->Height ); + glVertex2i( menu->Width - border, menu->Height - border); + glVertex2i( menu->Width , 0 ); + glVertex2i( menu->Width - border, border); glEnd( ); - glColor4fv( menu_pen_back ) ; + glColor4fv( menu_pen_back ); glBegin( GL_QUADS ); - glVertex2i( border, border); - glVertex2i( menu->Width-border, border); - glVertex2i( menu->Width-border, menu->Height-border); - glVertex2i( border, menu->Height-border); + glVertex2i( border, border); + glVertex2i( menu->Width - border, border); + glVertex2i( menu->Width - border, menu->Height - border); + glVertex2i( border, menu->Height - border); glEnd( ); /* @@ -309,7 +307,7 @@ static void fghDisplayMenuBox( SFG_Menu* menu ) /* * Has the menu been marked as active, maybe? */ - if( menuEntry->IsActive == TRUE ) + if( menuEntry->IsActive ) { /* * That's truly right, and we need to have it highlighted. @@ -323,18 +321,14 @@ static void fghDisplayMenuBox( SFG_Menu* menu ) */ glColor4fv( menu_pen_hback ); glBegin( GL_QUADS ); - glVertex2i( FREEGLUT_MENU_BORDER, - (menuID + 0)*FREEGLUT_MENU_HEIGHT + - FREEGLUT_MENU_BORDER ); - glVertex2i( menu->Width-FREEGLUT_MENU_BORDER, - (menuID + 0)*FREEGLUT_MENU_HEIGHT + - FREEGLUT_MENU_BORDER ); - glVertex2i( menu->Width-FREEGLUT_MENU_BORDER, - (menuID + 1)*FREEGLUT_MENU_HEIGHT + - FREEGLUT_MENU_BORDER ); - glVertex2i( FREEGLUT_MENU_BORDER, - (menuID + 1)*FREEGLUT_MENU_HEIGHT + - FREEGLUT_MENU_BORDER ); + glVertex2i( border, + (menuID + 0)*FREEGLUT_MENU_HEIGHT + border ); + glVertex2i( menu->Width - border, + (menuID + 0)*FREEGLUT_MENU_HEIGHT + border ); + glVertex2i( menu->Width - border, + (menuID + 1)*FREEGLUT_MENU_HEIGHT + border ); + glVertex2i( border, + (menuID + 1)*FREEGLUT_MENU_HEIGHT + border ); glEnd( ); } } @@ -345,7 +339,7 @@ static void fghDisplayMenuBox( SFG_Menu* menu ) glColor4fv( menu_pen_fore ); - for( menuEntry = (SFG_MenuEntry *)menu->Entries.First, i=0; + for( menuEntry = (SFG_MenuEntry *)menu->Entries.First, i = 0; menuEntry; menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next, ++i ) { @@ -360,15 +354,16 @@ static void fghDisplayMenuBox( SFG_Menu* menu ) */ /* Try to center the text - JCJ 31 July 2003*/ glRasterPos2i( - 2 * FREEGLUT_MENU_BORDER, - (i + 1)*FREEGLUT_MENU_HEIGHT-(int)( FREEGLUT_MENU_HEIGHT*0.3 - - FREEGLUT_MENU_BORDER ) + 2 * border, + ( i + 1 )*FREEGLUT_MENU_HEIGHT - + ( int )( FREEGLUT_MENU_HEIGHT*0.3 - border ) ); /* * Have the label drawn, character after character: */ - glutBitmapString( FREEGLUT_MENU_FONT, menuEntry->Text); + glutBitmapString( FREEGLUT_MENU_FONT, + (unsigned char *)menuEntry->Text); /* * If it's a submenu, draw a right arrow @@ -377,14 +372,12 @@ static void fghDisplayMenuBox( SFG_Menu* menu ) { int width = glutBitmapWidth( FREEGLUT_MENU_FONT, '_' ); int x_base = menu->Width - 2 - width; - int y_base = i*FREEGLUT_MENU_HEIGHT + FREEGLUT_MENU_BORDER; + int y_base = i*FREEGLUT_MENU_HEIGHT + border; glBegin( GL_TRIANGLES ); - glVertex2i( x_base, y_base + 2*FREEGLUT_MENU_BORDER); + glVertex2i( x_base, y_base + 2*border); glVertex2i( menu->Width - 2, y_base + - ( FREEGLUT_MENU_HEIGHT + - FREEGLUT_MENU_BORDER) / 2 ); - glVertex2i( x_base, y_base + FREEGLUT_MENU_HEIGHT - - FREEGLUT_MENU_BORDER); + ( FREEGLUT_MENU_HEIGHT + border) / 2 ); + glVertex2i( x_base, y_base + FREEGLUT_MENU_HEIGHT - border ); glEnd( ); } @@ -398,14 +391,14 @@ static void fghDisplayMenuBox( SFG_Menu* menu ) /* * Now we are ready to check if any of our children needs to be redrawn: */ - for( menuEntry = (SFG_MenuEntry *)menu->Entries.First; + for( menuEntry = ( SFG_MenuEntry * )menu->Entries.First; menuEntry; - menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next ) + menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next ) { /* * Is that an active sub menu by any case? */ - if( menuEntry->SubMenu && ( menuEntry->IsActive == TRUE ) ) + if( menuEntry->SubMenu && menuEntry->IsActive ) { /* * Yeah, indeed. Have it redrawn now: @@ -421,17 +414,17 @@ static void fghDisplayMenuBox( SFG_Menu* menu ) * Private static function to set the parent window of a submenu and all * of its submenus */ -static void fghSetSubmenuParentWindow ( SFG_Window *window, SFG_Menu *menu ) +static void fghSetSubmenuParentWindow( SFG_Window *window, SFG_Menu *menu ) { SFG_MenuEntry *menuEntry; menu->ParentWindow = window; - for( menuEntry = (SFG_MenuEntry *)menu->Entries.First; + for( menuEntry = ( SFG_MenuEntry * )menu->Entries.First; menuEntry; - menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next ) - if ( menuEntry->SubMenu ) - fghSetSubmenuParentWindow ( window, menuEntry->SubMenu ) ; + menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next ) + if( menuEntry->SubMenu ) + fghSetSubmenuParentWindow( window, menuEntry->SubMenu ); } @@ -443,26 +436,16 @@ void fgDisplayMenu( void ) SFG_Window* window = fgStructure.Window; SFG_Menu* menu = NULL; - /* - * Make sure there is a current window available - */ freeglut_assert_window; /* * Check if there is an active menu attached to this window... */ menu = window->ActiveMenu; - - /* - * Did we find an active menu? - */ freeglut_return_if_fail( menu ); - fgSetWindow ( menu->Window ); + fgSetWindow( menu->Window ); - /* - * Prepare the OpenGL state to do the rendering first: - */ glPushAttrib( GL_DEPTH_BUFFER_BIT | GL_TEXTURE_BIT | GL_LIGHTING_BIT | GL_POLYGON_BIT ); @@ -471,38 +454,22 @@ void fgDisplayMenu( void ) glDisable( GL_LIGHTING ); glDisable( GL_CULL_FACE ); - /* - * We'll use an orthogonal projection matrix to draw the menu: - */ glMatrixMode( GL_PROJECTION ); - glPushMatrix(); - glLoadIdentity(); + glPushMatrix( ); + glLoadIdentity( ); glOrtho( 0, glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ), 0, -1, 1 ); - /* - * Model-view matix gets reset to identity: - */ glMatrixMode( GL_MODELVIEW ); - glPushMatrix(); - glLoadIdentity(); + glPushMatrix( ); + glLoadIdentity( ); - /* - * First of all, have the exact menu status check: - */ fghCheckMenuStatus( window, menu ); - - /* - * The status has been updated and we're ready to have the menu drawn now: - */ fghDisplayMenuBox( menu ); - /* - * Restore the old OpenGL settings now - */ glPopAttrib( ); glMatrixMode( GL_PROJECTION ); @@ -512,9 +479,6 @@ void fgDisplayMenu( void ) glutSwapBuffers( ); - /* - * Restore the current window - */ fgSetWindow ( window ); } @@ -532,13 +496,12 @@ void fgActivateMenu( SFG_Window* window, int button ) * Mark the menu as active, so that it gets displayed: */ window->ActiveMenu = menu; - menu->IsActive = TRUE; + menu->IsActive = GL_TRUE; fgState.ActiveMenus++; /* * Set up the initial menu position now: */ - menu->X = window->State.MouseX + glutGet( GLUT_WINDOW_X ); menu->Y = window->State.MouseY + glutGet( GLUT_WINDOW_Y ); @@ -590,34 +553,13 @@ void fgExecuteMenuCallback( SFG_Menu* menu ) menuEntry; menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next) { - /* - * Is this menu entry active? - */ - if( menuEntry->IsActive == TRUE ) + if( menuEntry->IsActive ) { - /* - * If there is not a sub menu, execute the menu callback and - * return... - */ - if( !( menuEntry->SubMenu ) ) - { - /* - * ...certainly given that there is one... - */ + if( menuEntry->SubMenu ) + fgExecuteMenuCallback( menuEntry->SubMenu ); + else if( menu->Callback ) menu->Callback( menuEntry->ID ); - - return; - } - - /* - * Otherwise recurse into the submenu. - */ - fgExecuteMenuCallback( menuEntry->SubMenu ); - - /* - * There is little sense in dwelling the search on - */ return; } } @@ -652,16 +594,16 @@ void fgDeactivateMenu( SFG_Window *window ) */ menu->Window->ActiveMenu = NULL; menu->ParentWindow->ActiveMenu = NULL; - menu->IsActive = FALSE; + menu->IsActive = GL_FALSE; fgState.ActiveMenus--; /* * Hide all submenu windows, and the root menu's window. */ - for ( menuEntry = (SFG_MenuEntry *)menu->Entries.First; + for ( menuEntry = ( SFG_MenuEntry * )menu->Entries.First; menuEntry; - menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next ) + menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next ) { /* * Is that an active submenu by any case? @@ -670,7 +612,7 @@ void fgDeactivateMenu( SFG_Window *window ) fgDeactivateSubMenu( menuEntry ); } - fgSetWindow ( current_window ) ; + fgSetWindow( current_window ); } /* @@ -690,7 +632,7 @@ void fgDeactivateSubMenu( SFG_MenuEntry *menuEntry ) * Forget about having that menu active anymore, now: */ menuEntry->SubMenu->Window->ActiveMenu = NULL; - menuEntry->SubMenu->IsActive = FALSE; + menuEntry->SubMenu->IsActive = GL_FALSE; /* * Hide all submenu windows, and the root menu's window. @@ -726,22 +668,27 @@ void fghCalculateMenuBoxSize( void ) /* * The menu's box size depends on the menu entries: */ - for( menuEntry = (SFG_MenuEntry *)fgStructure.Menu->Entries.First; + for( menuEntry = ( SFG_MenuEntry * )fgStructure.Menu->Entries.First; menuEntry; - menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next) + menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next ) { /* * Update the menu entry's width value */ - menuEntry->Width = glutBitmapLength( FREEGLUT_MENU_FONT, - menuEntry->Text ); + menuEntry->Width = glutBitmapLength( + FREEGLUT_MENU_FONT, + (unsigned char *)menuEntry->Text + ); /* * If the entry is a submenu, then it needs to be wider to * accomodate the arrow. JCJ 31 July 2003 */ if (menuEntry->SubMenu ) - menuEntry->Width += glutBitmapLength( FREEGLUT_MENU_FONT, "_" ); + menuEntry->Width += glutBitmapLength( + FREEGLUT_MENU_FONT, + (unsigned char *)"_" + ); /* * Check if it's the biggest we've found @@ -765,7 +712,7 @@ void fghCalculateMenuBoxSize( void ) /* * Creates a new menu object, adding it to the freeglut structure */ -int FGAPIENTRY glutCreateMenu( void (* callback)( int ) ) +int FGAPIENTRY glutCreateMenu( void(* callback)( int ) ) { /* * The menu object creation code resides in freeglut_structure.c @@ -840,17 +787,17 @@ void FGAPIENTRY glutAddMenuEntry( const char* label, int value ) /* * Add a sub menu to the bottom of the current menu */ -void FGAPIENTRY glutAddSubMenu( const char* label, int subMenuID ) +void FGAPIENTRY glutAddSubMenu( const char *label, int subMenuID ) { - SFG_MenuEntry* menuEntry = - (SFG_MenuEntry *)calloc( sizeof(SFG_MenuEntry), 1 ); - SFG_Menu* subMenu = fgMenuByID( 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->Text = strdup( label ); menuEntry->SubMenu = subMenu; menuEntry->ID = -1; @@ -886,7 +833,7 @@ void FGAPIENTRY glutChangeToMenuEntry( int item, const char* label, int value ) if( menuEntry->Text ) free( menuEntry->Text ); - menuEntry->Text = strdup( label ); + menuEntry->Text = strdup( label ); menuEntry->ID = value; menuEntry->SubMenu = NULL; fghCalculateMenuBoxSize( ); @@ -895,7 +842,8 @@ void FGAPIENTRY glutChangeToMenuEntry( int item, const char* label, int value ) /* * Changes the specified menu item in the current menu into a sub-menu trigger. */ -void FGAPIENTRY glutChangeToSubMenu( int item, const char* label, int subMenuID ) +void FGAPIENTRY glutChangeToSubMenu( int item, const char* label, + int subMenuID ) { SFG_Menu* subMenu = fgMenuByID( subMenuID ); SFG_MenuEntry* menuEntry = NULL; @@ -917,7 +865,7 @@ void FGAPIENTRY glutChangeToSubMenu( int item, const char* label, int subMenuID if( menuEntry->Text ) free( menuEntry->Text ); - menuEntry->Text = strdup( label ); + menuEntry->Text = strdup( label ); menuEntry->SubMenu = subMenu; menuEntry->ID = -1; fghCalculateMenuBoxSize( ); @@ -966,7 +914,7 @@ void FGAPIENTRY glutAttachMenu( int button ) /* * Make the parent window of the menu (and all submenus) the current window */ - fghSetSubmenuParentWindow ( fgStructure.Window, fgStructure.Menu ) ; + fghSetSubmenuParentWindow( fgStructure.Window, fgStructure.Menu ); } /*