now have function to get window style based on FreeGLUT's stateflag
[freeglut] / src / fg_internal.h
index da0b44d..129654a 100644 (file)
@@ -42,7 +42,7 @@
     || ( defined(__CYGWIN__) && defined(X_DISPLAY_MISSING) )
 #   define  TARGET_HOST_MS_WINDOWS 1
 
-#elif defined (ANDROID)
+#elif defined (__ANDROID__)
 #   define  TARGET_HOST_ANDROID  1
 
 #elif defined(__posix__) || defined(__unix__) || defined(__linux__) || defined(__sun)
     typedef unsigned long fg_time_t;
 #endif
 
-
+#ifndef __fg_unused
+# ifdef __GNUC__
+#  define __fg_unused __attribute__((unused))
+# else
+#  define __fg_unused
+# endif
+#endif
 
 /* Platform-specific includes */
 #if TARGET_HOST_POSIX_X11
@@ -213,6 +219,10 @@ typedef void (* FGCBMultiButton  )( int, int, int, int, int );
 typedef void (* FGCBMultiMotion  )( int, int, int );
 typedef void (* FGCBMultiPassive )( int, int, int );
 
+typedef void (* FGCBInitContext)();
+typedef void (* FGCBPause)();
+typedef void (* FGCBResume)();
+
 /* The global callbacks type definitions */
 typedef void (* FGCBIdle          )( void );
 typedef void (* FGCBTimer         )( int );
@@ -361,8 +371,8 @@ struct tagSFG_Context
        SFG_PlatformContext pContext;    /* The window's FBConfig (X11) or device context (Windows) */
 
     int             DoubleBuffered;  /* Treat the window as double-buffered */
-    GLint attribute_v_coord;
-    GLint attribute_v_normal;
+    GLint           attribute_v_coord;
+    GLint           attribute_v_normal;
 };
 
 
@@ -391,6 +401,8 @@ struct tagSFG_WindowState
     GLboolean       NeedToResize;       /* Do we need to resize the window?  */
 
     GLboolean       IsFullscreen;       /* is the window fullscreen? */
+
+    GLboolean       NeedToInitContext; /* are OpenGL context/resources loaded? */
 };
 
 
@@ -522,6 +534,11 @@ enum
     CB_MultiMotion,
     CB_MultiPassive,
 
+    /* Mobile platforms LifeCycle */
+    CB_InitContext,
+    CB_Pause,
+    CB_Resume,
+
     /* Presently ignored */
     CB_Select,
     CB_OverlayDisplay,
@@ -644,7 +661,8 @@ struct tagSFG_Enumerator
     GLboolean   found;                          /* Used to terminate search  */
     void*       data;                           /* Custom data pointer       */
 };
-typedef void (* FGCBenumerator  )( SFG_Window *, SFG_Enumerator * );
+typedef void (* FGCBWindowEnumerator  )( SFG_Window *, SFG_Enumerator * );
+typedef void (* FGCBMenuEnumerator  )( SFG_Menu *, SFG_Enumerator * );
 
 /* The bitmap font structure */
 typedef struct tagSFG_Font SFG_Font;
@@ -898,8 +916,8 @@ void fgSetCursor ( SFG_Window *window, int cursorID );
  * and userData is the a custom user-supplied pointer. Functions
  * are defined and exported from freeglut_structure.c file.
  */
-void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator );
-void fgEnumSubWindows( SFG_Window* window, FGCBenumerator enumCallback,
+void fgEnumWindows( FGCBWindowEnumerator enumCallback, SFG_Enumerator* enumerator );
+void fgEnumSubWindows( SFG_Window* window, FGCBWindowEnumerator enumCallback,
                        SFG_Enumerator* enumerator );
 
 /*
@@ -923,6 +941,12 @@ SFG_Window* fgWindowByID( int windowID );
 SFG_Menu* fgMenuByID( int menuID );
 
 /*
+ * Returns active menu, if any. Assumption: only one menu active throughout application at any one time.
+ * This is easier than fgWindowByXXX as all menus are placed in one doubly linked list...
+ */
+SFG_Menu* fgGetActiveMenu( );
+
+/*
  * The menu activation and deactivation the code. This is the meat
  * of the menu user interface handling code...
  */