Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
AG_CUSTOMEVENTLOOP(3)	     Library Functions Manual	   AG_CUSTOMEVENTLOOP(3)

NAME
     AG_CustomEventLoop -- agar GUI custom event loop example

SYNOPSIS
     #include <agar/core.h>
     #include <agar/gui.h>

DESCRIPTION
     In  general,  most  Agar  GUI  applications will use the standard Agar-Core
     event loop, AG_EventLoop(3), since it uses the most efficient event-notifi-
     cation mechanism available for the target platform  (e.g.,  kqueue(2),  se-
     lect(2), etc.)

     However,  Agar-GUI  applications  are not required to use AG_EventLoop() at
     all, and may use an application-specific event loop routine.   To	simplify
     writing  of  custom  event  loops,  Agar  provides  the AG_GetNextEvent(3),
     AG_ProcessEvent(3) and AG_ProcessTimeouts(3) functions.   Low-level  driver
     events    are    represented   by	 the   transparent,   driver-independent
     AG_DriverEvent structure (see AG_Driver(3) for details and examples).

CUSTOM EVENT LOOP EXAMPLE
     The following event loop redraws Agar windows whenever needed  (the  redraw
     frequency	being  limited	to  some  nomimal  frame  rate), processes input
     events, and executes timer callbacks (using an inefficient delay loop):

     void
     MY_GenericEventLoop(void *obj)
     {
	     AG_Window *win;
	     Uint32 t1, t2;

	     t1 = AG_GetTicks();
	     for (;;) {
		     t2 = AG_GetTicks();
		     if (t2 - t1 >= rNom) {
			     AG_WindowDrawQueued();

			     t1 = AG_GetTicks();
			     rCur = rNom - (t1-t2);
			     if (rCur < 1) { rCur = 1; }
		     } else if (AG_PendingEvents(NULL)) {
			     AG_DriverEvent dev;

			     if (AG_GetNextEvent(NULL, &dev) == 1)
				     AG_ProcessEvent(NULL, &dev);
		     } else {
			     AG_ProcessTimeouts(t2);
			     AG_Delay(1);
		     }
		     AG_WindowProcessQueued();
	     }
     }

SEE ALSO
     AG_Delay(3),  AG_Driver(3),  AG_Event(3),	 AG_EventLoop(3),   AG_Timer(3),
     AG_Window(3)

HISTORY
     The  AG_CustomEventLoop routine first appeared in Agar 1.0.  The AG_GetNex-
     tEvent() interface appeared in Agar 1.4.0.

Agar 1.7			December 21, 2022	   AG_CUSTOMEVENTLOOP(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=AG_CustomEventLoop&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help