X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=freeglut-1.3%2Ffreeglut_callbacks.c;h=b741a0c19a53e0db21c9f2a32f47bd72891b26ce;hb=244417cf0e67e55547c077f771513e67f362a8c3;hp=f61bfb83aab7af649bf1a5702fddeb05d8abd73e;hpb=c90e3f21e02020232054f78029ef9071c7359cfb;p=freeglut diff --git a/freeglut-1.3/freeglut_callbacks.c b/freeglut-1.3/freeglut_callbacks.c index f61bfb8..b741a0c 100644 --- a/freeglut-1.3/freeglut_callbacks.c +++ b/freeglut-1.3/freeglut_callbacks.c @@ -32,7 +32,7 @@ #define G_LOG_DOMAIN "freeglut-callbacks" #include "../include/GL/freeglut.h" -#include "../include/GL/freeglut_internal.h" +#include "freeglut_internal.h" /* -- INTERFACE FUNCTIONS -------------------------------------------------- */ @@ -100,7 +100,7 @@ void FGAPIENTRY glutTimerFunc( unsigned int timeOut, void (* callback)( int ), i /* * Create a new freeglut timer hook structure */ - timer = g_new0( SFG_Timer, 1 ); + timer = calloc( sizeof(SFG_Timer), 1 ); /* * Remember the callback address and timer hook's ID @@ -111,13 +111,12 @@ void FGAPIENTRY glutTimerFunc( unsigned int timeOut, void (* callback)( int ), i /* * When will the time out happen (in terms of window's timer) */ - timer->TriggerTime = - g_timer_elapsed( fgState.Timer, NULL ) + (((double) timeOut) / 1000.0); + timer->TriggerTime = fgElapsedTime() + timeOut; /* * Have the new hook attached to the current window */ - fgState.Timers = g_list_append( fgState.Timers, timer ); + fgListAppend( &fgState.Timers, &timer->Node ); } /* @@ -126,7 +125,7 @@ void FGAPIENTRY glutTimerFunc( unsigned int timeOut, void (* callback)( int ), i * I had to peer to GLUT sources to clean up the mess. * Can anyone please explain me what is going on here?!? */ -static void fghVisibility( gint status ) +static void fghVisibility( int status ) { freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Window != NULL ); freeglut_return_if_fail( fgStructure.Window->Callbacks.Visibility != NULL ); @@ -175,16 +174,16 @@ void FGAPIENTRY glutJoystickFunc( void (* callback)( unsigned int, int, int, int /* * Do not forget setting the joystick poll rate */ - fgStructure.Window->State.JoystickPollRate = ((double) pollInterval) / 1000.0; + fgStructure.Window->State.JoystickPollRate = pollInterval; /* * Make sure the joystick polling routine gets called as early as possible: */ fgStructure.Window->State.JoystickLastPoll = - g_timer_elapsed( fgState.Timer, NULL ) - fgStructure.Window->State.JoystickPollRate; + fgElapsedTime() - fgStructure.Window->State.JoystickPollRate; - if( fgStructure.Window->State.JoystickLastPoll < 0.0 ) - fgStructure.Window->State.JoystickLastPoll = 0.0; + if( fgStructure.Window->State.JoystickLastPoll < 0 ) + fgStructure.Window->State.JoystickLastPoll = 0; } /* @@ -220,11 +219,33 @@ void FGAPIENTRY glutEntryFunc( void (* callback)( int ) ) } /* + * Window destruction callbacks + */ +void FGAPIENTRY glutCloseFunc( void (* callback)( void ) ) +{ + SET_CALLBACK( Destroy ); +} + +void FGAPIENTRY glutWMCloseFunc( void (* callback)( void ) ) +{ + glutCloseFunc( callback ); +} + +/* A. Donev: Destruction callback for menus */ +void FGAPIENTRY glutMenuDestroyFunc( void (* callback)( void ) ) +{ + if( fgStructure.Menu == NULL ) return; + fgStructure.Menu->Destroy = callback; +} + +/* * Deprecated version of glutMenuStatusFunc callback setting method */ void FGAPIENTRY glutMenuStateFunc( void (* callback)( int ) ) { - SET_CALLBACK( MenuState ); + freeglut_assert_ready; + + fgState.MenuStateCallback = callback; } /* @@ -232,7 +253,9 @@ void FGAPIENTRY glutMenuStateFunc( void (* callback)( int ) ) */ void FGAPIENTRY glutMenuStatusFunc( void (* callback)( int, int, int ) ) { - SET_CALLBACK( MenuStatus ); + freeglut_assert_ready; + + fgState.MenuStatusCallback = callback; } /*