Created
March 24, 2015 17:19
-
-
Save KOMON/0a4819f030e4d6f84ebe to your computer and use it in GitHub Desktop.
a DWM patch to make the statuscolors patch work with the latest commit to HEAD
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -up dwm/drw.c dwm_git_colors/drw.c | |
--- dwm/drw.c 2015-03-24 10:00:33.865796838 -0700 | |
+++ dwm_git_colors/drw.c 2015-03-24 09:56:59.542647284 -0700 | |
@@ -202,13 +202,38 @@ drw_setscheme(Drw *drw, ClrScheme *schem | |
drw->scheme = scheme; | |
} | |
+int | |
+drw_colored_text(Drw *drw, ClrScheme *scheme, int numcolors, int x, int y, unsigned int w, unsigned int h, char *text) { | |
+ if(!drw || !drw->fontcount || !drw->scheme) | |
+ return 0; | |
+ | |
+ char *buf = text, *ptr = buf, c =1; | |
+ int i; | |
+ | |
+ while(*ptr) { | |
+ for(i = 0; *ptr < 0 || *ptr > numcolors; i++, ptr++); | |
+ if(!*ptr) | |
+ break; | |
+ c = *ptr; | |
+ *ptr = 0; | |
+ if(i) { | |
+ x = drw_text(drw, x, y, w, h, buf, 0); | |
+ } | |
+ *ptr = c; | |
+ drw_setscheme(drw, &scheme[c-1]); | |
+ buf = ++ptr; | |
+ } | |
+ drw_text(drw, x, y, w, h, buf, 0); | |
+ return x; | |
+} | |
+ | |
void | |
-drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty, int invert) { | |
+drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty) { | |
int dx; | |
if(!drw || !drw->fontcount || !drw->scheme) | |
return; | |
- XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme->bg->pix : drw->scheme->fg->pix); | |
+ XSetForeground(drw->dpy, drw->gc, drw->scheme->fg->pix); | |
dx = (drw->fonts[0]->ascent + drw->fonts[0]->descent + 2) / 4; | |
if(filled) | |
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x+1, y+1, dx+1, dx+1); | |
@@ -217,7 +242,7 @@ drw_rect(Drw *drw, int x, int y, unsigne | |
} | |
int | |
-drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int invert) { | |
+drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int pad) { | |
char buf[1024]; | |
int tx, ty, th; | |
Extnts tex; | |
@@ -242,7 +267,7 @@ drw_text(Drw *drw, int x, int y, unsigne | |
if (!drw || !drw->scheme) { | |
return 0; | |
} else if (render) { | |
- XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme->fg->pix : drw->scheme->bg->pix); | |
+ XSetForeground(drw->dpy, drw->gc, drw->scheme->bg->pix); | |
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); | |
} | |
@@ -294,10 +319,10 @@ drw_text(Drw *drw, int x, int y, unsigne | |
for(i = len; i && i > len - 3; buf[--i] = '.'); | |
if (render) { | |
- th = curfont->ascent + curfont->descent; | |
- ty = y + (h / 2) - (th / 2) + curfont->ascent; | |
+ th = pad ? (curfont->ascent + curfont->descent) : 0; | |
+ ty = y + ((h + curfont->ascent - curfont->descent) / 2); | |
tx = x + (h / 2); | |
- XftDrawStringUtf8(d, invert ? &drw->scheme->bg->rgb : &drw->scheme->fg->rgb, curfont->xfont, tx, ty, (XftChar8 *)buf, len); | |
+ XftDrawStringUtf8(d, &drw->scheme->fg->rgb, curfont->xfont, tx, ty, (XftChar8 *)buf, len); | |
} | |
x += tex.w; | |
diff -up dwm/drw.h dwm_git_colors/drw.h | |
--- dwm/drw.h 2015-03-24 10:00:33.865796838 -0700 | |
+++ dwm_git_colors/drw.h 2015-03-24 09:22:03.216317586 -0700 | |
@@ -67,8 +67,9 @@ void drw_setfont(Drw *drw, Fnt *font); | |
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); | |
-int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int invert); | |
+int drw_colored_text(Drw *drw, ClrScheme *scheme, int numcolors, int x, int y, unsigned int w, unsigned int h, char *text); | |
+void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty); | |
+int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int pad); | |
/* Map functions */ | |
void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h); | |
Binary files dwm/drw.o and dwm_git_colors/drw.o differ | |
Binary files dwm/dwm and dwm_git_colors/dwm differ | |
diff -up dwm/dwm.c dwm_git_colors/dwm.c | |
--- dwm/dwm.c 2015-03-24 10:02:59.752217939 -0700 | |
+++ dwm_git_colors/dwm.c 2015-03-24 09:23:22.826334134 -0700 | |
@@ -51,6 +51,7 @@ | |
* MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy))) | |
#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags])) | |
#define LENGTH(X) (sizeof X / sizeof X[0]) | |
+#define MAXCOLORS 9 | |
#define MOUSEMASK (BUTTONMASK|PointerMotionMask) | |
#define WIDTH(X) ((X)->w + 2 * (X)->bw) | |
#define HEIGHT(X) ((X)->h + 2 * (X)->bw) | |
@@ -261,7 +263,7 @@ static void (*handler[LASTEvent]) (XEven | |
static Atom wmatom[WMLast], netatom[NetLast]; | |
static Bool running = True; | |
static Cur *cursor[CurLast]; | |
-static ClrScheme scheme[SchemeLast]; | |
+static ClrScheme scheme[MAXCOLORS]; | |
static Display *dpy; | |
static Drw *drw; | |
static Monitor *mons, *selmon; | |
@@ -703,14 +716,14 @@ drawbar(Monitor *m) { | |
x = 0; | |
for(i = 0; i < LENGTH(tags); i++) { | |
w = TEXTW(tags[i]); | |
- 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_setscheme(drw, &scheme[(m->tagset[m->seltags] & 1 << i) ? 1 : (urg & 1 << i ? 2:0)]); | |
+ drw_text(drw, x, 0, w, bh, tags[i], 1); | |
drw_rect(drw, x, 0, w, bh, m == selmon && selmon->sel && selmon->sel->tags & 1 << i, | |
- occ & 1 << i, urg & 1 << i); | |
+ occ & 1 << i); | |
x += w; | |
} | |
w = blw = TEXTW(m->ltsymbol); | |
- drw_setscheme(drw, &scheme[SchemeNorm]); | |
+ drw_setscheme(drw, &scheme[0]); | |
drw_text(drw, x, 0, w, bh, m->ltsymbol, 0); | |
x += w; | |
xx = x; | |
@@ -721,19 +734,19 @@ drawbar(Monitor *m) { | |
x = xx; | |
w = m->ww - xx; | |
} | |
- drw_text(drw, x, 0, w, bh, stext, 0); | |
+ drw_colored_text(drw, scheme, NUMCOLORS, x, 0, w, bh, stext); | |
} | |
else | |
x = m->ww; | |
if((w = x - xx) > bh) { | |
x = xx; | |
if(m->sel) { | |
- 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); | |
+ drw_setscheme(drw, &scheme[m == selmon ? 1 : 0]); | |
+ drw_text(drw, x, 0, w, bh, m->sel->name, 1); | |
+ drw_rect(drw, x, 0, w, bh, m->sel->isfixed, m->sel->isfloating); | |
} | |
else { | |
- drw_setscheme(drw, &scheme[SchemeNorm]); | |
+ drw_setscheme(drw, &scheme[0]); | |
drw_text(drw, x, 0, w, bh, NULL, 0); | |
} | |
} | |
@@ -791,7 +804,7 @@ focus(Client *c) { | |
detachstack(c); | |
attachstack(c); | |
grabbuttons(c, True); | |
- XSetWindowBorder(dpy, c->win, scheme[SchemeSel].border->pix); | |
+ XSetWindowBorder(dpy, c->win, scheme[1].border->pix); | |
setfocus(c); | |
} | |
else { | |
@@ -1039,7 +1052,7 @@ manage(Window w, XWindowAttributes *wa) | |
wc.border_width = c->bw; | |
XConfigureWindow(dpy, w, CWBorderWidth, &wc); | |
- XSetWindowBorder(dpy, w, scheme[SchemeNorm].border->pix); | |
+ XSetWindowBorder(dpy, w, scheme[0].border->pix); | |
configure(c); /* propagates border_width, if size doesn't change */ | |
updatewindowtype(c); | |
updatesizehints(c); | |
@@ -1531,12 +1544,12 @@ setup(void) { | |
cursor[CurResize] = drw_cur_create(drw, XC_sizing); | |
cursor[CurMove] = drw_cur_create(drw, XC_fleur); | |
/* init appearance */ | |
- 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); | |
+ for(int i = 0; i < NUMCOLORS; i++){ | |
+ scheme[i].border = drw_clr_create(drw, colors[i][0]); | |
+ scheme[i].fg = drw_clr_create(drw, colors[i][1]); | |
+ scheme[i].bg = drw_clr_create(drw, colors[i][2]); | |
+ } | |
+ | |
/* init bars */ | |
updatebars(); | |
updatestatus(); | |
@@ -1685,7 +1698,7 @@ unfocus(Client *c, Bool setfocus) { | |
if(!c) | |
return; | |
grabbuttons(c, False); | |
- XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border->pix); | |
+ XSetWindowBorder(dpy, c->win, scheme[0].border->pix); | |
if(setfocus) { | |
XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | |
XDeleteProperty(dpy, root, netatom[NetActiveWindow]); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment