};
/*
- * An enumeration containing the state of the GLUT execution: initializing, running, or stopping
+ * An enumeration containing the state of the GLUT execution:
+ * initializing, running, or stopping
*/
-typedef enum {
- GLUT_EXEC_STATE_INIT,
- GLUT_EXEC_STATE_RUNNING,
- GLUT_EXEC_STATE_STOP
-} fgExecutionState ;
+typedef enum
+{
+ GLUT_EXEC_STATE_INIT,
+ GLUT_EXEC_STATE_RUNNING,
+ GLUT_EXEC_STATE_STOP
+} fgExecutionState;
/*
* This structure holds different freeglut settings
SFG_XYUse Size; /* The default windows' size */
unsigned int DisplayMode; /* Display mode for new windows */
+ GLboolean Initialised; /* Freeglut has been initialised */
+
GLboolean ForceDirectContext; /* Force direct rendering? */
GLboolean TryDirectContext; /* What about giving a try to? */
GLboolean XSyncSwitch; /* X11 sync protocol switch */
GLboolean IgnoreKeyRepeat; /* Whether to ignore key repeat. */
+ int Modifiers; /* Current ALT/SHIFT/CTRL state */
GLuint FPSInterval; /* Interval between FPS printfs */
GLuint SwapCount; /* Count of glutSwapBuffer calls */
FGCBIdle IdleCallback; /* The global idle callback */
- GLboolean BuildingAMenu; /* Are we presently making a menu */
int ActiveMenus; /* Num. of currently active menus */
FGCBMenuState MenuStateCallback; /* Menu callbacks are global */
FGCBMenuStatus MenuStatusCallback;
GLboolean Visible; /* Is the window visible now */
int Cursor; /* The currently selected cursor */
- int Modifiers; /* The current ALT/SHIFT/CTRL state */
long JoystickPollRate; /* The joystick polling rate */
long JoystickLastPoll; /* When the last poll has happened */
* {Visibility} is the window-specific callback to fetch.
*
* The result is correctly type-cast to the callback function pointer
- * type. (This is accomlished by abutting the callback name to a
- * common prefix, using ANSI C token-pasting.)
+ * type.
*/
#define FETCH_WCB(window,cbname) \
((FGCB ## cbname)((window).CallBacks[CB_ ## cbname]))
*
*/
#define INVOKE_WCB(window,cbname,arg_list) \
+do \
{ \
if( FETCH_WCB( window, cbname ) ) \
{ \
fgSetWindow( &window ); \
FETCH_WCB( window, cbname ) arg_list; \
} \
-}
+} while( 0 )
/*
* The window callbacks the user can supply us with. Should be kept portable.
/*
* A linked list structure of windows
*/
-typedef struct tagSFG_WindowList SFG_WindowList ;
+typedef struct tagSFG_WindowList SFG_WindowList;
struct tagSFG_WindowList
{
- SFG_Window *window ;
- GLboolean needToClose ;
- SFG_WindowList *next ;
+ SFG_Window *window;
+ GLboolean needToClose;
+ SFG_WindowList *next;
};
/*
* A call to this function makes us sure that the Display and Structure
* subsystems have been properly initialized and are ready to be used
*/
-#define freeglut_assert_ready assert( fgState.Time.Set );
+#define freeglut_assert_ready assert( fgState.Initialised );
/*
* Following definitions are somewhat similiar to GLib's,
return;
#define freeglut_return_val_if_fail( expr, val ) \
if( !(expr) ) \
- return( val );
+ return val;
/*
* A call to those macros assures us that there is a current
/*
* Window creation, opening, closing and destruction.
+ * Also CallBack clearing/initialization.
* Defined in freeglut_structure.c, freeglut_window.c.
*/
SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
- int x, int y, int w, int h, GLboolean gameMode );
-void fgSetWindow ( SFG_Window *window ) ;
+ int x, int y, int w, int h,
+ GLboolean gameMode, GLboolean isMenu );
+void fgSetWindow ( SFG_Window *window );
void fgOpenWindow( SFG_Window* window, const char* title,
int x, int y, int w, int h, GLboolean gameMode,
- int isSubWindow );
+ GLboolean isSubWindow );
void fgCloseWindow( SFG_Window* window );
void fgAddToWindowDestroyList ( SFG_Window* window,
- GLboolean needToClose ) ;
-void fgCloseWindows ();
+ GLboolean needToClose );
+void fgCloseWindows( );
void fgDestroyWindow( SFG_Window* window, GLboolean needToClose );
+void fgClearCallBacks( SFG_Window *window );
/*
* Menu creation and destruction. Defined in freeglut_structure.c