/* XXX Update these for each release! */
#define VERSION_MAJOR 2
-#define VERSION_MINOR 0
+#define VERSION_MINOR 2
#define VERSION_PATCH 0
/*
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 */
};
/*
+ * Make "freeglut" window handle and context types so that we don't need so
+ * much conditionally-compiled code later in the library.
+ */
+#if TARGET_HOST_UNIX_X11
+
+typedef Window SFG_WindowHandleType ;
+typedef GLXContext SFG_WindowContextType ;
+
+#elif TARGET_HOST_WIN32
+
+typedef HWND SFG_WindowHandleType ;
+typedef HGLRC SFG_WindowContextType ;
+
+#endif
+
+/*
* A window and its OpenGL context. The contents of this structure
* are highly dependant on the target operating system we aim at...
*/
typedef struct tagSFG_Context SFG_Context;
struct tagSFG_Context
{
+ SFG_WindowHandleType Handle; /* The window's handle */
+ SFG_WindowContextType Context; /* The window's OpenGL/WGL context */
+
#if TARGET_HOST_UNIX_X11
- Window Handle; /* The window's handle */
- GLXContext Context; /* The OpenGL context */
XVisualInfo* VisualInfo; /* The window's visual information */
-
#elif TARGET_HOST_WIN32
- HWND Handle; /* The window's handle */
HDC Device; /* The window's device context */
- HGLRC Context; /* The window's WGL context */
-
#endif
int DoubleBuffered; /* Treat the window as double-buffered */
{
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 */
struct tagSFG_MenuContext
{
#if TARGET_HOST_UNIX_X11
- GLXContext Context; /* The menu OpenGL context */
XVisualInfo* VisualInfo; /* The window's visual information */
-#elif TARGET_HOST_WIN32
- HGLRC Context; /* The menu window's WGL context */
#endif
+ SFG_WindowContextType Context; /* The menu window's WGL context */
};
/*
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 );
/*
* first window in the queue matching the specified window handle.
* The function is defined in freeglut_structure.c file.
*/
-#if TARGET_HOST_UNIX_X11
- SFG_Window* fgWindowByHandle( Window hWindow );
-#elif TARGET_HOST_WIN32
- SFG_Window* fgWindowByHandle( HWND hWindow );
-#endif
+SFG_Window* fgWindowByHandle( SFG_WindowHandleType hWindow );
/*
* This function is similiar to the previous one, except it is
SFG_Window* fgWindowByID( int windowID );
/*
- * Looks up a menu given its ID. This is easier that fgWindowByXXX
+ * Looks up a menu given its ID. This is easier than fgWindowByXXX
* as all menus are placed in a single doubly linked list...
*/
SFG_Menu* fgMenuByID( int menuID );
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