Update of /cvsroot/htoolkit/port/src/cbits/GTK
In directory sc8-pr-cvs1:/tmp/cvs-serv5945/port/src/cbits/GTK
Modified Files:
Timer.c
Log Message:
Efficient implementation for timers
Index: Timer.c
===================================================================
RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/Timer.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Timer.c 10 Feb 2003 22:42:09 -0000 1.3
--- Timer.c 26 Mar 2003 02:19:57 -0000 1.4
***************
*** 3,7 ****
#include "Internals.h"
! static gboolean osTimerProc( gpointer data )
{
handleTimer((TimerHandle) data);
--- 3,7 ----
#include "Internals.h"
! static gboolean osTimerProc(gpointer data)
{
handleTimer((TimerHandle) data);
***************
*** 9,20 ****
}
! TimerHandle osCreateTimer( int msecs )
{
! guint timerid;
! TimerHandle timer = rmalloc( sizeof(guint) );
!
! *timer = 0;
! timerid = gtk_timeout_add( msecs, osTimerProc, timer );
! *timer = timerid;
gActiveObjects++;
--- 9,18 ----
}
! TimerHandle osCreateTimer(int msecs)
{
! TimerHandle timer = rmalloc(sizeof(*timer));
! timer->interval = msecs;
! timer->enabled = TRUE;
! timer->id = (msecs > 0) ? gtk_timeout_add(msecs, osTimerProc, timer) : 0;
gActiveObjects++;
***************
*** 22,32 ****
}
! void osDestroyTimer( TimerHandle timer )
{
if (timer!=NULL)
{
! gtk_timeout_remove( *timer );
rfree(timer);
gActiveObjects--;
}
}
--- 20,71 ----
}
! void osDestroyTimer(TimerHandle timer)
{
if (timer!=NULL)
{
! if (timer->id > 0)
! gtk_timeout_remove(timer->id);
rfree(timer);
gActiveObjects--;
}
}
+
+ void osSetTimerInterval(TimerHandle timer, int msecs)
+ {
+ if (timer->interval != msecs)
+ {
+ timer->interval = msecs;
+ if (timer->enabled)
+ {
+ if (timer->id > 0)
+ gtk_timeout_remove(timer->id);
+ timer->id = (msecs > 0) gtk_timeout_add(msecs, osTimerProc, timer) : 0;
+ }
+ }
+ };
+
+ int osGetTimerInterval(TimerHandle timer)
+ {
+ return timer->interval;
+ };
+
+ void osEnableTimer(TimerHandle timer, BOOL enabled)
+ {
+ timer->enabled = enabled;
+ if (timer->enabled)
+ {
+ if (timer->id <= 0 && timer->interval > 0)
+ timer->id = gtk_timeout_add(msecs, osTimerProc, timer);
+ }
+ else
+ {
+ if (timer->id > 0)
+ gtk_timeout_remove(timer->id);
+ timer->id = 0;
+ }
+ };
+
+ BOOL osIsTimerEnabled(TimerHandle timer)
+ {
+ return timer->enabled;
+ };
|