summaryrefslogtreecommitdiff
path: root/otk_c/timer.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-12-21 19:54:15 +0000
committerDana Jansens <danakj@orodu.net>2002-12-21 19:54:15 +0000
commit065c6efa774ac144665f340f6c3578ab74e05c7b (patch)
tree80e8d61f5d14db5cf7f66fbe58cfcc126e052751 /otk_c/timer.c
parent4c9bf6c9a1f2fb3531cec2917576f3d2364b4bf3 (diff)
otktimer works. imagecontrol is underway!
Diffstat (limited to 'otk_c/timer.c')
-rw-r--r--otk_c/timer.c79
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 */
+};