#define FREEGLUT_INTERNAL_H
/* XXX Update these for each release! */
-#define VERSION_MAJOR 1
-#define VERSION_MINOR 4
+#define VERSION_MAJOR 2
+#define VERSION_MINOR 0
#define VERSION_PATCH 0
/*
#include <X11/Xatom.h>
#include <X11/keysym.h>
- #ifndef __sgi
+ #ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H
#include <X11/extensions/xf86vmode.h>
#endif
#endif
GLboolean TryDirectContext; /* What about giving a try to? */
GLboolean ForceIconic; /* All new top windows are iconified */
+ GLboolean UseCurrentContext; /* New windows use current window's rendering context */
GLboolean GLDebugSwitch; /* OpenGL state debugging switch */
GLboolean XSyncSwitch; /* X11 sync protocol switch */
FGCBidle IdleCallback; /* The global idle callback */
+ GLboolean BuildingAMenu; /* True if we are presently making a menu */
+ int ActiveMenus; /* Number of currently active menus */
FGCBmenuState MenuStateCallback; /* Menu callbacks are global */
FGCBmenuStatus MenuStatusCallback;
Atom DeleteWindow; /* The window deletion atom */
#ifdef X_XF86VidModeGetModeLine
+ /*
+ * XF86VidMode may be compilable even if it fails at runtime. Therefore,
+ * the validity of the VidMode has to be tracked
+ */
+ int DisplayModeValid; /* Flag that indicates runtime status*/
XF86VidModeModeLine DisplayMode; /* Current screen's display settings */
int DisplayModeClock; /* The display mode's refresh rate */
+ int DisplayViewPortX; /* saved X location of the viewport */
+ int DisplayViewPortY; /* saved Y location of the viewport */
+ int DisplayPointerX; /* saved X location of the pointer */
+ int DisplayPointerY; /* saved Y location of the pointer */
+
#endif
#elif TARGET_HOST_WIN32
};
/*
+ * This structure holds the OpenGL rendering context for all the menu windows
+ */
+typedef struct tagSFG_MenuContext SFG_MenuContext;
+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
+
+};
+
+/*
* This structure describes a menu
*/
+typedef struct tagSFG_Window SFG_Window;
+typedef struct tagSFG_MenuEntry SFG_MenuEntry;
typedef struct tagSFG_Menu SFG_Menu;
struct tagSFG_Menu
{
int Width; /* Menu box width in pixels */
int Height; /* Menu box height in pixels */
int X, Y; /* Menu box raster position */
+
+ SFG_MenuEntry *ActiveEntry ; /* Currently active entry in the menu */
+ SFG_Window *Window ; /* OpenGL window for menu */
+ SFG_Window *ParentWindow ; /* OpenGL window in which the menu is defined */
};
/*
* This is a menu entry
*/
-typedef struct tagSFG_MenuEntry SFG_MenuEntry;
struct tagSFG_MenuEntry
{
SFG_Node Node;
/*
* A window, making part of freeglut windows hierarchy. Should be kept portable.
*/
-typedef struct tagSFG_Window SFG_Window;
struct tagSFG_Window
{
SFG_Node Node;
SFG_Window* Parent; /* The parent to this window */
SFG_List Children; /* The subwindows d.l. list */
+
+ GLboolean IsMenu; /* Set to 1 if we are a menu */
};
/*
SFG_Window* Window; /* The currently active win. */
SFG_Menu* Menu; /* Same, but menu... */
+ SFG_MenuContext* MenuContext; /* OpenGL rendering context for menus */
+
SFG_Window* GameMode; /* The game mode window */
int WindowID; /* The new current window ID */
void fgExecuteMenuCallback( SFG_Menu* menu ) ;
GLboolean fgCheckActiveMenu ( SFG_Window *window, SFG_Menu *menu ) ;
void fgDeactivateMenu( SFG_Window *window );
+void fgDeactivateSubMenu( SFG_MenuEntry *menuEntry );
/*
* This function gets called just before the buffers swap, so that