shit to init the module
This commit is contained in:
parent
925048fedf
commit
cca7a6762d
10 changed files with 57 additions and 12 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
30
otk_c/init.c
Normal 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
7
otk_c/init.h
Normal 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
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue