/* XXX Update these for each release! */
#define VERSION_MAJOR 2
-#define VERSION_MINOR 0
-#define VERSION_PATCH 2
+#define VERSION_MINOR 2
+#define VERSION_PATCH 0
/*
* Freeglut is meant to be available under all Unix/X11 and Win32 platforms.
SFG_Time Time; /* Time that glutInit was called */
SFG_List Timers; /* The freeglut timer hooks */
+ SFG_List FreeTimers; /* The unused timer hooks */
FGCBIdle IdleCallback; /* The global idle callback */
{
int Width; /* Window's width in pixels */
int Height; /* The same about the height */
+ int OldWidth; /* Window width from before a resize */
+ int OldHeight; /* " height " " " " */
GLboolean Redisplay; /* Do we have to redisplay? */
GLboolean Visible; /* Is the window visible now */
/*
+ * SET_WCB() is used as:
+ *
+ * SET_WCB( window, Visibility, func );
+ *
+ * ...where {window} is the freeglut window to set the callback,
+ * {Visibility} is the window-specific callback to set,
+ * {func} is a function-pointer.
+ *
+ * Originally, {FETCH_WCB( ... ) = func} was rather sloppily used,
+ * but this can cause warnings because the FETCH_WCB() macro type-
+ * casts its result, and a type-cast value shouldn't be an lvalue.
+ *
+ * XXX Note that there is no type-checking to make sure that {func} is
+ * XXX a suitable type. We could add a safety-check of the form:
+ * XXX
+ * XXX if( FETCH_WCB( ... ) != func )
+ * XXX ...
+ * XXX
+ * XXX ...is this desired?
+ *
+ * XXX The {if( FETCH_WCB( ... ) != func )} test is to do type-checking
+ * XXX and for no other reason. Since it's hidden in the macro, the
+ * XXX ugliness is felt to be rather benign.
+ */
+#define SET_WCB(window,cbname,func) \
+do \
+{ \
+ if( FETCH_WCB( window, cbname ) != func ) \
+ (((window).CallBacks[CB_ ## cbname]) = func); \
+} while( 0 ) \
+
+/*
* FETCH_WCB() is used as:
*
* FETCH_WCB( window, Visibility );
typedef struct tagSFG_WindowList SFG_WindowList ;
struct tagSFG_WindowList
{
+ SFG_Node node;
SFG_Window *window ;
- GLboolean needToClose ;
- SFG_WindowList *next ;
};
/*
{
SFG_List Windows; /* The global windows list */
SFG_List Menus; /* The global menus list */
+ SFG_List WindowsToDestroy;
SFG_Window* Window; /* The currently active win. */
SFG_Menu* Menu; /* Same, but menu... */
int x, int y, int w, int h, GLboolean gameMode,
GLboolean isSubWindow );
void fgCloseWindow( SFG_Window* window );
-void fgAddToWindowDestroyList ( SFG_Window* window,
- GLboolean needToClose );
+void fgAddToWindowDestroyList ( SFG_Window* window );
void fgCloseWindows ();
-void fgDestroyWindow( SFG_Window* window, GLboolean needToClose );
+void fgDestroyWindow( SFG_Window* window );
void fgClearCallBacks( SFG_Window *window );
/*
void fgListAppend(SFG_List *list, SFG_Node *node);
void fgListRemove(SFG_List *list, SFG_Node *node);
int fgListLength(SFG_List *list);
+void fgListInsert(SFG_List *list, SFG_Node *next, SFG_Node *node);
/*
* Error Messages functions