| 1 | /* See LICENSE file for copyright and license details. */ |
| 2 | |
| 3 | typedef struct { |
| 4 | Cursor cursor; |
| 5 | } Cur; |
| 6 | |
| 7 | typedef struct Fnt { |
| 8 | Display *dpy; |
| 9 | unsigned int h; |
| 10 | XftFont *xfont; |
| 11 | FcPattern *pattern; |
| 12 | struct Fnt *next; |
| 13 | } Fnt; |
| 14 | |
| 15 | enum { ColFg, ColBg, ColBorder }; /* Clr scheme index */ |
| 16 | typedef XftColor Clr; |
| 17 | |
| 18 | typedef struct { |
| 19 | unsigned int w, h; |
| 20 | Display *dpy; |
| 21 | int screen; |
| 22 | Window root; |
| 23 | Drawable drawable; |
| 24 | GC gc; |
| 25 | Clr *scheme; |
| 26 | Fnt *fonts; |
| 27 | } Drw; |
| 28 | |
| 29 | /* Drawable abstraction */ |
| 30 | Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h); |
| 31 | void drw_resize(Drw *drw, unsigned int w, unsigned int h); |
| 32 | void drw_free(Drw *drw); |
| 33 | |
| 34 | /* Fnt abstraction */ |
| 35 | Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount); |
| 36 | void drw_fontset_free(Fnt* set); |
| 37 | unsigned int drw_fontset_getwidth(Drw *drw, const char *text); |
| 38 | unsigned int drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n); |
| 39 | void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h); |
| 40 | |
| 41 | /* Colorscheme abstraction */ |
| 42 | void drw_clr_create(Drw *drw, Clr *dest, const char *clrname); |
| 43 | Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount); |
| 44 | |
| 45 | /* Cursor abstraction */ |
| 46 | Cur *drw_cur_create(Drw *drw, int shape); |
| 47 | void drw_cur_free(Drw *drw, Cur *cursor); |
| 48 | |
| 49 | /* Drawing context manipulation */ |
| 50 | void drw_setfontset(Drw *drw, Fnt *set); |
| 51 | void drw_setscheme(Drw *drw, Clr *scm); |
| 52 | |
| 53 | /* Drawing functions */ |
| 54 | void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert); |
| 55 | int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert); |
| 56 | |
| 57 | /* Map functions */ |
| 58 | void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h); |