X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_internal.h;h=26ee0c2b18799043903dee61216672908c85cd61;hb=fe89df7de1aa6a732a441e983cce03e1fd6fd81a;hp=70c845f8548912b8017ae82adc86e363a6a7a9c2;hpb=ca79181e75fe302c7e7aa508d078cbac0ac6a514;p=freeglut diff --git a/src/freeglut_internal.h b/src/freeglut_internal.h index 70c845f..26ee0c2 100644 --- a/src/freeglut_internal.h +++ b/src/freeglut_internal.h @@ -89,8 +89,10 @@ #include #include - #if HAVE_X11_EXTENSIONS_XF86VMODE_H - #include + #ifndef __sgi + #ifndef SOLARIS + #include + #endif #endif #endif @@ -235,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; @@ -384,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 { @@ -399,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; @@ -419,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; @@ -435,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 */ }; /* @@ -460,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 */ @@ -673,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