projects
/
freeglut
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Removing a set of deprecated joystick functions from "freeglutdll.def" per e-mail...
[freeglut]
/
src
/
freeglut_structure.c
diff --git
a/src/freeglut_structure.c
b/src/freeglut_structure.c
index
6e1f542
..
c1b9145
100644
(file)
--- a/
src/freeglut_structure.c
+++ b/
src/freeglut_structure.c
@@
-25,14
+25,9
@@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
#include <GL/freeglut.h>
#include "freeglut_internal.h"
#include <GL/freeglut.h>
#include "freeglut_internal.h"
-
/* -- GLOBAL EXPORTS ------------------------------------------------------- */
/*
/* -- GLOBAL EXPORTS ------------------------------------------------------- */
/*
@@
-70,22
+65,18
@@
static void fghClearCallBacks( SFG_Window *window )
* If parent is set to NULL, the window created will be a topmost one.
*/
SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
* 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 positionUse, int x, int y,
+ GLboolean sizeUse, int w, int h,
GLboolean gameMode, GLboolean isMenu )
{
/* Have the window object created */
SFG_Window *window = (SFG_Window *)calloc( sizeof(SFG_Window), 1 );
GLboolean gameMode, GLboolean isMenu )
{
/* Have the window object created */
SFG_Window *window = (SFG_Window *)calloc( sizeof(SFG_Window), 1 );
- int fakeArgc = 0;
+#if TARGET_HOST_UNIX_X11
+ window->Window.FBConfig = NULL;
+#endif
fghClearCallBacks( window );
fghClearCallBacks( window );
- /*
- * If the freeglut internals haven't been initialized yet,
- * do it now. Hack's idea courtesy of Chris Purnell...
- */
- if( !fgState.Initialised )
- glutInit( &fakeArgc, NULL );
-
/* Initialize the object properties */
window->ID = ++fgStructure.WindowID;
window->State.OldHeight = window->State.OldWidth = -1;
/* Initialize the object properties */
window->ID = ++fgStructure.WindowID;
window->State.OldHeight = window->State.OldWidth = -1;
@@
-111,8
+102,8
@@
SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
* Open the window now. The fgOpenWindow() function is system
* dependant, and resides in freeglut_window.c. Uses fgState.
*/
* 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 ? GL_TRUE : GL_FALSE );
+ fgOpenWindow( window, title, positionUse, x, y, sizeUse, w, h, gameMode,
+ (GLboolean)(parent ? GL_TRUE : GL_FALSE) );
return window;
}
return window;
}
@@
-123,25
+114,18
@@
SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
{
int x = 100, y = 100, w = 100, h = 100;
SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
{
int x = 100, y = 100, w = 100, h = 100;
- SFG_Window *current_window = fgStructure.Window;
+ SFG_Window *current_window = fgStructure.CurrentWindow;
/* Have the menu object created */
SFG_Menu* menu = (SFG_Menu *)calloc( sizeof(SFG_Menu), 1 );
/* Have the menu object created */
SFG_Menu* menu = (SFG_Menu *)calloc( sizeof(SFG_Menu), 1 );
- int fakeArgc = 0;
-
- /*
- * If the freeglut internals haven't been initialized yet,
- * do it now. Hack's idea courtesy of Chris Purnell...
- */
- if( !fgState.Initialised )
- glutInit( &fakeArgc, NULL );
- menu->ParentWindow = fgStructure.Window;
+ menu->ParentWindow = NULL;
/* Create a window for the menu to reside in. */
/* Create a window for the menu to reside in. */
- fgCreateWindow( NULL, "freeglut menu", x, y, w, h, GL_FALSE, GL_TRUE );
- menu->Window = fgStructure.Window;
+ fgCreateWindow( NULL, "freeglut menu", GL_TRUE, x, y, GL_TRUE, w, h,
+ GL_FALSE, GL_TRUE );
+ menu->Window = fgStructure.CurrentWindow;
glutDisplayFunc( fgDisplayMenu );
glutHideWindow( ); /* Hide the window for now */
glutDisplayFunc( fgDisplayMenu );
glutHideWindow( ); /* Hide the window for now */
@@
-156,7
+140,7
@@
SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
fgListAppend( &fgStructure.Menus, &menu->Node );
/* Newly created menus implicitly become current ones */
fgListAppend( &fgStructure.Menus, &menu->Node );
/* Newly created menus implicitly become current ones */
- fgStructure.Menu = menu;
+ fgStructure.CurrentMenu = menu;
return menu;
}
return menu;
}
@@
-174,8
+158,8
@@
void fgAddToWindowDestroyList( SFG_Window* window )
fgListAppend( &fgStructure.WindowsToDestroy, &new_list_entry->node );
/* Check if the window is the current one... */
fgListAppend( &fgStructure.WindowsToDestroy, &new_list_entry->node );
/* Check if the window is the current one... */
- if( fgStructure.Window == window )
- fgStructure.Window = NULL;
+ if( fgStructure.CurrentWindow == window )
+ fgStructure.CurrentWindow = NULL;
/*
* Clear all window callbacks except Destroy, which will
/*
* Clear all window callbacks except Destroy, which will
@@
-186,7
+170,7
@@
void fgAddToWindowDestroyList( SFG_Window* window )
* to ensure that they are no longer called after this point.
*/
{
* to ensure that they are no longer called after this point.
*/
{
- FGCBDestroy destroy = FETCH_WCB( *window, Destroy );
+ FGCBDestroy destroy = (FGCBDestroy)FETCH_WCB( *window, Destroy );
fghClearCallBacks( window );
SET_WCB( *window, Destroy, destroy );
}
fghClearCallBacks( window );
SET_WCB( *window, Destroy, destroy );
}
@@
-213,16
+197,14
@@
void fgCloseWindows( )
*/
void fgDestroyWindow( SFG_Window* window )
{
*/
void fgDestroyWindow( SFG_Window* window )
{
- int menu_index;
-
- assert( window );
- freeglut_assert_ready;
+ FREEGLUT_INTERNAL_ERROR_EXIT ( window, "Window destroy function called with null window",
+ "fgDestroyWindow" );
while( window->Children.First )
fgDestroyWindow( ( SFG_Window * )window->Children.First );
{
while( window->Children.First )
fgDestroyWindow( ( SFG_Window * )window->Children.First );
{
- SFG_Window *activeWindow = fgStructure.Window;
+ SFG_Window *activeWindow = fgStructure.CurrentWindow;
INVOKE_WCB( *window, Destroy, ( ) );
fgSetWindow( activeWindow );
}
INVOKE_WCB( *window, Destroy, ( ) );
fgSetWindow( activeWindow );
}
@@
-235,15
+217,11
@@
void fgDestroyWindow( SFG_Window* window )
if( window->ActiveMenu )
fgDeactivateMenu( window );
if( window->ActiveMenu )
fgDeactivateMenu( window );
- for( menu_index = 0; menu_index < 3; menu_index ++ )
- if( window->Menu[ menu_index ] )
- window->Menu[ menu_index ]->ParentWindow = NULL;
-
fghClearCallBacks( window );
fgCloseWindow( window );
free( window );
fghClearCallBacks( window );
fgCloseWindow( window );
free( window );
- if( fgStructure.Window == window )
- fgStructure.Window = NULL;
+ if( fgStructure.CurrentWindow == window )
+ fgStructure.CurrentWindow = NULL;
}
/*
}
/*
@@
-255,11
+233,15
@@
static void fghRemoveMenuFromWindow( SFG_Window* window, SFG_Menu* menu )
SFG_Window *subWindow;
int i;
SFG_Window *subWindow;
int i;
+ /* Check whether this is the active menu in the window */
+ if ( menu == window->ActiveMenu )
+ window->ActiveMenu = NULL ;
+
/*
* Check if the menu is attached to the current window,
* if so, have it detached (by overwriting with a NULL):
*/
/*
* Check if the menu is attached to the current window,
* if so, have it detached (by overwriting with a NULL):
*/
- for( i = 0; i < 3; i++ )
+ for( i = 0; i < FREEGLUT_MAX_MENUS; i++ )
if( window->Menu[ i ] == menu )
window->Menu[ i ] = NULL;
if( window->Menu[ i ] == menu )
window->Menu[ i ] = NULL;
@@
-294,8
+276,8
@@
void fgDestroyMenu( SFG_Menu* menu )
SFG_Window *window;
SFG_Menu *from;
SFG_Window *window;
SFG_Menu *from;
- assert( menu );
- freeglut_assert_ready;
+ FREEGLUT_INTERNAL_ERROR_EXIT ( menu, "Menu destroy function called with null menu",
+ "fgDestroyMenu" );
/* First of all, have all references to this menu removed from all windows: */
for( window = (SFG_Window *)fgStructure.Windows.First;
/* First of all, have all references to this menu removed from all windows: */
for( window = (SFG_Window *)fgStructure.Windows.First;
@@
-315,10
+297,10
@@
void fgDestroyMenu( SFG_Menu* menu )
*/
if( menu->Destroy )
{
*/
if( menu->Destroy )
{
- SFG_Menu *activeMenu=fgStructure.Menu;
- fgStructure.Menu = menu;
+ SFG_Menu *activeMenu=fgStructure.CurrentMenu;
+ fgStructure.CurrentMenu = menu;
menu->Destroy( );
menu->Destroy( );
- fgStructure.Menu = activeMenu;
+ fgStructure.CurrentMenu = activeMenu;
}
/*
}
/*
@@
-338,12
+320,12
@@
void fgDestroyMenu( SFG_Menu* menu )
free( entry );
}
free( entry );
}
- if( fgStructure.Window == menu->Window )
- fgSetWindow( menu->ParentWindow );
+ if( fgStructure.CurrentWindow == menu->Window )
+ fgSetWindow( NULL );
fgDestroyWindow( menu->Window );
fgListRemove( &fgStructure.Menus, &menu->Node );
fgDestroyWindow( menu->Window );
fgListRemove( &fgStructure.Menus, &menu->Node );
- if( fgStructure.Menu == menu )
- fgStructure.Menu = NULL;
+ if( fgStructure.CurrentMenu == menu )
+ fgStructure.CurrentMenu = NULL;
free( menu );
}
free( menu );
}
@@
-365,6
+347,13
@@
void fgCreateStructure( void )
fgListInit(&fgStructure.Windows);
fgListInit(&fgStructure.Menus);
fgListInit(&fgStructure.WindowsToDestroy);
fgListInit(&fgStructure.Windows);
fgListInit(&fgStructure.Menus);
fgListInit(&fgStructure.WindowsToDestroy);
+
+ fgStructure.CurrentWindow = NULL;
+ fgStructure.CurrentMenu = NULL;
+ fgStructure.MenuContext = NULL;
+ fgStructure.GameModeWindow = NULL;
+ fgStructure.WindowID = 0;
+ fgStructure.MenuID = 0;
}
/*
}
/*
@@
-374,8
+363,6
@@
void fgCreateStructure( void )
*/
void fgDestroyStructure( void )
{
*/
void fgDestroyStructure( void )
{
- freeglut_assert_ready;
-
/* Clean up the WindowsToDestroy list. */
fgCloseWindows( );
/* Clean up the WindowsToDestroy list. */
fgCloseWindows( );
@@
-394,8
+381,9
@@
void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator )
{
SFG_Window *window;
{
SFG_Window *window;
- assert( enumCallback && enumerator );
- freeglut_assert_ready;
+ FREEGLUT_INTERNAL_ERROR_EXIT ( enumCallback && enumerator,
+ "Enumerator or callback missing from window enumerator call",
+ "fgEnumWindows" );
/* Check every of the top-level windows */
for( window = ( SFG_Window * )fgStructure.Windows.First;
/* Check every of the top-level windows */
for( window = ( SFG_Window * )fgStructure.Windows.First;
@@
-417,8
+405,10
@@
void fgEnumSubWindows( SFG_Window* window, FGCBenumerator enumCallback,
{
SFG_Window *child;
{
SFG_Window *child;
- assert( enumCallback && enumerator );
- freeglut_assert_ready;
+ FREEGLUT_INTERNAL_ERROR_EXIT ( enumCallback && enumerator,
+ "Enumerator or callback missing from subwindow enumerator call",
+ "fgEnumSubWindows" );
+ FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED ( "Window Enumeration" );
for( child = ( SFG_Window * )window->Children.First;
child;
for( child = ( SFG_Window * )window->Children.First;
child;
@@
-519,8
+509,6
@@
SFG_Menu* fgMenuByID( int menuID )
{
SFG_Menu *menu = NULL;
{
SFG_Menu *menu = NULL;
- freeglut_assert_ready;
-
/* It's enough to check all entries in fgStructure.Menus... */
for( menu = (SFG_Menu *)fgStructure.Menus.First;
menu;
/* It's enough to check all entries in fgStructure.Menus... */
for( menu = (SFG_Menu *)fgStructure.Menus.First;
menu;