X-Git-Url: https://jasonwoof.com/gitweb/?p=dwm.git;a=blobdiff_plain;f=draw.h;h=95242eab121973c57c9d1380bb0149831a79bac8;hp=43a57bf6fe4ce49599e861c9fcb9e2e97df76134;hb=0a673ad7a37f3a1bdda7cef316bda300f8f181eb;hpb=e7d41cc18824114300a09d3bdb26c536f30b466e diff --git a/draw.h b/draw.h index 43a57bf..95242ea 100644 --- a/draw.h +++ b/draw.h @@ -1,35 +1,82 @@ /* See LICENSE file for copyright and license details. */ -#define FG(dc, col) ((col)[(dc)->invert ? ColBG : ColFG]) -#define BG(dc, col) ((col)[(dc)->invert ? ColFG : ColBG]) +typedef struct _DDC DDC; -enum { ColBG, ColFG, ColBorder, ColLast }; - -typedef struct { - int x, y, w, h; - Bool invert; +/* X11 types - begin */ +typedef struct _XDraw Draw; +struct _XDraw { + unsigned int w, h; Display *dpy; + int screen; + Window win; + Drawable drawable; GC gc; - Pixmap canvas; - struct { - int ascent; - int descent; - int height; - int width; - XFontSet set; - XFontStruct *xfont; - } font; -} DC; /* draw context */ - -void drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsigned long color); -void drawtext(DC *dc, const char *text, unsigned long col[ColLast]); -void drawtextn(DC *dc, const char *text, size_t n, unsigned long col[ColLast]); -void eprintf(const char *fmt, ...); -void freedc(DC *dc); -unsigned long getcolor(DC *dc, const char *colstr); -DC *initdc(void); -void initfont(DC *dc, const char *fontstr); -void mapdc(DC *dc, Window win, unsigned int w, unsigned int h); -void resizedc(DC *dc, unsigned int w, unsigned int h); -int textnw(DC *dc, const char *text, size_t len); -int textw(DC *dc, const char *text); + DDC *dc; +}; + +struct _XCol { + unsigned long rgb; +}; +typedef struct _XCol Col; + +struct _XFont { + int ascent; + int descent; + unsigned int h, w; + XFontSet set; + XFontStruct *xfont; +}; +typedef struct _XFont Fnt; +/* X11 types - end */ + +struct _DDC { + Draw *draw; + Col *fg; + Col *bg; + Fnt *font; + Bool fill; + DDC *next; +}; + +typedef struct { + unsigned int w; + unsigned int h; + int x; + int y; + int xOff; + int yOff; +} TextExtents; + +/* Drawable abstraction */ +Draw *draw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h); +void draw_resize(Draw *draw, unsigned int w, unsigned int h); +void draw_free(Draw *draw); + +/* Drawing context abstraction */ +DDC *dc_create(Draw *draw); +void dc_free(DDC *dc); + +/* Fnt abstraction */ +Fnt *font_create(const char *fontname); +void font_free(Fnt *font); + +/* Colour abstraction */ +Col *col_create(const char *colname); +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_setfill(DDC *dc, Bool fill); + +/* Drawing functions */ +void dc_drawrect(DDC *dc, int x, int y, unsigned int w, unsigned int h); +void dc_drawtext(DDC *dc, int x, int y, const char *text); + +/* Map functions */ +void dc_map(DDC *dc, int x, int y, unsigned int w, unsigned int h); + +/* Text functions */ +void dc_getextents(DDC *dc, const char *text, TextExtents *extents); +