From cca7a6762d273815947bd5c7cc58ab6713693e8e Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 21 Dec 2002 12:27:05 +0000 Subject: [PATCH] shit to init the module --- otk_c/Makefile | 4 ++-- otk_c/color.c | 2 +- otk_c/color.h | 4 +++- otk_c/display.c | 2 ++ otk_c/display.h | 2 ++ otk_c/gccache.c | 12 ++++++------ otk_c/gccache.h | 4 ++-- otk_c/init.c | 30 ++++++++++++++++++++++++++++++ otk_c/init.h | 7 +++++++ otk_c/screeninfo.h | 2 ++ 10 files changed, 57 insertions(+), 12 deletions(-) create mode 100644 otk_c/init.c create mode 100644 otk_c/init.h diff --git a/otk_c/Makefile b/otk_c/Makefile index b9253343..2e0589d6 100644 --- a/otk_c/Makefile +++ b/otk_c/Makefile @@ -3,8 +3,8 @@ exec_prefix=$(prefix) libdir=$(exec_prefix)/lib targets = libotk.so libotk.a -sources = display.c screeninfo.c rect.c gccache.c color.c -headers = display.h screeninfo.h rect.h gccache.h color.h +sources = init.c display.c screeninfo.c rect.c gccache.c color.c +headers = init.h display.h screeninfo.h rect.h gccache.h color.h CFLAGS+=-g -I/usr/gwar/include/python2.2 -W -Wall diff --git a/otk_c/color.c b/otk_c/color.c index d4dad53d..595eb08a 100644 --- a/otk_c/color.c +++ b/otk_c/color.c @@ -46,7 +46,7 @@ static long otkcolor_hash(OtkColor *self) return self->screen << 24 | self->red << 16 | self->green << 8 | self->blue; } -static PyTypeObject OtkColor_Type = { +PyTypeObject OtkColor_Type = { PyObject_HEAD_INIT(NULL) 0, "Color", diff --git a/otk_c/color.h b/otk_c/color.h index 6e9f421b..143429a0 100644 --- a/otk_c/color.h +++ b/otk_c/color.h @@ -1,10 +1,12 @@ -// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- +// -*- mode: C; indent-tabs-mode: nil; c-basic-offset: 2; -*- #ifndef __color_h #define __color_h #include #include +extern PyTypeObject OtkColor_Type; + //! OtkColor objects are immutable. DONT CHANGE THEM. typedef struct OtkColor { PyObject_HEAD diff --git a/otk_c/display.c b/otk_c/display.c index 5efe7197..016aa948 100644 --- a/otk_c/display.c +++ b/otk_c/display.c @@ -126,6 +126,8 @@ line argument.\n\n")); self->screenInfoList = PyList_New(ScreenCount(self->display)); for (i = 0; i < ScreenCount(self->display); ++i) PyList_SetItem(self->screenInfoList, i, OtkScreenInfo_New(i)); + + Py_INCREF(OBDisplay); // make sure it stays around!! } void OtkDisplay_Grab(OtkDisplay *self) diff --git a/otk_c/display.h b/otk_c/display.h index a36cd853..f13c52fb 100644 --- a/otk_c/display.h +++ b/otk_c/display.h @@ -10,6 +10,8 @@ struct OtkDisplay; extern struct OtkDisplay *OBDisplay; // the global display XXX: move this to app.h and ob.h? +extern PyTypeObject OtkDisplay_Type; + typedef struct OtkDisplay { PyObject_HEAD diff --git a/otk_c/gccache.c b/otk_c/gccache.c index 71232bf4..f8b40f31 100644 --- a/otk_c/gccache.c +++ b/otk_c/gccache.c @@ -86,7 +86,7 @@ OtkGCCacheItem *OtkGCCacheItem_New() } -void OtkGCCache_Initialize(int screen_count) +void OtkGCCache_Initialize() { unsigned int i; @@ -94,7 +94,7 @@ void OtkGCCache_Initialize(int screen_count) gccache->context_count = 128; gccache->cache_size = 16; - gccache->cache_buckets = 8 * screen_count; + gccache->cache_buckets = 8 * ScreenCount(OBDisplay->display); gccache->cache_total_size = gccache->cache_size * gccache->cache_buckets; gccache->contexts = malloc(sizeof(OtkGCCacheContext*) * @@ -108,7 +108,7 @@ void OtkGCCache_Initialize(int screen_count) } -void OtkGCCache_Destroy() +/*void OtkGCCache_Destroy() { unsigned int i; @@ -122,9 +122,9 @@ void OtkGCCache_Destroy() free(gccache->cache); free(gccache); gccache = NULL; -} +}*/ -OtkGCCacheContext *OtkGCCache_NextContext(int screen) +static OtkGCCacheContext *nextContext(int screen) { Window hd = OtkDisplay_ScreenInfo(OBDisplay, screen)->root_window; OtkGCCacheContext *c; @@ -202,7 +202,7 @@ OtkGCCacheItem *OtkGCCache_Find(OtkColor *color, XFontStruct *font, gccache->cache[k-1] = c; } } else { - c->ctx = OtkGCCache_NextContext(screen); + c->ctx = nextContext(screen); OtkGCCacheContext_Set(c->ctx, color, font, function, subwindow, linewidth); c->ctx->used = True; c->count = 1; diff --git a/otk_c/gccache.h b/otk_c/gccache.h index ccd95524..d7318260 100644 --- a/otk_c/gccache.h +++ b/otk_c/gccache.h @@ -51,8 +51,8 @@ typedef struct OtkGCCache { OtkGCCacheItem **cache; } OtkGCCache; -void OtkGCCache_Initialize(int screen_count); -void OtkGCCache_Destroy(); +void OtkGCCache_Initialize(); +//void OtkGCCache_Destroy(); // cleans up the cache void OtkGCCache_Purge(); diff --git a/otk_c/init.c b/otk_c/init.c new file mode 100644 index 00000000..5f576ac3 --- /dev/null +++ b/otk_c/init.c @@ -0,0 +1,30 @@ +// -*- mode: C; indent-tabs-mode: nil; c-basic-offset: 2; -*- + +#include "../config.h" +#include "display.h" +#include "screeninfo.h" +#include "color.h" +#include "gccache.h" + +#include +#include + +static PyMethodDef otk_methods[] = { +// {"new_noddy", noddy_new_noddy, METH_VARARGS, +// "Create a new Noddy object."}, + + {NULL, NULL, 0, NULL} +}; + +void initotk(char *display) +{ + OtkDisplay_Type.ob_type = &PyType_Type; + OtkScreenInfo_Type.ob_type = &PyType_Type; + OtkColor_Type.ob_type = &PyType_Type; + + Py_InitModule("otk", otk_methods); + + OtkDisplay_Initialize(display); + assert(OBDisplay); + OtkGCCache_Initialize(); +} diff --git a/otk_c/init.h b/otk_c/init.h new file mode 100644 index 00000000..ba807f23 --- /dev/null +++ b/otk_c/init.h @@ -0,0 +1,7 @@ +// -*- mode: C; indent-tabs-mode: nil; c-basic-offset: 2; -*- +#ifndef __init_h +#define __init_h + +void initotk(char *display); + +#endif // __init_h diff --git a/otk_c/screeninfo.h b/otk_c/screeninfo.h index 5114a37c..3a330f57 100644 --- a/otk_c/screeninfo.h +++ b/otk_c/screeninfo.h @@ -5,6 +5,8 @@ #include #include +extern PyTypeObject OtkScreenInfo_Type; + typedef struct OtkScreenInfo { int screen; Window root_window; -- 2.39.2