* If parent is set to NULL, the window created will be a topmost one.
*/
SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
- int x, int y, int w, int h, GLboolean gameMode )
+ int x, int y, int w, int h,
+ GLboolean gameMode, GLboolean isMenu )
{
/*
* Have the window object created
* If the freeglut internals haven't been initialized yet,
* do it now. Hack's idea courtesy of Chris Purnell...
*/
- if( !fgState.Initalized )
+ if( !fgState.Initialised )
glutInit( &fakeArgc, NULL );
/*
window->ID = ++fgStructure.WindowID;
fgListInit( &window->Children );
- if( parent != NULL )
+ if( parent )
{
fgListAppend( &parent->Children, &window->Node );
window->Parent = parent;
* Set the default mouse cursor and reset the modifiers value
*/
window->State.Cursor = GLUT_CURSOR_INHERIT;
- window->State.Modifiers = 0xffffffff;
- window->IsMenu = fgState.BuildingAMenu ;
+ window->IsMenu = isMenu;
/*
* Open the window now. The fgOpenWindow() function is system
* dependant, and resides in freeglut_window.c. Uses fgState.
*/
fgOpenWindow( window, title, x, y, w, h, gameMode,
- (parent != NULL) ? TRUE : FALSE );
+ parent ? GL_TRUE : GL_FALSE );
return window;
}
* If the freeglut internals haven't been initialized yet,
* do it now. Hack's idea courtesy of Chris Purnell...
*/
- if( !fgState.Initalized )
+ if( !fgState.Initialised )
glutInit( &fakeArgc, NULL );
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.
+ * Create a window for the menu to reside in.
*/
- fgState.BuildingAMenu = TRUE;
- fgCreateWindow( NULL, NULL, x, y, w, h, FALSE );
+ fgCreateWindow( NULL, NULL, x, y, w, h, GL_FALSE, GL_TRUE );
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;
-
glutHideWindow( ); /* Hide the window for now */
fgSetWindow( current_window );
FETCH_WCB( *window, Destroy ) = destroy;
}
-
- /*
- * If the destroyed window has the highest window ID number, decrement
- * the window ID number.
- *
- * XXX Do we REALLY want to *ever* recycle window IDs? Integers are
- * XXX plentiful, and clients may rely upon the implied promise in
- * XXX the GLUT docs to not recycle these. (I can't remember if it
- * XXX is explicit.)
- *
- * XXX If we *do* want to do this, we should actually recompute the
- * XXX highest window-ID; the new highest may not in fact be one less
- * XXX than what we have just deleted.
- */
- if ( window->ID == fgStructure.WindowID )
- fgStructure.WindowID--;
-
/*
* Check the execution state. If this has been called from
* "glutDestroyWindow", a statement in that function will reset the
while( subWindow = ( SFG_Window * )window->Children.First )
fgDestroyWindow( subWindow, needToClose );
- /*
- * XXX Since INVOKE_WCB() tests the function pointer, why not make
- * 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 ) )
{
SFG_Window *activeWindow = fgStructure.Window ;
INVOKE_WCB( *window, Destroy, ( ) );
- fgSetWindow ( activeWindow ) ;
+ fgSetWindow ( activeWindow );
}
if( window->Parent )
for ( menu_index = 0; menu_index < 3; menu_index ++ )
{
- if ( window->Menu[menu_index] != NULL )
+ if ( window->Menu[menu_index] )
window->Menu[menu_index]->ParentWindow = NULL ;
}
fgClearCallBacks( window );
- if( needToClose == TRUE )
+ if( needToClose )
fgCloseWindow( window );
free( window );
if( fgStructure.Window == window )
if( fgStructure.Window == menu->Window )
fgSetWindow( menu->ParentWindow );
- fgDestroyWindow( menu->Window, TRUE );
+ fgDestroyWindow( menu->Window, GL_TRUE );
fgListRemove( &fgStructure.Menus, &menu->Node );
if( fgStructure.Menu == menu )
fgStructure.Menu = NULL;
fgDestroyMenu( menu );
while( window = ( SFG_Window * )fgStructure.Windows.First )
- fgDestroyWindow( window, TRUE );
+ fgDestroyWindow( window, GL_TRUE );
}
/*
window = ( SFG_Window * )window->Node.Next )
{
enumCallback( window, enumerator );
- if( enumerator->found == TRUE )
+ if( enumerator->found )
return;
}
}
child = ( SFG_Window * )child->Node.Next )
{
enumCallback( child, enumerator );
- if( enumerator->found == TRUE )
+ if( enumerator->found )
return;
}
}
static void fghcbWindowByHandle( SFG_Window *window,
SFG_Enumerator *enumerator )
{
- freeglut_return_if_fail( enumerator->found == FALSE );
-
-#if TARGET_HOST_UNIX_X11
- #define WBHANDLE (Window)
-#elif TARGET_HOST_WIN32
- #define WBHANDLE (HWND)
-#endif
+ if ( enumerator->found )
+ return;
/*
* Check the window's handle. Hope this works. Looks ugly. That's for sure.
*/
- if( window->Window.Handle == WBHANDLE (enumerator->data) )
+ if( window->Window.Handle == (SFG_WindowHandleType) (enumerator->data) )
{
- enumerator->found = TRUE;
+ enumerator->found = GL_TRUE;
enumerator->data = window;
return;
* Otherwise, check this window's children
*/
fgEnumSubWindows( window, fghcbWindowByHandle, enumerator );
-
-#undef WBHANDLE
}
/*
* first window in the queue matching the specified window handle.
* The function is defined in freeglut_structure.c file.
*/
-SFG_Window* fgWindowByHandle
-#if TARGET_HOST_UNIX_X11
-( Window hWindow )
-#elif TARGET_HOST_WIN32
-( HWND hWindow )
-#endif
+SFG_Window* fgWindowByHandle ( SFG_WindowHandleType hWindow )
{
SFG_Enumerator enumerator;
/*
* This is easy and makes use of the windows enumeration defined above
*/
- enumerator.found = FALSE;
+ enumerator.found = GL_FALSE;
enumerator.data = (void *)hWindow;
fgEnumWindows( fghcbWindowByHandle, &enumerator );
- if( enumerator.found == TRUE )
+ if( enumerator.found )
return( SFG_Window *) enumerator.data;
return NULL;
}
/*
* Make sure we do not overwrite our precious results...
*/
- freeglut_return_if_fail( enumerator->found == FALSE );
+ if ( enumerator->found )
+ return;
/*
* Check the window's handle. Hope this works. Looks ugly. That's for sure.
*/
if( window->ID == (int) (enumerator->data) ) /* XXX int/ptr conversion! */
{
- enumerator->found = TRUE;
+ enumerator->found = GL_TRUE;
enumerator->data = window;
return;
/*
* Uses a method very similiar for fgWindowByHandle...
*/
- enumerator.found = FALSE;
+ enumerator.found = GL_FALSE;
enumerator.data = (void *) windowID; /* XXX int/pointer conversion! */
fgEnumWindows( fghcbWindowByID, &enumerator );
- if( enumerator.found == TRUE )
+ if( enumerator.found )
return( SFG_Window *) enumerator.data;
return NULL;
}
{
SFG_Node *ln;
- if ( (ln = (SFG_Node *)list->Last) != NULL )
+ if ( ln = (SFG_Node *)list->Last )
{
ln->Next = node;
node->Prev = ln;
ln->Prev = node->Prev;
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;
}