From d456617f0eb93df0ec8eb81ff6e04ca988c09c60 Mon Sep 17 00:00:00 2001 From: "anselm@garbe.us" Date: Sun, 18 Nov 2012 12:04:29 +0100 Subject: [PATCH] basic draw.c structure --- Makefile | 2 +- draw.c | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ draw.h | 14 ++++-- 3 files changed, 149 insertions(+), 6 deletions(-) create mode 100644 draw.c diff --git a/Makefile b/Makefile index b139b54..ce6e508 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ include config.mk -SRC = dwm.c +SRC = draw.c dwm.c OBJ = ${SRC:.c=.o} all: options dwm diff --git a/draw.c b/draw.c new file mode 100644 index 0000000..04e7f0d --- /dev/null +++ b/draw.c @@ -0,0 +1,139 @@ +/* See LICENSE file for copyright and license details. */ +#include +#include + +#include "draw.h" + +Draw * +draw_create(Display *dpy, Window win, unsigned int w, unsigned int h) { + Draw *draw = (Draw *)calloc(1, sizeof(Draw)); + draw->w = w; + draw->h = h; + /* TODO: drawable creation */ + /* TODO: gc allocation */ + return draw; +} + +void +draw_resize(Draw *draw, unsigned int w, unsigned int h) { + if(!draw) + return; + draw->w = w; + draw->h = h; + /* TODO: resize drawable */ +} + +void +draw_free(Draw *draw) { + /* TODO: deallocate DDCs */ + /* TODO: deallocate drawable */ + free(draw); +} + +DDC * +dc_create(Draw *draw) { + DDC *dc = (DDC *)calloc(1, sizeof(DDC)); + dc->draw = draw; + dc->next = draw->dc; + draw->dc = dc; + return dc; +} + +void +dc_free(DDC *dc) { + DDC **tdc; + + if(!dc) + return; + /* remove from dc list */ + for(tdc = &dc->draw->dc; *tdc && *tdc != dc; tdc = &(*tdc)->next); + *tdc = dc->next; + /* TODO: deallocate any resources of this dc, if needed */ + free(dc); +} + +Fnt * +font_create(const char *fontname) { + Fnt *font = (Fnt *)calloc(1, sizeof(Fnt)); + /* TODO: allocate actual font */ + return font; +} + +void +font_free(Fnt *font) { + if(!font) + return; + /* TODO: deallocate any font resources */ + free(font); +} + +Col * +col_create(const char *colname) { + Col *col = (Col *)calloc(1, sizeof(Col)); + /* TODO: allocate color */ + return col; +} + +void +col_free(Col *col) { + if(!col) + return; + /* TODO: deallocate any color resource */ + free(col); +} + +void +dc_setfont(DDC *dc, Fnt *font) { + if(!dc || !font) + return; + dc->font = font; +} + +void +dc_setfg(DDC *dc, Col *col) { + if(!dc || !col) + return; + dc->fg = col; +} + +void +dc_setbg(DDC *dc, Col *col) { + if(!dc || !col) + return; + dc->bg = col; +} + +void +dc_setfill(DDC *dc, Bool fill) { + if(!dc) + return; + dc->fill = fill; +} + +void +dc_drawrect(DDC *dc, int x, int y, unsigned int w, unsigned int h) { + if(!dc) + return; + /* TODO: draw the rectangle */ +} + +void +dc_drawtext(DDC *dc, int x, int y, const char *text) { + if(!dc) + return; + /* TODO: draw the text */ +} + +void +dc_map(DDC *dc, int x, int y, unsigned int w, unsigned int h) { + if(!dc) + return; + /* TODO: map the dc contents in the region */ +} + +void +dc_getextents(DDC *dc, const char *text, TextExtents *extents) { + if(!dc || !extents) + return; + /* TODO: get extents */ +} diff --git a/draw.h b/draw.h index 955067d..9aec43d 100644 --- a/draw.h +++ b/draw.h @@ -1,13 +1,16 @@ /* See LICENSE file for copyright and license details. */ +typedef struct _DDC DDC; + /* X11 types - begin */ +typedef struct _XDraw Draw; struct _XDraw { unsigned int w, h; Display *dpy; Drawable drawable; GC gc; + DDC *dc; }; -typedef struct _XDraw Draw; struct _XCol { unsigned long rgb; @@ -24,13 +27,14 @@ struct _XFont { typedef struct _XFont Fnt; /* X11 types - end */ -typedef struct { +struct _DDC { Draw *draw; Col *fg; Col *bg; Fnt *font; Bool fill; -} DDC; + DDC *next; +}; typedef struct { unsigned int w; @@ -60,8 +64,8 @@ void col_free(Col *col); /* Drawing context manipulation */ void dc_setfont(DDC *dc, Fnt *font); -void dc_setfg(DDC *dc, Col col); -void dc_setbg(DDC *dc, Col col); +void dc_setfg(DDC *dc, Col *col); +void dc_setbg(DDC *dc, Col *col); void dc_setfill(DDC *dc, Bool fill); /* Drawing functions */