shit to init the module

This commit is contained in:
Dana Jansens 2002-12-21 12:27:05 +00:00
parent 925048fedf
commit cca7a6762d
10 changed files with 57 additions and 12 deletions

View file

@ -3,8 +3,8 @@ exec_prefix=$(prefix)
libdir=$(exec_prefix)/lib libdir=$(exec_prefix)/lib
targets = libotk.so libotk.a targets = libotk.so libotk.a
sources = display.c screeninfo.c rect.c gccache.c color.c sources = init.c display.c screeninfo.c rect.c gccache.c color.c
headers = display.h screeninfo.h rect.h gccache.h color.h headers = init.h display.h screeninfo.h rect.h gccache.h color.h
CFLAGS+=-g -I/usr/gwar/include/python2.2 -W -Wall CFLAGS+=-g -I/usr/gwar/include/python2.2 -W -Wall

View file

@ -46,7 +46,7 @@ static long otkcolor_hash(OtkColor *self)
return self->screen << 24 | self->red << 16 | self->green << 8 | self->blue; return self->screen << 24 | self->red << 16 | self->green << 8 | self->blue;
} }
static PyTypeObject OtkColor_Type = { PyTypeObject OtkColor_Type = {
PyObject_HEAD_INIT(NULL) PyObject_HEAD_INIT(NULL)
0, 0,
"Color", "Color",

View file

@ -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 #ifndef __color_h
#define __color_h #define __color_h
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <Python.h> #include <Python.h>
extern PyTypeObject OtkColor_Type;
//! OtkColor objects are immutable. DONT CHANGE THEM. //! OtkColor objects are immutable. DONT CHANGE THEM.
typedef struct OtkColor { typedef struct OtkColor {
PyObject_HEAD PyObject_HEAD

View file

@ -126,6 +126,8 @@ line argument.\n\n"));
self->screenInfoList = PyList_New(ScreenCount(self->display)); self->screenInfoList = PyList_New(ScreenCount(self->display));
for (i = 0; i < ScreenCount(self->display); ++i) for (i = 0; i < ScreenCount(self->display); ++i)
PyList_SetItem(self->screenInfoList, i, OtkScreenInfo_New(i)); PyList_SetItem(self->screenInfoList, i, OtkScreenInfo_New(i));
Py_INCREF(OBDisplay); // make sure it stays around!!
} }
void OtkDisplay_Grab(OtkDisplay *self) void OtkDisplay_Grab(OtkDisplay *self)

View file

@ -10,6 +10,8 @@ struct OtkDisplay;
extern struct OtkDisplay *OBDisplay; // the global display XXX: move this to app.h and ob.h? extern struct OtkDisplay *OBDisplay; // the global display XXX: move this to app.h and ob.h?
extern PyTypeObject OtkDisplay_Type;
typedef struct OtkDisplay { typedef struct OtkDisplay {
PyObject_HEAD PyObject_HEAD

View file

@ -86,7 +86,7 @@ OtkGCCacheItem *OtkGCCacheItem_New()
} }
void OtkGCCache_Initialize(int screen_count) void OtkGCCache_Initialize()
{ {
unsigned int i; unsigned int i;
@ -94,7 +94,7 @@ void OtkGCCache_Initialize(int screen_count)
gccache->context_count = 128; gccache->context_count = 128;
gccache->cache_size = 16; 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->cache_total_size = gccache->cache_size * gccache->cache_buckets;
gccache->contexts = malloc(sizeof(OtkGCCacheContext*) * gccache->contexts = malloc(sizeof(OtkGCCacheContext*) *
@ -108,7 +108,7 @@ void OtkGCCache_Initialize(int screen_count)
} }
void OtkGCCache_Destroy() /*void OtkGCCache_Destroy()
{ {
unsigned int i; unsigned int i;
@ -122,9 +122,9 @@ void OtkGCCache_Destroy()
free(gccache->cache); free(gccache->cache);
free(gccache); free(gccache);
gccache = NULL; gccache = NULL;
} }*/
OtkGCCacheContext *OtkGCCache_NextContext(int screen) static OtkGCCacheContext *nextContext(int screen)
{ {
Window hd = OtkDisplay_ScreenInfo(OBDisplay, screen)->root_window; Window hd = OtkDisplay_ScreenInfo(OBDisplay, screen)->root_window;
OtkGCCacheContext *c; OtkGCCacheContext *c;
@ -202,7 +202,7 @@ OtkGCCacheItem *OtkGCCache_Find(OtkColor *color, XFontStruct *font,
gccache->cache[k-1] = c; gccache->cache[k-1] = c;
} }
} else { } else {
c->ctx = OtkGCCache_NextContext(screen); c->ctx = nextContext(screen);
OtkGCCacheContext_Set(c->ctx, color, font, function, subwindow, linewidth); OtkGCCacheContext_Set(c->ctx, color, font, function, subwindow, linewidth);
c->ctx->used = True; c->ctx->used = True;
c->count = 1; c->count = 1;

View file

@ -51,8 +51,8 @@ typedef struct OtkGCCache {
OtkGCCacheItem **cache; OtkGCCacheItem **cache;
} OtkGCCache; } OtkGCCache;
void OtkGCCache_Initialize(int screen_count); void OtkGCCache_Initialize();
void OtkGCCache_Destroy(); //void OtkGCCache_Destroy();
// cleans up the cache // cleans up the cache
void OtkGCCache_Purge(); void OtkGCCache_Purge();

30
otk_c/init.c Normal file
View file

@ -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 <X11/Xlib.h>
#include <Python.h>
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();
}

7
otk_c/init.h Normal file
View file

@ -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

View file

@ -5,6 +5,8 @@
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <Python.h> #include <Python.h>
extern PyTypeObject OtkScreenInfo_Type;
typedef struct OtkScreenInfo { typedef struct OtkScreenInfo {
int screen; int screen;
Window root_window; Window root_window;