From aee00443ad278d5a51f17261b4f2f2d87be73ad3 Mon Sep 17 00:00:00 2001 From: Diederick Niehorster Date: Fri, 23 Nov 2012 06:40:06 +0000 Subject: [PATCH] added glutPositionFunc callback, now just need to implement so it does something For all callbacks now using function type definitions from fg_internal.h. Reorganized and cleaned up fg_callbacks.c so that there are no wrong comments in there (timers are global, not per window) and so that all global, per menu, and per window callbacks are grouped together git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1474 7f0cb862-5218-0410-a997-914c9d46530a --- include/GL/freeglut_ext.h | 13 ++- src/fg_callbacks.c | 224 ++++++++++++++++++++++----------------------- src/fg_init.c | 8 +- src/fg_internal.h | 7 +- src/fg_menu.c | 2 +- src/freeglutdll.def.in | 1 + 6 files changed, 126 insertions(+), 129 deletions(-) diff --git a/include/GL/freeglut_ext.h b/include/GL/freeglut_ext.h index b5dabf4..db9c7db 100644 --- a/include/GL/freeglut_ext.h +++ b/include/GL/freeglut_ext.h @@ -139,9 +139,10 @@ FGAPI void FGAPIENTRY glutLeaveFullScreen( void ); * Window-specific callback functions, see freeglut_callbacks.c */ FGAPI void FGAPIENTRY glutMouseWheelFunc( void (* callback)( int, int, int, int ) ); +FGAPI void FGAPIENTRY glutPositionFunc( void (* callback)( int, int ) ); FGAPI void FGAPIENTRY glutCloseFunc( void (* callback)( void ) ); FGAPI void FGAPIENTRY glutWMCloseFunc( void (* callback)( void ) ); -/* A. Donev: Also a destruction callback for menus */ +/* And also a destruction callback for menus */ FGAPI void FGAPIENTRY glutMenuDestroyFunc( void (* callback)( void ) ); /* @@ -218,15 +219,13 @@ void glutJoystickGetCenter( int ident, float *axes ); /* * Initialization functions, see freeglut_init.c */ +/* to get the typedef for va_list */ +#include FGAPI void FGAPIENTRY glutInitContextVersion( int majorVersion, int minorVersion ); FGAPI void FGAPIENTRY glutInitContextFlags( int flags ); FGAPI void FGAPIENTRY glutInitContextProfile( int profile ); - -/* to get the typedef for va_list */ -#include - -FGAPI void FGAPIENTRY glutInitErrorFunc( void (* vError)( const char *fmt, va_list ap ) ); -FGAPI void FGAPIENTRY glutInitWarningFunc( void (* vWarning)( const char *fmt, va_list ap ) ); +FGAPI void FGAPIENTRY glutInitErrorFunc( void (* callback)( const char *fmt, va_list ap ) ); +FGAPI void FGAPIENTRY glutInitWarningFunc( void (* callback)( const char *fmt, va_list ap ) ); /* OpenGL >= 2.0 support */ FGAPI void FGAPIENTRY glutSetVertexAttribCoord3(GLint attrib); diff --git a/src/fg_callbacks.c b/src/fg_callbacks.c index 6eff0bf..16519c7 100644 --- a/src/fg_callbacks.c +++ b/src/fg_callbacks.c @@ -30,8 +30,77 @@ /* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + /* - * All of the callbacks setting methods can be generalized to this: + * Global callbacks. + */ +/* Sets the global idle callback */ +void FGAPIENTRY glutIdleFunc( FGCBIdle callback ) +{ + FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutIdleFunc" ); + fgState.IdleCallback = callback; +} + +/* Creates a timer and sets its callback */ +void FGAPIENTRY glutTimerFunc( unsigned int timeOut, FGCBTimer callback, int timerID ) +{ + SFG_Timer *timer, *node; + + FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutTimerFunc" ); + + if( (timer = fgState.FreeTimers.Last) ) + { + fgListRemove( &fgState.FreeTimers, &timer->Node ); + } + else + { + if( ! (timer = malloc(sizeof(SFG_Timer))) ) + fgError( "Fatal error: " + "Memory allocation failure in glutTimerFunc()" ); + } + + timer->Callback = callback; + timer->ID = timerID; + timer->TriggerTime = fgElapsedTime() + timeOut; + + for( node = fgState.Timers.First; node; node = node->Node.Next ) + { + if( node->TriggerTime > timer->TriggerTime ) + break; + } + + fgListInsert( &fgState.Timers, &node->Node, &timer->Node ); +} + +/* Deprecated version of glutMenuStatusFunc callback setting method */ +void FGAPIENTRY glutMenuStateFunc( FGCBMenuState callback ) +{ + FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMenuStateFunc" ); + fgState.MenuStateCallback = callback; +} + +/* Sets the global menu status callback for the current window */ +void FGAPIENTRY glutMenuStatusFunc( FGCBMenuStatus callback ) +{ + FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMenuStatusFunc" ); + fgState.MenuStatusCallback = callback; +} + + +/* + * Menu specific callbacks. + */ +/* Callback upon menu destruction */ +void FGAPIENTRY glutMenuDestroyFunc( FGCBDestroy callback ) +{ + FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMenuDestroyFunc" ); + if( fgStructure.CurrentMenu ) + fgStructure.CurrentMenu->Destroy = callback; +} + + +/* + * All of the window-specific callbacks setting methods can be generalized to this: */ #define SET_CALLBACK(a) \ do \ @@ -44,7 +113,7 @@ do \ /* * Sets the Display callback for the current window */ -void FGAPIENTRY glutDisplayFunc( void (* callback)( void ) ) +void FGAPIENTRY glutDisplayFunc( FGCBDisplay callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDisplayFunc" ); if( !callback ) @@ -56,7 +125,7 @@ void FGAPIENTRY glutDisplayFunc( void (* callback)( void ) ) /* * Sets the Reshape callback for the current window */ -void FGAPIENTRY glutReshapeFunc( void (* callback)( int, int ) ) +void FGAPIENTRY glutReshapeFunc( FGCBReshape callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutReshapeFunc" ); SET_CALLBACK( Reshape ); @@ -65,63 +134,37 @@ void FGAPIENTRY glutReshapeFunc( void (* callback)( int, int ) ) /* * Sets the Keyboard callback for the current window */ -void FGAPIENTRY glutKeyboardFunc( void (* callback) - ( unsigned char, int, int ) ) +void FGAPIENTRY glutKeyboardFunc( FGCBKeyboard callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutKeyboardFunc" ); SET_CALLBACK( Keyboard ); } /* - * Sets the Special callback for the current window + * Sets the keyboard key release callback for the current window */ -void FGAPIENTRY glutSpecialFunc( void (* callback)( int, int, int ) ) +void FGAPIENTRY glutKeyboardUpFunc( FGCBKeyboardUp callback ) { - FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpecialFunc" ); - SET_CALLBACK( Special ); + FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutKeyboardUpFunc" ); + SET_CALLBACK( KeyboardUp ); } /* - * Sets the global idle callback + * Sets the Special callback for the current window */ -void FGAPIENTRY glutIdleFunc( void (* callback)( void ) ) +void FGAPIENTRY glutSpecialFunc( FGCBSpecial callback ) { - FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutIdleFunc" ); - fgState.IdleCallback = callback; + FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpecialFunc" ); + SET_CALLBACK( Special ); } /* - * Sets the Timer callback for the current window + * Sets the special key release callback for the current window */ -void FGAPIENTRY glutTimerFunc( unsigned int timeOut, void (* callback)( int ), - int timerID ) +void FGAPIENTRY glutSpecialUpFunc( FGCBSpecialUp callback ) { - SFG_Timer *timer, *node; - - FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutTimerFunc" ); - - if( (timer = fgState.FreeTimers.Last) ) - { - fgListRemove( &fgState.FreeTimers, &timer->Node ); - } - else - { - if( ! (timer = malloc(sizeof(SFG_Timer))) ) - fgError( "Fatal error: " - "Memory allocation failure in glutTimerFunc()" ); - } - - timer->Callback = callback; - timer->ID = timerID; - timer->TriggerTime = fgElapsedTime() + timeOut; - - for( node = fgState.Timers.First; node; node = node->Node.Next ) - { - if( node->TriggerTime > timer->TriggerTime ) - break; - } - - fgListInsert( &fgState.Timers, &node->Node, &timer->Node ); + FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpecialUpFunc" ); + SET_CALLBACK( SpecialUp ); } /* @@ -139,7 +182,7 @@ static void fghVisibility( int status ) INVOKE_WCB( *( fgStructure.CurrentWindow ), Visibility, ( glut_status ) ); } -void FGAPIENTRY glutVisibilityFunc( void (* callback)( int ) ) +void FGAPIENTRY glutVisibilityFunc( FGCBVisibility callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutVisibilityFunc" ); SET_CALLBACK( Visibility ); @@ -151,30 +194,9 @@ void FGAPIENTRY glutVisibilityFunc( void (* callback)( int ) ) } /* - * Sets the keyboard key release callback for the current window - */ -void FGAPIENTRY glutKeyboardUpFunc( void (* callback) - ( unsigned char, int, int ) ) -{ - FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutKeyboardUpFunc" ); - SET_CALLBACK( KeyboardUp ); -} - -/* - * Sets the special key release callback for the current window - */ -void FGAPIENTRY glutSpecialUpFunc( void (* callback)( int, int, int ) ) -{ - FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpecialUpFunc" ); - SET_CALLBACK( SpecialUp ); -} - -/* * Sets the joystick callback and polling rate for the current window */ -void FGAPIENTRY glutJoystickFunc( void (* callback) - ( unsigned int, int, int, int ), - int pollInterval ) +void FGAPIENTRY glutJoystickFunc( FGCBJoystick callback, int pollInterval ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickFunc" ); fgInitialiseJoysticks (); @@ -201,7 +223,7 @@ void FGAPIENTRY glutJoystickFunc( void (* callback) /* * Sets the mouse callback for the current window */ -void FGAPIENTRY glutMouseFunc( void (* callback)( int, int, int, int ) ) +void FGAPIENTRY glutMouseFunc( FGCBMouse callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMouseFunc" ); SET_CALLBACK( Mouse ); @@ -210,7 +232,7 @@ void FGAPIENTRY glutMouseFunc( void (* callback)( int, int, int, int ) ) /* * Sets the mouse wheel callback for the current window */ -void FGAPIENTRY glutMouseWheelFunc( void (* callback)( int, int, int, int ) ) +void FGAPIENTRY glutMouseWheelFunc( FGCBMouseWheel callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMouseWheelFunc" ); SET_CALLBACK( MouseWheel ); @@ -220,7 +242,7 @@ void FGAPIENTRY glutMouseWheelFunc( void (* callback)( int, int, int, int ) ) * Sets the mouse motion callback for the current window (one or more buttons * are pressed) */ -void FGAPIENTRY glutMotionFunc( void (* callback)( int, int ) ) +void FGAPIENTRY glutMotionFunc( FGCBMotion callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMotionFunc" ); SET_CALLBACK( Motion ); @@ -230,7 +252,7 @@ void FGAPIENTRY glutMotionFunc( void (* callback)( int, int ) ) * Sets the passive mouse motion callback for the current window (no mouse * buttons are pressed) */ -void FGAPIENTRY glutPassiveMotionFunc( void (* callback)( int, int ) ) +void FGAPIENTRY glutPassiveMotionFunc( FGCBPassive callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPassiveMotionFunc" ); SET_CALLBACK( Passive ); @@ -239,7 +261,7 @@ void FGAPIENTRY glutPassiveMotionFunc( void (* callback)( int, int ) ) /* * Window mouse entry/leave callback */ -void FGAPIENTRY glutEntryFunc( void (* callback)( int ) ) +void FGAPIENTRY glutEntryFunc( FGCBEntry callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutEntryFunc" ); SET_CALLBACK( Entry ); @@ -248,48 +270,22 @@ void FGAPIENTRY glutEntryFunc( void (* callback)( int ) ) /* * Window destruction callbacks */ -void FGAPIENTRY glutCloseFunc( void (* callback)( void ) ) +void FGAPIENTRY glutCloseFunc( FGCBDestroy callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCloseFunc" ); SET_CALLBACK( Destroy ); } -void FGAPIENTRY glutWMCloseFunc( void (* callback)( void ) ) +void FGAPIENTRY glutWMCloseFunc( FGCBDestroy callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWMCloseFunc" ); glutCloseFunc( callback ); } -/* A. Donev: Destruction callback for menus */ -void FGAPIENTRY glutMenuDestroyFunc( void (* callback)( void ) ) -{ - FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMenuDestroyFunc" ); - if( fgStructure.CurrentMenu ) - fgStructure.CurrentMenu->Destroy = callback; -} - -/* - * Deprecated version of glutMenuStatusFunc callback setting method - */ -void FGAPIENTRY glutMenuStateFunc( void (* callback)( int ) ) -{ - FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMenuStateFunc" ); - fgState.MenuStateCallback = callback; -} - -/* - * Sets the global menu status callback for the current window - */ -void FGAPIENTRY glutMenuStatusFunc( void (* callback)( int, int, int ) ) -{ - FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMenuStatusFunc" ); - fgState.MenuStatusCallback = callback; -} - /* * Sets the overlay display callback for the current window */ -void FGAPIENTRY glutOverlayDisplayFunc( void (* callback)( void ) ) +void FGAPIENTRY glutOverlayDisplayFunc( FGCBOverlayDisplay callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutOverlayDisplayFunc" ); SET_CALLBACK( OverlayDisplay ); @@ -298,7 +294,7 @@ void FGAPIENTRY glutOverlayDisplayFunc( void (* callback)( void ) ) /* * Sets the window status callback for the current window */ -void FGAPIENTRY glutWindowStatusFunc( void (* callback)( int ) ) +void FGAPIENTRY glutWindowStatusFunc( FGCBWindowStatus callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWindowStatusFunc" ); SET_CALLBACK( WindowStatus ); @@ -307,7 +303,7 @@ void FGAPIENTRY glutWindowStatusFunc( void (* callback)( int ) ) /* * Sets the spaceball motion callback for the current window */ -void FGAPIENTRY glutSpaceballMotionFunc( void (* callback)( int, int, int ) ) +void FGAPIENTRY glutSpaceballMotionFunc( FGCBSpaceMotion callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpaceballMotionFunc" ); fgInitialiseSpaceball(); @@ -318,7 +314,7 @@ void FGAPIENTRY glutSpaceballMotionFunc( void (* callback)( int, int, int ) ) /* * Sets the spaceball rotate callback for the current window */ -void FGAPIENTRY glutSpaceballRotateFunc( void (* callback)( int, int, int ) ) +void FGAPIENTRY glutSpaceballRotateFunc( FGCBSpaceRotation callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpaceballRotateFunc" ); fgInitialiseSpaceball(); @@ -329,7 +325,7 @@ void FGAPIENTRY glutSpaceballRotateFunc( void (* callback)( int, int, int ) ) /* * Sets the spaceball button callback for the current window */ -void FGAPIENTRY glutSpaceballButtonFunc( void (* callback)( int, int ) ) +void FGAPIENTRY glutSpaceballButtonFunc( FGCBSpaceButton callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpaceballButtonFunc" ); fgInitialiseSpaceball(); @@ -340,7 +336,7 @@ void FGAPIENTRY glutSpaceballButtonFunc( void (* callback)( int, int ) ) /* * Sets the button box callback for the current window */ -void FGAPIENTRY glutButtonBoxFunc( void (* callback)( int, int ) ) +void FGAPIENTRY glutButtonBoxFunc( FGCBButtonBox callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutButtonBoxFunc" ); SET_CALLBACK( ButtonBox ); @@ -349,7 +345,7 @@ void FGAPIENTRY glutButtonBoxFunc( void (* callback)( int, int ) ) /* * Sets the dials box callback for the current window */ -void FGAPIENTRY glutDialsFunc( void (* callback)( int, int ) ) +void FGAPIENTRY glutDialsFunc( FGCBDials callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDialsFunc" ); SET_CALLBACK( Dials ); @@ -358,7 +354,7 @@ void FGAPIENTRY glutDialsFunc( void (* callback)( int, int ) ) /* * Sets the tablet motion callback for the current window */ -void FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) ) +void FGAPIENTRY glutTabletMotionFunc( FGCBTabletMotion callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutTabletMotionFunc" ); SET_CALLBACK( TabletMotion ); @@ -367,7 +363,7 @@ void FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) ) /* * Sets the tablet buttons callback for the current window */ -void FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) ) +void FGAPIENTRY glutTabletButtonFunc( FGCBTabletButton callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutTabletButtonFunc" ); SET_CALLBACK( TabletButton ); @@ -376,7 +372,7 @@ void FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) ) /* * Sets the multi-pointer entry callback for the current window */ -void FGAPIENTRY glutMultiEntryFunc( void (* callback)(int, int ) ) +void FGAPIENTRY glutMultiEntryFunc( FGCBMultiEntry callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMultiEntryFunc" ); SET_CALLBACK( MultiEntry ); @@ -385,7 +381,7 @@ void FGAPIENTRY glutMultiEntryFunc( void (* callback)(int, int ) ) /* * Sets the multi-pointer button callback for the current window */ -void FGAPIENTRY glutMultiButtonFunc( void (* callback)(int, int, int, int, int ) ) +void FGAPIENTRY glutMultiButtonFunc( FGCBMultiButton callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMultiButtonFunc" ); SET_CALLBACK( MultiButton ); @@ -394,7 +390,7 @@ void FGAPIENTRY glutMultiButtonFunc( void (* callback)(int, int, int, int, int ) /* * Sets the multi-pointer motion callback for the current window */ -void FGAPIENTRY glutMultiMotionFunc( void (* callback)(int, int, int ) ) +void FGAPIENTRY glutMultiMotionFunc( FGCBMultiMotion callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMultiMotionFunc" ); SET_CALLBACK( MultiMotion ); @@ -403,7 +399,7 @@ void FGAPIENTRY glutMultiMotionFunc( void (* callback)(int, int, int ) ) /* * Sets the multi-pointer passive motion callback for the current window */ -void FGAPIENTRY glutMultiPassiveFunc( void (* callback)(int, int, int ) ) +void FGAPIENTRY glutMultiPassiveFunc( FGCBMultiPassive callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMultiPassiveFunc" ); SET_CALLBACK( MultiPassive ); @@ -412,7 +408,7 @@ void FGAPIENTRY glutMultiPassiveFunc( void (* callback)(int, int, int ) ) /* * Sets the context reload callback for the current window */ -void FGAPIENTRY glutInitContextFunc( void (* callback)() ) +void FGAPIENTRY glutInitContextFunc( FGCBInitContext callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutInitContextFunc" ); SET_CALLBACK( InitContext ); @@ -421,7 +417,7 @@ void FGAPIENTRY glutInitContextFunc( void (* callback)() ) /* * Sets the pause callback for the current window */ -void FGAPIENTRY glutPauseFunc( void (* callback)() ) +void FGAPIENTRY glutPauseFunc( FGCBPause callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPauseFunc" ); SET_CALLBACK( Pause ); @@ -430,7 +426,7 @@ void FGAPIENTRY glutPauseFunc( void (* callback)() ) /* * Sets the resume callback for the current window */ -void FGAPIENTRY glutResumeFunc( void (* callback)() ) +void FGAPIENTRY glutResumeFunc( FGCBResume callback ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutResumeFunc" ); SET_CALLBACK( Resume ); diff --git a/src/fg_init.c b/src/fg_init.c index a553b9b..1538388 100644 --- a/src/fg_init.c +++ b/src/fg_init.c @@ -668,19 +668,19 @@ void FGAPIENTRY glutInitContextProfile( int profile ) /* * Sets the user error handler (note the use of va_list for the args to the fmt) */ -void FGAPIENTRY glutInitErrorFunc( void (* vfgError) ( const char *fmt, va_list ap ) ) +void FGAPIENTRY glutInitErrorFunc( FGError callback ) { /* This allows user programs to handle freeglut errors */ - fgState.ErrorFunc = vfgError; + fgState.ErrorFunc = callback; } /* * Sets the user warning handler (note the use of va_list for the args to the fmt) */ -void FGAPIENTRY glutInitWarningFunc( void (* vfgWarning) ( const char *fmt, va_list ap ) ) +void FGAPIENTRY glutInitWarningFunc( FGWarning callback ) { /* This allows user programs to handle freeglut warnings */ - fgState.WarningFunc = vfgWarning; + fgState.WarningFunc = callback; } /*** END OF FILE ***/ diff --git a/src/fg_internal.h b/src/fg_internal.h index fa89c8a..e366592 100644 --- a/src/fg_internal.h +++ b/src/fg_internal.h @@ -191,9 +191,12 @@ /* 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 ); @@ -202,8 +205,6 @@ 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,7 +213,7 @@ 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 ); diff --git a/src/fg_menu.c b/src/fg_menu.c index 9b40bfe..4f8e1a6 100644 --- a/src/fg_menu.c +++ b/src/fg_menu.c @@ -791,7 +791,7 @@ void fghCalculateMenuBoxSize( void ) /* * Creates a new menu object, adding it to the freeglut structure */ -int FGAPIENTRY glutCreateMenu( void(* callback)( int ) ) +int FGAPIENTRY glutCreateMenu( FGCBMenu callback ) { /* The menu object creation code resides in freeglut_structure.c */ FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCreateMenu" ); diff --git a/src/freeglutdll.def.in b/src/freeglutdll.def.in index 9b55b74..88ea7fb 100644 --- a/src/freeglutdll.def.in +++ b/src/freeglutdll.def.in @@ -55,6 +55,7 @@ EXPORTS glutKeyboardFunc glutSpecialFunc glutReshapeFunc + glutPositionFunc glutVisibilityFunc glutDisplayFunc glutMouseFunc -- 1.7.10.4