diff options
| author | Dana Jansens <danakj@orodu.net> | 2002-12-21 19:54:15 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2002-12-21 19:54:15 +0000 |
| commit | 065c6efa774ac144665f340f6c3578ab74e05c7b (patch) | |
| tree | 80e8d61f5d14db5cf7f66fbe58cfcc126e052751 /otk_c/timer.c | |
| parent | 4c9bf6c9a1f2fb3531cec2917576f3d2364b4bf3 (diff) | |
otktimer works. imagecontrol is underway!
Diffstat (limited to 'otk_c/timer.c')
| -rw-r--r-- | otk_c/timer.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/otk_c/timer.c b/otk_c/timer.c new file mode 100644 index 00000000..8764a0e0 --- /dev/null +++ b/otk_c/timer.c @@ -0,0 +1,79 @@ +// -*- mode: C; indent-tabs-mode: nil; c-basic-offset: 2; -*- + +#include "../config.h" +#include "timer.h" +#include "timerqueue.h" + +PyObject *OtkTimer_New(OtkTimeoutHandler handler, OtkTimeoutData data) +{ + OtkTimer *self = PyObject_New(OtkTimer, &OtkTimer_Type); + + assert(handler); assert(data); + self->handler = handler; + self->data = data; + self->recur = self->timing = False; + + return (PyObject*)self; +} + +void OtkTimer_Start(OtkTimer *self) +{ + gettimeofday(&(self->start), 0); + + self->end.tv_sec = self->start.tv_sec + self->timeout / 1000; + self->end.tv_usec = self->start.tv_usec + self->timeout % 1000 * 1000; + + if (! self->timing) { + self->timing = True; + OtkTimerQueue_Add(self); + } +} + +void OtkTimer_Stop(OtkTimer *self) +{ + if (self->timing) { + self->timing = False; + OtkTimerQueue_Remove(self); + } +} + + + + + +static void otktimer_dealloc(OtkTimer* self) +{ + OtkTimer_Stop(self); + // when this is called, the color has already been cleaned out of the cache + PyObject_Del((PyObject*)self); +} + +static int otktimer_compare(OtkTimer *t1, OtkTimer *t2) +{ + if (t1->end.tv_sec == t2->end.tv_sec && t1->end.tv_usec == t2->end.tv_usec) + return 0; + else if ((t1->end.tv_sec < t2->end.tv_sec) || + (t1->end.tv_sec == t2->end.tv_sec && + t1->end.tv_usec < t2->end.tv_usec)) + return -1; + else + return 1; +} + +PyTypeObject OtkTimer_Type = { + PyObject_HEAD_INIT(NULL) + 0, + "OtkTimer", + sizeof(OtkTimer), + 0, + (destructor)otktimer_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + (cmpfunc)otktimer_compare, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ +}; |
