X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_internal.h;h=96326c715d7c13c2ce41b11a095773ba592e261b;hb=1c741248e3ad67f24a57742cb5cc511f0ee87805;hp=2e199beb56ebf6f847c13a990b1e6ccd7b8586db;hpb=4fa63bbb5637f30db8eec9de49c0b2c4830cb866;p=freeglut diff --git a/src/freeglut_internal.h b/src/freeglut_internal.h index 2e199be..96326c7 100644 --- a/src/freeglut_internal.h +++ b/src/freeglut_internal.h @@ -28,6 +28,10 @@ #ifndef FREEGLUT_INTERNAL_H #define FREEGLUT_INTERNAL_H +#if HAVE_CONFIG_H +# include "config.h" +#endif + /* XXX Update these for each release! */ #define VERSION_MAJOR 2 #define VERSION_MINOR 2 @@ -69,11 +73,21 @@ #include #include #include -#include -#include -#if TARGET_HOST_UNIX_X11 -#include -#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_UNISTD_H +# include +#endif +#if TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# include +# endif #endif /* The system-dependant include files should go here: */ @@ -167,7 +181,7 @@ struct tagSFG_XYUse typedef struct tagSFG_Time SFG_Time; struct tagSFG_Time { -#ifdef WIN32 +#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE DWORD Value; #else struct timeval Value; @@ -229,6 +243,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 */ }; /* The structure used by display initialization in freeglut_init.c */ @@ -345,6 +360,14 @@ struct tagSFG_WindowState /* + * A generic function pointer. We should really use the GLUTproc type + * defined in freeglut_ext.h, but if we include that header in this file + * a bunch of other stuff (font-related) blows up! + */ +typedef void (*SFG_Proc)(); + + +/* * SET_WCB() is used as: * * SET_WCB( window, Visibility, func ); @@ -365,8 +388,8 @@ struct tagSFG_WindowState do \ { \ if( FETCH_WCB( window, cbname ) != func ) \ - (((window).CallBacks[CB_ ## cbname]) = (void *) func); \ -} while( 0 ) \ + (((window).CallBacks[CB_ ## cbname]) = (SFG_Proc) func); \ +} while( 0 ) /* * FETCH_WCB() is used as: @@ -517,7 +540,7 @@ struct tagSFG_Window SFG_Context Window; /* Window and OpenGL context */ SFG_WindowState State; /* The window state */ - void *CallBacks[ TOTAL_CALLBACKS ]; /* Array of window callbacks */ + SFG_Proc CallBacks[ TOTAL_CALLBACKS ]; /* Array of window callbacks */ void *UserData ; /* For use by user */ SFG_Menu* Menu[ FREEGLUT_MAX_MENUS ]; /* Menus appended to window */ @@ -633,7 +656,26 @@ extern SFG_State fgState; * A call to this function makes us sure that the Display and Structure * subsystems have been properly initialized and are ready to be used */ -#define freeglut_assert_ready assert( fgState.Initialised ); +#define FREEGLUT_EXIT_IF_NOT_INITIALISED( string ) \ + if ( ! fgState.Initialised ) \ + { \ + fgError ( " ERROR: Function <%s> called" \ + " without first calling 'glutInit'.", (string) ) ; \ + } + +#define FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED( string ) \ + if ( ! fgState.Initialised ) \ + { \ + fgError ( " ERROR: Internal <%s> function called" \ + " without first calling 'glutInit'.", (string) ) ; \ + } + +#define FREEGLUT_INTERNAL_ERROR_EXIT( cond, string, function ) \ + if ( ! ( cond ) ) \ + { \ + fgError ( " ERROR: Internal error <%s> in function %s", \ + (string), (function) ) ; \ + } /* * Following definitions are somewhat similiar to GLib's, @@ -648,17 +690,19 @@ extern SFG_State fgState; /* * A call to those macros assures us that there is a current - * window and menu set, respectively: + * window set, respectively: */ -#define freeglut_assert_window assert( fgStructure.Window != NULL ); -#define freeglut_assert_menu assert( fgStructure.Menu != NULL ); +#define FREEGLUT_EXIT_IF_NO_WINDOW( string ) \ + if ( ! fgStructure.Window ) \ + { \ + fgError ( " ERROR: Function <%s> called" \ + " with no current window defined.", (string) ) ; \ + } /* - * The initialize and deinitialize functions get called on glutInit() - * and glutMainLoop() end respectively. They should create/clean up + * The deinitialize function gets called on glutMainLoop() end. It should clean up * everything inside of the freeglut */ -void fgInitialize( const char* displayName ); void fgDeinitialize( void ); /* @@ -699,17 +743,22 @@ void fgCloseWindow( SFG_Window* window ); void fgAddToWindowDestroyList ( SFG_Window* window ); void fgCloseWindows (); void fgDestroyWindow( SFG_Window* window ); -void fgClearCallBacks( SFG_Window *window ); /* Menu creation and destruction. Defined in freeglut_structure.c */ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback ); void fgDestroyMenu( SFG_Menu* menu ); /* Joystick device management functions, defined in freeglut_joystick.c */ -void fgJoystickInit( int ident ); +int fgJoystickDetect( void ); +void fgInitialiseJoysticks( void ); void fgJoystickClose( void ); void fgJoystickPollWindow( SFG_Window* window ); +/* More joystick functions. Should these go into the API? */ +int glutJoystickGetNumAxes( int ident ); +int glutJoystickGetNumButtons( int ident ); +int glutJoystickNotWorking( int ident ); + /* * Helper function to enumerate through all registered windows * and one to enumerate all of a window's subwindows... @@ -751,8 +800,8 @@ SFG_Menu* fgMenuByID( int menuID ); * of the menu user interface handling code... */ void fgActivateMenu( SFG_Window* window, int button ); -void fgExecuteMenuCallback( SFG_Menu* menu ); -GLboolean fgCheckActiveMenu ( SFG_Window *window, SFG_Menu *menu ); +GLboolean fgCheckActiveMenu ( SFG_Window *window, int button, GLboolean pressed, + int mouse_x, int mouse_y ); void fgDeactivateMenu( SFG_Window *window ); void fgDeactivateSubMenu( SFG_MenuEntry *menuEntry );