X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=sidebyside;f=src%2Ffreeglut_structure.c;h=6e1f542fb28c9ad36e860638c9765446babf66e4;hb=006650e1dd72e73249d41e2bcea8b1668262a999;hp=cd3a78147dddcbc0ecc128befabf5d7a70b867bc;hpb=34290224a4fea01b30fe3c83d3c6d00bd5945acd;p=freeglut diff --git a/src/freeglut_structure.c b/src/freeglut_structure.c index cd3a781..6e1f542 100644 --- a/src/freeglut_structure.c +++ b/src/freeglut_structure.c @@ -29,7 +29,7 @@ #include "config.h" #endif -#include "../include/GL/freeglut.h" +#include #include "freeglut_internal.h" @@ -53,7 +53,7 @@ SFG_Structure fgStructure = { { NULL, NULL }, /* The list of windows */ /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ -void fgClearCallBacks( SFG_Window *window ) +static void fghClearCallBacks( SFG_Window *window ) { if( window ) { @@ -73,13 +73,11 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title, int x, int y, int w, int h, GLboolean gameMode, GLboolean isMenu ) { - /* - * Have the window object created - */ + /* Have the window object created */ SFG_Window *window = (SFG_Window *)calloc( sizeof(SFG_Window), 1 ); int fakeArgc = 0; - fgClearCallBacks( window ); + fghClearCallBacks( window ); /* * If the freeglut internals haven't been initialized yet, @@ -88,9 +86,7 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title, if( !fgState.Initialised ) glutInit( &fakeArgc, NULL ); - /* - * Initialize the object properties - */ + /* Initialize the object properties */ window->ID = ++fgStructure.WindowID; window->State.OldHeight = window->State.OldWidth = -1; @@ -103,13 +99,14 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title, else fgListAppend( &fgStructure.Windows, &window->Node ); - /* - * Set the default mouse cursor and reset the modifiers value - */ + /* Set the default mouse cursor and reset the modifiers value */ window->State.Cursor = GLUT_CURSOR_INHERIT; window->IsMenu = isMenu; + window->State.IgnoreKeyRepeat = GL_FALSE; + window->State.KeyRepeating = GL_FALSE; + /* * Open the window now. The fgOpenWindow() function is system * dependant, and resides in freeglut_window.c. Uses fgState. @@ -128,9 +125,7 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback ) int x = 100, y = 100, w = 100, h = 100; SFG_Window *current_window = fgStructure.Window; - /* - * Have the menu object created - */ + /* Have the menu object created */ SFG_Menu* menu = (SFG_Menu *)calloc( sizeof(SFG_Menu), 1 ); int fakeArgc = 0; @@ -143,20 +138,16 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback ) menu->ParentWindow = fgStructure.Window; - /* - * Create a window for the menu to reside in. - */ + /* Create a window for the menu to reside in. */ - fgCreateWindow( NULL, NULL, x, y, w, h, GL_FALSE, GL_TRUE ); + fgCreateWindow( NULL, "freeglut menu", x, y, w, h, GL_FALSE, GL_TRUE ); menu->Window = fgStructure.Window; glutDisplayFunc( fgDisplayMenu ); glutHideWindow( ); /* Hide the window for now */ fgSetWindow( current_window ); - /* - * Initialize the object properties: - */ + /* Initialize the object properties: */ menu->ID = ++fgStructure.MenuID; menu->Callback = menuCallback; menu->ActiveEntry = NULL; @@ -164,9 +155,7 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback ) fgListInit( &menu->Entries ); fgListAppend( &fgStructure.Menus, &menu->Node ); - /* - * Newly created menus implicitly become current ones - */ + /* Newly created menus implicitly become current ones */ fgStructure.Menu = menu; return menu; @@ -184,9 +173,7 @@ void fgAddToWindowDestroyList( SFG_Window* window ) new_list_entry->window = window; fgListAppend( &fgStructure.WindowsToDestroy, &new_list_entry->node ); - /* - * Check if the window is the current one... - */ + /* Check if the window is the current one... */ if( fgStructure.Window == window ) fgStructure.Window = NULL; @@ -200,7 +187,7 @@ void fgAddToWindowDestroyList( SFG_Window* window ) */ { FGCBDestroy destroy = FETCH_WCB( *window, Destroy ); - fgClearCallBacks( window ); + fghClearCallBacks( window ); SET_WCB( *window, Destroy, destroy ); } } @@ -252,7 +239,7 @@ void fgDestroyWindow( SFG_Window* window ) if( window->Menu[ menu_index ] ) window->Menu[ menu_index ]->ParentWindow = NULL; - fgClearCallBacks( window ); + fghClearCallBacks( window ); fgCloseWindow( window ); free( window ); if( fgStructure.Window == window ) @@ -276,9 +263,7 @@ static void fghRemoveMenuFromWindow( SFG_Window* window, SFG_Menu* menu ) if( window->Menu[ i ] == menu ) window->Menu[ i ] = NULL; - /* - * Call this function for all of the window's children recursively: - */ + /* Call this function for all of the window's children recursively: */ for( subWindow = (SFG_Window *)window->Children.First; subWindow; subWindow = (SFG_Window *)subWindow->Node.Next) @@ -312,17 +297,13 @@ void fgDestroyMenu( SFG_Menu* menu ) assert( menu ); freeglut_assert_ready; - /* - * First of all, have all references to this menu removed from all windows: - */ + /* 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 - */ + /* 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 ) @@ -395,17 +376,13 @@ void fgDestroyStructure( void ) { freeglut_assert_ready; - /* - * Clean up the WindowsToDestroy list. - */ + /* Clean up the WindowsToDestroy list. */ fgCloseWindows( ); - /* - * Make sure all windows and menus have been deallocated - */ + /* Make sure all windows and menus have been deallocated */ while( fgStructure.Menus.First ) fgDestroyMenu( ( SFG_Menu * )fgStructure.Menus.First ); - + while( fgStructure.Windows.First ) fgDestroyWindow( ( SFG_Window * )fgStructure.Windows.First ); } @@ -420,9 +397,7 @@ void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator ) assert( enumCallback && enumerator ); freeglut_assert_ready; - /* - * Check every of the top-level windows - */ + /* Check every of the top-level windows */ for( window = ( SFG_Window * )fgStructure.Windows.First; window; window = ( SFG_Window * )window->Node.Next ) @@ -464,9 +439,7 @@ static void fghcbWindowByHandle( SFG_Window *window, if ( enumerator->found ) return; - /* - * Check the window's handle. Hope this works. Looks ugly. That's for sure. - */ + /* Check the window's handle. Hope this works. Looks ugly. That's for sure. */ if( window->Window.Handle == (SFG_WindowHandleType) (enumerator->data) ) { enumerator->found = GL_TRUE; @@ -475,9 +448,7 @@ static void fghcbWindowByHandle( SFG_Window *window, return; } - /* - * Otherwise, check this window's children - */ + /* Otherwise, check this window's children */ fgEnumSubWindows( window, fghcbWindowByHandle, enumerator ); } @@ -490,9 +461,7 @@ SFG_Window* fgWindowByHandle ( SFG_WindowHandleType hWindow ) { SFG_Enumerator enumerator; - /* - * This is easy and makes use of the windows enumeration defined above - */ + /* This is easy and makes use of the windows enumeration defined above */ enumerator.found = GL_FALSE; enumerator.data = (void *)hWindow; fgEnumWindows( fghcbWindowByHandle, &enumerator ); @@ -507,15 +476,11 @@ SFG_Window* fgWindowByHandle ( SFG_WindowHandleType hWindow ) */ static void fghcbWindowByID( SFG_Window *window, SFG_Enumerator *enumerator ) { - /* - * Make sure we do not overwrite our precious results... - */ + /* Make sure we do not overwrite our precious results... */ if( enumerator->found ) return; - /* - * Check the window's handle. Hope this works. Looks ugly. That's for sure. - */ + /* Check the window's handle. Hope this works. Looks ugly. That's for sure. */ if( window->ID == *( int *)(enumerator->data) ) { enumerator->found = GL_TRUE; @@ -524,9 +489,7 @@ static void fghcbWindowByID( SFG_Window *window, SFG_Enumerator *enumerator ) return; } - /* - * Otherwise, check this window's children - */ + /* Otherwise, check this window's children */ fgEnumSubWindows( window, fghcbWindowByID, enumerator ); } @@ -539,9 +502,7 @@ SFG_Window* fgWindowByID( int windowID ) { SFG_Enumerator enumerator; - /* - * Uses a method very similiar for fgWindowByHandle... - */ + /* Uses a method very similiar for fgWindowByHandle... */ enumerator.found = GL_FALSE; enumerator.data = ( void * )&windowID; fgEnumWindows( fghcbWindowByID, &enumerator ); @@ -552,7 +513,7 @@ SFG_Window* fgWindowByID( int windowID ) /* * Looks up a menu given its ID. This is easier that fgWindowByXXX - * as all menus are placed in a single doubly linked list... + * as all menus are placed in one doubly linked list... */ SFG_Menu* fgMenuByID( int menuID ) { @@ -560,9 +521,7 @@ SFG_Menu* fgMenuByID( int menuID ) freeglut_assert_ready; - /* - * It's enough to check all entries in fgStructure.Menus... - */ + /* It's enough to check all entries in fgStructure.Menus... */ for( menu = (SFG_Menu *)fgStructure.Menus.First; menu; menu = (SFG_Menu *)menu->Node.Next ) @@ -600,15 +559,13 @@ void fgListAppend(SFG_List *list, SFG_Node *node) void fgListRemove(SFG_List *list, SFG_Node *node) { - SFG_Node *ln; - - if( (ln = (SFG_Node *)node->Next) != NULL ) - ln->Prev = node->Prev; - if( (ln = (SFG_Node *)node->Prev) != NULL ) - ln->Next = node->Next; - if( (ln = (SFG_Node *)list->First) == node ) + if( node->Next ) + ( ( SFG_Node * )node->Next )->Prev = node->Prev; + if( node->Prev ) + ( ( SFG_Node * )node->Prev )->Next = node->Next; + if( ( ( SFG_Node * )list->First ) == node ) list->First = node->Next; - if( (ln = (SFG_Node *)list->Last) == node ) + if( ( ( SFG_Node * )list->Last ) == node ) list->Last = node->Prev; }