X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffg_internal.h;h=25de1dbc80994b2391c148316461537958b366d3;hb=f50219f3ee035143ce9a056e4362959bef5c91cc;hp=1c7429e0579168d3015a6d6a9e22ccd5b5a0cd93;hpb=0e653a9d94fec583f7a4172b721c1c599e06cbc8;p=freeglut diff --git a/src/fg_internal.h b/src/fg_internal.h index 1c7429e..25de1db 100644 --- a/src/fg_internal.h +++ b/src/fg_internal.h @@ -191,19 +191,19 @@ /* Freeglut callbacks type definitions */ typedef void (* FGCBDisplay )( void ); typedef void (* FGCBReshape )( int, int ); +typedef void (* FGCBPosition )( int, int ); typedef void (* FGCBVisibility )( int ); typedef void (* FGCBKeyboard )( unsigned char, int, int ); +typedef void (* FGCBKeyboardUp )( unsigned char, int, int ); typedef void (* FGCBSpecial )( int, int, int ); +typedef void (* FGCBSpecialUp )( int, int, int ); typedef void (* FGCBMouse )( int, int, int, int ); typedef void (* FGCBMouseWheel )( int, int, int, int ); typedef void (* FGCBMotion )( int, int ); typedef void (* FGCBPassive )( int, int ); typedef void (* FGCBEntry )( int ); typedef void (* FGCBWindowStatus )( int ); -typedef void (* FGCBSelect )( int, int, int ); typedef void (* FGCBJoystick )( unsigned int, int, int, int ); -typedef void (* FGCBKeyboardUp )( unsigned char, int, int ); -typedef void (* FGCBSpecialUp )( int, int, int ); typedef void (* FGCBOverlayDisplay)( void ); typedef void (* FGCBSpaceMotion )( int, int, int ); typedef void (* FGCBSpaceRotation )( int, int, int ); @@ -212,13 +212,17 @@ typedef void (* FGCBDials )( int, int ); typedef void (* FGCBButtonBox )( int, int ); typedef void (* FGCBTabletMotion )( int, int ); typedef void (* FGCBTabletButton )( int, int, int, int ); -typedef void (* FGCBDestroy )( void ); +typedef void (* FGCBDestroy )( void ); /* Used for both window and menu destroy callbacks */ typedef void (* FGCBMultiEntry )( int, int ); 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 ); @@ -312,7 +316,7 @@ struct tagSFG_State fgExecutionState ExecState; /* Used for GLUT termination */ char *ProgramName; /* Name of the invoking program */ GLboolean JoysticksInitialised; /* Only initialize if application calls for them */ - int NumActiveJoysticks; /* Number of active joysticks -- if zero, don't poll joysticks */ + int NumActiveJoysticks; /* Number of active joysticks (callback defined and positive pollrate) -- if zero, don't poll joysticks */ GLboolean InputDevsInitialised; /* Only initialize if application calls for them */ int MouseWheelTicks; /* Number of ticks the mouse wheel has turned */ @@ -367,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; }; @@ -379,7 +383,7 @@ struct tagSFG_WindowState int Width; /* Window's width in pixels */ int Height; /* The same about the height */ - SFG_PlatformWindowState pWState; /* Window width/height (X11) or rectangle/style (Windows) from before a resize */ + SFG_PlatformWindowState pWState; /* Window width/height (X11) or rectangle/style (Windows) from before a resize, and other stuff only needed on specific platforms */ GLboolean Redisplay; /* Do we have to redisplay? */ GLboolean Visible; /* Is the window visible now */ @@ -397,6 +401,10 @@ 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? */ + + GLboolean VisualizeNormals; /* When drawing objects, draw vectors representing the normals as well? */ }; @@ -429,7 +437,7 @@ typedef void (*SFG_Proc)(); do \ { \ if( FETCH_WCB( window, cbname ) != (SFG_Proc)(func) ) \ - (((window).CallBacks[CB_ ## cbname]) = (SFG_Proc)(func)); \ + (((window).CallBacks[WCB_ ## cbname]) = (SFG_Proc)(func)); \ } while( 0 ) /* @@ -444,7 +452,7 @@ do \ * type. */ #define FETCH_WCB(window,cbname) \ - ((window).CallBacks[CB_ ## cbname]) + ((window).CallBacks[WCB_ ## cbname]) /* * INVOKE_WCB() is used as: @@ -499,45 +507,47 @@ do \ * side with the old callback code. The old callback code used * the bare callback's name as a structure member, so I used a * prefix for the array index name.) - * - * XXX For consistancy, perhaps the prefix should match the - * XXX FETCH* and INVOKE* macro suffices. I.e., WCB_, rather than - * XXX CB_. */ enum { - CB_Display, - CB_Reshape, - CB_Keyboard, - CB_KeyboardUp, - CB_Special, - CB_SpecialUp, - CB_Mouse, - CB_MouseWheel, - CB_Motion, - CB_Passive, - CB_Entry, - CB_Visibility, - CB_WindowStatus, - CB_Joystick, - CB_Destroy, - - /* MPX-related */ - CB_MultiEntry, - CB_MultiButton, - CB_MultiMotion, - CB_MultiPassive, + WCB_Display, + WCB_Reshape, + WCB_Position, + WCB_Keyboard, + WCB_KeyboardUp, + WCB_Special, + WCB_SpecialUp, + WCB_Mouse, + WCB_MouseWheel, + WCB_Motion, + WCB_Passive, + WCB_Entry, + WCB_Visibility, + WCB_WindowStatus, + WCB_Joystick, + WCB_Destroy, + + /* Multi-Pointer X and touch related */ + WCB_MultiEntry, + WCB_MultiButton, + WCB_MultiMotion, + WCB_MultiPassive, + + /* Mobile platforms LifeCycle */ + WCB_InitContext, + WCB_Pause, + WCB_Resume, /* Presently ignored */ - CB_Select, - CB_OverlayDisplay, - CB_SpaceMotion, /* presently implemented only on UNIX/X11 */ - CB_SpaceRotation, /* presently implemented only on UNIX/X11 */ - CB_SpaceButton, /* presently implemented only on UNIX/X11 */ - CB_Dials, - CB_ButtonBox, - CB_TabletMotion, - CB_TabletButton, + WCB_Select, + WCB_OverlayDisplay, + WCB_SpaceMotion, /* presently implemented only on UNIX/X11 */ + WCB_SpaceRotation, /* presently implemented only on UNIX/X11 */ + WCB_SpaceButton, /* presently implemented only on UNIX/X11 */ + WCB_Dials, + WCB_ButtonBox, + WCB_TabletMotion, + WCB_TabletButton, /* Always make this the LAST one */ TOTAL_CALLBACKS @@ -634,8 +644,8 @@ struct tagSFG_Structure SFG_Window* GameModeWindow; /* The game mode window */ - int WindowID; /* The new current window ID */ - int MenuID; /* The new current menu ID */ + int WindowID; /* The window ID for the next window to be created */ + int MenuID; /* The menu ID for the next menu to be created */ }; /* @@ -650,7 +660,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; @@ -904,8 +915,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 ); /* @@ -929,6 +940,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... */