X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=sidebyside;f=src%2Ffreeglut_menu.c;h=9bffdf9132e8bd7f600e7e5dc0a5200b87a60fb7;hb=38bef7a6c761d0fe47f78efc73b8241e56d83cf7;hp=464081e668ddfa0416d07f18fcde30455c54724c;hpb=fbc36ed71c03ab6aa7b06919d57abfe12b471e18;p=freeglut diff --git a/src/freeglut_menu.c b/src/freeglut_menu.c index 464081e..9bffdf9 100644 --- a/src/freeglut_menu.c +++ b/src/freeglut_menu.c @@ -124,7 +124,7 @@ 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 @@ -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 ) ; 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,9 +354,9 @@ 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 ) ); /* @@ -377,14 +371,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 +390,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 +413,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 +435,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 +453,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 +478,6 @@ void fgDisplayMenu( void ) glutSwapBuffers( ); - /* - * Restore the current window - */ fgSetWindow ( window ); } @@ -532,13 +495,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 +552,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 +593,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 +611,7 @@ void fgDeactivateMenu( SFG_Window *window ) fgDeactivateSubMenu( menuEntry ); } - fgSetWindow ( current_window ) ; + fgSetWindow( current_window ); } /* @@ -690,7 +631,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,9 +667,9 @@ 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 @@ -765,7 +706,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 +781,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 +827,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 +836,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 +859,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 +908,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 ); } /*