X-Git-Url: https://jasonwoof.com/gitweb/?p=dwm.git;a=blobdiff_plain;f=draw.c;h=4c47c1a8c4c0501b9b542f633301c3715d06de94;hp=fc269a2a431dc2ca5f4a8a38ff5dd0559c999cd2;hb=dba23062bad40afb1a90f60b6897cf9e1ca5035b;hpb=9e8b3258a06de01c53e60243ffe3419b47d016dd diff --git a/draw.c b/draw.c index fc269a2..4c47c1a 100644 --- a/draw.c +++ b/draw.c @@ -10,6 +10,82 @@ #include "dwm.h" +void +drawall() +{ + Client *c; + + for(c = clients; c; c = getnext(c->next)) + drawtitle(c); + drawstatus(); +} + +void +drawstatus() +{ + int i; + Bool istile = arrange == dotile; + + dc.x = dc.y = 0; + dc.w = bw; + drawtext(NULL, !istile, False); + + dc.w = 0; + for(i = 0; i < TLast; i++) { + dc.x += dc.w; + dc.w = textw(tags[i]); + if(istile) + drawtext(tags[i], (i == tsel), True); + else + drawtext(tags[i], (i != tsel), True); + } + if(sel) { + dc.x += dc.w; + dc.w = textw(sel->name); + drawtext(sel->name, istile, True); + } + dc.w = textw(stext); + dc.x = bx + bw - dc.w; + drawtext(stext, !istile, False); + + XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); + XFlush(dpy); +} + +void +drawtitle(Client *c) +{ + int i; + Bool istile = arrange == dotile; + + if(c == sel) { + drawstatus(); + XUnmapWindow(dpy, c->title); + XSetWindowBorder(dpy, c->win, dc.fg); + return; + } + + XSetWindowBorder(dpy, c->win, dc.bg); + XMapWindow(dpy, c->title); + + dc.x = dc.y = 0; + + dc.w = 0; + for(i = 0; i < TLast; i++) { + if(c->tags[i]) { + dc.x += dc.w; + dc.w = textw(c->tags[i]); + drawtext(c->tags[i], !istile, True); + } + } + dc.x += dc.w; + dc.w = textw(c->name); + drawtext(c->name, !istile, True); + XCopyArea(dpy, dc.drawable, c->title, dc.gc, + 0, 0, c->tw, c->th, 0, 0); + XFlush(dpy); +} + static void drawborder(void) { @@ -30,7 +106,7 @@ drawborder(void) } void -draw(Bool border, const char *text) +drawtext(const char *text, Bool invert, Bool border) { int x, y, w, h; unsigned int len; @@ -38,7 +114,7 @@ draw(Bool border, const char *text) XGCValues gcv; XRectangle r = { dc.x, dc.y, dc.w, dc.h }; - XSetForeground(dpy, dc.gc, dc.bg); + XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); w = 0; @@ -65,8 +141,8 @@ draw(Bool border, const char *text) if(w > dc.w) return; /* too long */ - gcv.foreground = dc.fg; - gcv.background = dc.bg; + gcv.foreground = invert ? dc.bg : dc.fg; + gcv.background = invert ? dc.fg : dc.bg; if(dc.font.set) { XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv); XmbDrawImageString(dpy, dc.drawable, dc.font.set, dc.gc, @@ -80,7 +156,7 @@ draw(Bool border, const char *text) } unsigned long -initcolor(const char *colstr) +getcolor(const char *colstr) { XColor color; Colormap cmap = DefaultColormap(dpy, screen); @@ -103,11 +179,11 @@ textnw(char *text, unsigned int len) unsigned int textw(char *text) { - return textnw(text, strlen(text)); + return textnw(text, strlen(text)) + dc.font.height; } void -initfont(const char *fontstr) +setfont(const char *fontstr) { char **missing, *def; int i, n; @@ -150,7 +226,7 @@ initfont(const char *fontstr) if (!dc.font.xfont) dc.font.xfont = XLoadQueryFont(dpy, "fixed"); if (!dc.font.xfont) - error("error, cannot init 'fixed' font\n"); + eprint("error, cannot init 'fixed' font\n"); dc.font.ascent = dc.font.xfont->ascent; dc.font.descent = dc.font.xfont->descent; }