diff options
| author | Anselm R Garbe <anselm@garbe.us> | 2013-06-19 19:35:33 +0200 | 
|---|---|---|
| committer | Anselm R Garbe <anselm@garbe.us> | 2013-06-19 19:35:33 +0200 | 
| commit | 33a74489f036600bb80a3c34fcdf10e5f9dafae1 (patch) | |
| tree | 306a8a62e6600fe571da72ae52d18ad68dd6cd43 | |
| parent | 5364697914fd4272fc1a6494b4fc522d2935427a (diff) | |
applied Julian's enum approach,
	however renamed theme into scheme resp. Theme into ClrScheme
| -rw-r--r-- | drw.c | 22 | ||||
| -rw-r--r-- | drw.h | 6 | ||||
| -rw-r--r-- | dwm.c | 49 | 
3 files changed, 37 insertions, 40 deletions
| @@ -109,9 +109,8 @@ drw_clr_create(Drw *drw, const char *clrname) {  void  drw_clr_free(Clr *clr) { -	if(!clr) -		return; -	free(clr); +	if(clr) +		free(clr);  }  void @@ -121,19 +120,18 @@ drw_setfont(Drw *drw, Fnt *font) {  }  void -drw_settheme(Drw *drw, Theme *theme) { -	if(!drw || !theme)  -		return; -	drw->theme = theme; +drw_setscheme(Drw *drw, ClrScheme *scheme) { +	if(drw && scheme)  +		drw->scheme = scheme;  }  void  drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty, int invert) {  	int dx; -	if(!drw || !drw->font || !drw->theme) +	if(!drw || !drw->font || !drw->scheme)  		return; -	XSetForeground(drw->dpy, drw->gc, invert ? drw->theme->bg->rgb : drw->theme->fg->rgb); +	XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme->bg->rgb : drw->scheme->fg->rgb);  	dx = (drw->font->ascent + drw->font->descent + 2) / 4;  	if(filled)  		XFillRectangle(drw->dpy, drw->drawable, drw->gc, x+1, y+1, dx+1, dx+1); @@ -147,9 +145,9 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *tex  	int i, tx, ty, th, len, olen;  	Extnts tex; -	if(!drw || !drw->theme) +	if(!drw || !drw->scheme)  		return; -	XSetForeground(drw->dpy, drw->gc, invert ? drw->theme->fg->rgb : drw->theme->bg->rgb); +	XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme->fg->rgb : drw->scheme->bg->rgb);  	XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);  	if(!text || !drw->font)  		return; @@ -166,7 +164,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *tex  	memcpy(buf, text, len);  	if(len < olen)  		for(i = len; i && i > len - 3; buf[--i] = '.'); -	XSetForeground(drw->dpy, drw->gc, invert ? drw->theme->bg->rgb : drw->theme->fg->rgb); +	XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme->bg->rgb : drw->scheme->fg->rgb);  	if(drw->font->set)  		XmbDrawString(drw->dpy, drw->drawable, drw->font->set, drw->gc, tx, ty, buf, len);  	else @@ -20,7 +20,7 @@ typedef struct {  	Clr *fg;  	Clr *bg;  	Clr *border; -} Theme; +} ClrScheme;  typedef struct {  	unsigned int w, h; @@ -29,7 +29,7 @@ typedef struct {  	Window root;  	Drawable drawable;  	GC gc; -	Theme *theme; +	ClrScheme *scheme;  	Fnt *font;  } Drw; @@ -59,7 +59,7 @@ void drw_cur_free(Drw *drw, Cur *cursor);  /* Drawing context manipulation */  void drw_setfont(Drw *drw, Fnt *font); -void drw_settheme(Drw *drw, Theme *theme); +void drw_setscheme(Drw *drw, ClrScheme *scheme);  /* Drawing functions */  void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty, int invert); @@ -57,14 +57,14 @@  #define TEXTW(X)                (drw_font_getexts_width(drw->font, X, strlen(X)) + drw->font->h)  /* enums */ -enum { CurNormal, CurResize, CurMove, CurLast };        /* cursor */ -enum { ColBorder, ColFG, ColBG, ColLast };              /* color */ +enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ +enum { SchemeNorm, SchemeSel, SchemeLast }; /* color schemes */  enum { NetSupported, NetWMName, NetWMState,         NetWMFullscreen, NetActiveWindow, NetWMWindowType, -       NetWMWindowTypeDialog, NetClientList, NetLast };     /* EWMH atoms */ +       NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */  enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */  enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, -       ClkClientWin, ClkRootWin, ClkLast };             /* clicks */ +       ClkClientWin, ClkRootWin, ClkLast }; /* clicks */  typedef union {  	int i; @@ -260,8 +260,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {  static Atom wmatom[WMLast], netatom[NetLast];  static Bool running = True;  static Cur *cursor[CurLast]; -static Theme thmnorm[ColLast]; -static Theme thmsel[ColLast]; +static ClrScheme scheme[SchemeLast];  static Display *dpy;  static Drw *drw;  static Fnt *fnt; @@ -476,12 +475,12 @@ cleanup(void) {  	drw_cur_free(drw, cursor[CurResize]);  	drw_cur_free(drw, cursor[CurMove]);  	drw_font_free(dpy, fnt); -	drw_clr_free(thmnorm->border); -	drw_clr_free(thmnorm->bg); -	drw_clr_free(thmnorm->fg); -	drw_clr_free(thmsel->border); -	drw_clr_free(thmsel->bg); -	drw_clr_free(thmsel->fg); +	drw_clr_free(scheme[SchemeNorm].border); +	drw_clr_free(scheme[SchemeNorm].bg); +	drw_clr_free(scheme[SchemeNorm].fg); +	drw_clr_free(scheme[SchemeSel].border); +	drw_clr_free(scheme[SchemeSel].bg); +	drw_clr_free(scheme[SchemeSel].fg);  	drw_free(drw);  	XSync(dpy, False);  	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); @@ -705,14 +704,14 @@ drawbar(Monitor *m) {  	x = 0;  	for(i = 0; i < LENGTH(tags); i++) {  		w = TEXTW(tags[i]); -		drw_settheme(drw, m->tagset[m->seltags] & 1 << i ? thmsel : thmnorm); +		drw_setscheme(drw, m->tagset[m->seltags] & 1 << i ? &scheme[SchemeSel] : &scheme[SchemeNorm]);  		drw_text(drw, x, 0, w, bh, tags[i], urg & 1 << i);  		drw_rect(drw, x, 0, w, bh, m == selmon && selmon->sel && selmon->sel->tags & 1 << i,  		           occ & 1 << i, urg & 1 << i);  		x += w;  	}  	w = blw = TEXTW(m->ltsymbol); -	drw_settheme(drw, thmnorm); +	drw_setscheme(drw, &scheme[SchemeNorm]);  	drw_text(drw, x, 0, w, bh, m->ltsymbol, 0);  	x += w;  	xx = x; @@ -730,12 +729,12 @@ drawbar(Monitor *m) {  	if((w = x - xx) > bh) {  		x = xx;  		if(m->sel) { -			drw_settheme(drw, m == selmon ? thmsel : thmnorm); +			drw_setscheme(drw, m == selmon ? &scheme[SchemeSel] : &scheme[SchemeNorm]);  			drw_text(drw, x, 0, w, bh, m->sel->name, 0);  			drw_rect(drw, x, 0, w, bh, m->sel->isfixed, m->sel->isfloating, 0);  		}  		else { -			drw_settheme(drw, thmnorm); +			drw_setscheme(drw, &scheme[SchemeNorm]);  			drw_text(drw, x, 0, w, bh, NULL, 0);  		}  	} @@ -793,7 +792,7 @@ focus(Client *c) {  		detachstack(c);  		attachstack(c);  		grabbuttons(c, True); -		XSetWindowBorder(dpy, c->win, thmsel->border->rgb); +		XSetWindowBorder(dpy, c->win, scheme[SchemeSel].border->rgb);  		setfocus(c);  	}  	else { @@ -1041,7 +1040,7 @@ manage(Window w, XWindowAttributes *wa) {  	wc.border_width = c->bw;  	XConfigureWindow(dpy, w, CWBorderWidth, &wc); -	XSetWindowBorder(dpy, w, thmnorm->border->rgb); +	XSetWindowBorder(dpy, w, scheme[SchemeNorm].border->rgb);  	configure(c); /* propagates border_width, if size doesn't change */  	updatewindowtype(c);  	updatesizehints(c); @@ -1523,12 +1522,12 @@ setup(void) {  	cursor[CurResize] = drw_cur_create(drw, XC_sizing);  	cursor[CurMove] = drw_cur_create(drw, XC_fleur);  	/* init appearance */ -	thmnorm->border = drw_clr_create(drw, normbordercolor); -	thmnorm->bg = drw_clr_create(drw, normbgcolor); -	thmnorm->fg = drw_clr_create(drw, normfgcolor); -	thmsel->border = drw_clr_create(drw, selbordercolor); -	thmsel->bg = drw_clr_create(drw, selbgcolor); -	thmsel->fg = drw_clr_create(drw, selfgcolor); +	scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor); +	scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor); +	scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor); +	scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor); +	scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor); +	scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor);  	/* init bars */  	updatebars();  	updatestatus(); @@ -1674,7 +1673,7 @@ unfocus(Client *c, Bool setfocus) {  	if(!c)  		return;  	grabbuttons(c, False); -	XSetWindowBorder(dpy, c->win, thmnorm->border->rgb); +	XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border->rgb);  	if(setfocus) {  		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);  		XDeleteProperty(dpy, root, netatom[NetActiveWindow]); | 
