diff --git a/GNUmakefile b/GNUmakefile index 869d80b..ba2557a 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -7,7 +7,7 @@ CFLAGS = -fPIC -Iinclude -D_MILSKO LDFLAGS = LIBS = -L_OBJS = src/ds.o src/core.o src/default.o src/draw.o +L_OBJS = src/ds.o src/core.o src/default.o src/draw.o src/lowlevel.o L_OBJS += src/window.o src/button.o L_LIBS = -lfreetype diff --git a/include/Milsko/LowLevel.h b/include/Milsko/LowLevel.h index 67c49e8..9905fe7 100644 --- a/include/Milsko/LowLevel.h +++ b/include/Milsko/LowLevel.h @@ -32,6 +32,11 @@ struct _MilskoLLCallback { void (*up)(MilskoLL handle); }; +/* lowlevel.c, common part */ +MILSKODECL void MilskoLLCreateCommon(MilskoLL handle); +MILSKODECL void MilskoLLDestroyCommon(MilskoLL handle); + +/* driver-specific */ MILSKODECL MilskoLL MilskoLLCreate(MilskoLL parent, int x, int y, int width, int height); MILSKODECL void MilskoLLDestroy(MilskoLL handle); diff --git a/include/Milsko/X11.h b/include/Milsko/X11.h index 02a88e2..5f19296 100644 --- a/include/Milsko/X11.h +++ b/include/Milsko/X11.h @@ -14,15 +14,11 @@ typedef struct _MilskoLLColor *MilskoLLColor, MilskoLLColorRec; #include struct _MilskoLL { - Display* display; - Window window; - GC gc; - Colormap colormap; - int x; - int y; - unsigned int width; - unsigned int height; - void* user; + Display* display; + Window window; + GC gc; + Colormap colormap; + void* user; MilskoLLCallback callback; }; diff --git a/src/lowlevel.c b/src/lowlevel.c new file mode 100644 index 0000000..8e22ee6 --- /dev/null +++ b/src/lowlevel.c @@ -0,0 +1,11 @@ +/* $Id$ */ +#include + +void MilskoLLCreateCommon(MilskoLL handle) { + handle->callback = malloc(sizeof(*handle->callback)); + memset(handle->callback, 0, sizeof(*handle->callback)); +} + +void MilskoLLDestroyCommon(MilskoLL handle) { + free(handle->callback); +} diff --git a/src/x11.c b/src/x11.c index 47b17f1..7ea17a8 100644 --- a/src/x11.c +++ b/src/x11.c @@ -9,14 +9,9 @@ MilskoLL MilskoLLCreate(MilskoLL parent, int x, int y, int width, int height) { Window root; unsigned int border, depth; - r = malloc(sizeof(*r)); - r->x = x; - r->y = y; - r->width = width; - r->height = height; - r->callback = malloc(sizeof(*r->callback)); + r = malloc(sizeof(*r)); - memset(r->callback, 0, sizeof(*r->callback)); + MilskoLLCreateCommon(r); if(parent == NULL) { r->display = XOpenDisplay(NULL); @@ -37,6 +32,8 @@ MilskoLL MilskoLLCreate(MilskoLL parent, int x, int y, int width, int height) { } void MilskoLLDestroy(MilskoLL handle) { + MilskoLLDestroyCommon(handle); + XFreeGC(handle->display, handle->gc); XDestroyWindow(handle->display, handle->window); free(handle); @@ -85,11 +82,6 @@ void MilskoLLGetXYWH(MilskoLL handle, int* x, int* y, unsigned int* w, unsigned unsigned int border, depth; XGetGeometry(handle->display, handle->window, &root, x, y, w, h, &border, &depth); - - handle->x = *x; - handle->y = *y; - handle->width = *w; - handle->height = *h; } void MilskoLLSetXY(MilskoLL handle, int x, int y) {