X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=sidebyside;f=src%2Ffreeglut_internal.h;h=26ee0c2b18799043903dee61216672908c85cd61;hb=fe89df7de1aa6a732a441e983cce03e1fd6fd81a;hp=5b9df43bd12ef321f644a8d59e245a0c632ce2ca;hpb=646676b8dbf8ab504ac8a275fe9a63a403a3190b;p=freeglut diff --git a/src/freeglut_internal.h b/src/freeglut_internal.h index 5b9df43..26ee0c2 100644 --- a/src/freeglut_internal.h +++ b/src/freeglut_internal.h @@ -29,8 +29,8 @@ #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 /* @@ -90,8 +90,10 @@ #include #ifndef __sgi + #ifndef SOLARIS #include #endif + #endif #endif /* @@ -219,6 +221,7 @@ struct tagSFG_State 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 */ @@ -234,6 +237,7 @@ struct tagSFG_State FGCBidle IdleCallback; /* The global idle callback */ + GLboolean BuildingAMenu; /* True if we are presently making a menu */ FGCBmenuState MenuStateCallback; /* Menu callbacks are global */ FGCBmenuStatus MenuStatusCallback; @@ -260,6 +264,11 @@ struct tagSFG_Display 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 */ #endif @@ -378,8 +387,25 @@ struct tagSFG_WindowCallbacks }; /* + * 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 { @@ -393,12 +419,15 @@ 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; @@ -413,7 +442,6 @@ struct tagSFG_MenuEntry /* * A window, making part of freeglut windows hierarchy. Should be kept portable. */ -typedef struct tagSFG_Window SFG_Window; struct tagSFG_Window { SFG_Node Node; @@ -429,6 +457,8 @@ struct tagSFG_Window 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 */ }; /* @@ -454,6 +484,8 @@ struct tagSFG_Structure 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 */ @@ -667,6 +699,7 @@ void fgActivateMenu( SFG_Window* window, int button ); 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