X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffg_callbacks.c;h=11924b360cd54e9a489043ebdbebd40fed599dca;hb=2c12c9eb8d63cabac2d4113b4f54fdf53da8368c;hp=7c82c8186d78aeadecff7fa2ee84da6dfbe56661;hpb=75c76b69c97acea662e41c261dc90324d8906825;p=freeglut diff --git a/src/fg_callbacks.c b/src/fg_callbacks.c index 7c82c81..11924b3 100644 --- a/src/fg_callbacks.c +++ b/src/fg_callbacks.c @@ -1,5 +1,5 @@ /* - * freeglut_callbacks.c + * fg_callbacks.c * * The callbacks setting methods. * @@ -63,6 +63,7 @@ void FGAPIENTRY glutTimerFunc( unsigned int timeOut, FGCBTimer callback, int tim timer->ID = timerID; timer->TriggerTime = fgElapsedTime() + timeOut; + /* Insert such that timers are sorted by end-time */ for( node = fgState.Timers.First; node; node = node->Node.Next ) { if( node->TriggerTime > timer->TriggerTime ) @@ -121,31 +122,31 @@ void FGAPIENTRY glut##a##Func( FGCB##b callback ) \ #define IMPLEMENT_CALLBACK_FUNC(a) IMPLEMENT_CALLBACK_FUNC_2NAME(a,a) /* Implement all these callback setter functions... */ -IMPLEMENT_CALLBACK_FUNC(Position); -IMPLEMENT_CALLBACK_FUNC(Keyboard); -IMPLEMENT_CALLBACK_FUNC(KeyboardUp); -IMPLEMENT_CALLBACK_FUNC(Special); -IMPLEMENT_CALLBACK_FUNC(SpecialUp); -IMPLEMENT_CALLBACK_FUNC(Mouse); -IMPLEMENT_CALLBACK_FUNC(MouseWheel); -IMPLEMENT_CALLBACK_FUNC(Motion); -IMPLEMENT_CALLBACK_FUNC_2NAME(PassiveMotion,Passive); -IMPLEMENT_CALLBACK_FUNC(Entry); +IMPLEMENT_CALLBACK_FUNC(Position) +IMPLEMENT_CALLBACK_FUNC(Keyboard) +IMPLEMENT_CALLBACK_FUNC(KeyboardUp) +IMPLEMENT_CALLBACK_FUNC(Special) +IMPLEMENT_CALLBACK_FUNC(SpecialUp) +IMPLEMENT_CALLBACK_FUNC(Mouse) +IMPLEMENT_CALLBACK_FUNC(MouseWheel) +IMPLEMENT_CALLBACK_FUNC(Motion) +IMPLEMENT_CALLBACK_FUNC_2NAME(PassiveMotion,Passive) +IMPLEMENT_CALLBACK_FUNC(Entry) /* glutWMCloseFunc is an alias for glutCloseFunc; both set the window's Destroy callback */ -IMPLEMENT_CALLBACK_FUNC_2NAME(Close,Destroy); -IMPLEMENT_CALLBACK_FUNC_2NAME(WMClose,Destroy); -IMPLEMENT_CALLBACK_FUNC(OverlayDisplay); -IMPLEMENT_CALLBACK_FUNC(WindowStatus); -IMPLEMENT_CALLBACK_FUNC(ButtonBox); -IMPLEMENT_CALLBACK_FUNC(Dials); -IMPLEMENT_CALLBACK_FUNC(TabletMotion); -IMPLEMENT_CALLBACK_FUNC(TabletButton); -IMPLEMENT_CALLBACK_FUNC(MultiEntry); -IMPLEMENT_CALLBACK_FUNC(MultiButton); -IMPLEMENT_CALLBACK_FUNC(MultiMotion); -IMPLEMENT_CALLBACK_FUNC(MultiPassive); -IMPLEMENT_CALLBACK_FUNC(InitContext); -IMPLEMENT_CALLBACK_FUNC(AppStatus); +IMPLEMENT_CALLBACK_FUNC_2NAME(Close,Destroy) +IMPLEMENT_CALLBACK_FUNC_2NAME(WMClose,Destroy) +IMPLEMENT_CALLBACK_FUNC(OverlayDisplay) +IMPLEMENT_CALLBACK_FUNC(WindowStatus) +IMPLEMENT_CALLBACK_FUNC(ButtonBox) +IMPLEMENT_CALLBACK_FUNC(Dials) +IMPLEMENT_CALLBACK_FUNC(TabletMotion) +IMPLEMENT_CALLBACK_FUNC(TabletButton) +IMPLEMENT_CALLBACK_FUNC(MultiEntry) +IMPLEMENT_CALLBACK_FUNC(MultiButton) +IMPLEMENT_CALLBACK_FUNC(MultiMotion) +IMPLEMENT_CALLBACK_FUNC(MultiPassive) +IMPLEMENT_CALLBACK_FUNC(InitContext) +IMPLEMENT_CALLBACK_FUNC(AppStatus) @@ -246,11 +247,12 @@ void FGAPIENTRY glutJoystickFunc( FGCBJoystick callback, int pollInterval ) SET_CALLBACK( Joystick ); fgStructure.CurrentWindow->State.JoystickPollRate = pollInterval; - fgStructure.CurrentWindow->State.JoystickLastPoll = - fgElapsedTime() - fgStructure.CurrentWindow->State.JoystickPollRate; - - if( fgStructure.CurrentWindow->State.JoystickLastPoll < 0 ) + /* set last poll time such that joystick will be polled asap */ + fgStructure.CurrentWindow->State.JoystickLastPoll = fgElapsedTime(); + if (fgStructure.CurrentWindow->State.JoystickLastPoll < pollInterval) fgStructure.CurrentWindow->State.JoystickLastPoll = 0; + else + fgStructure.CurrentWindow->State.JoystickLastPoll -= pollInterval; }