X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=draw.c;h=614d6d18c46d7622396331c0e172eea5b11f93ae;hb=2e0c767d74da024c3cd4dbd524e1364039704451;hp=cbf65020f1a90956b449d421b7d0ec38f5447e08;hpb=7e597ae204ce94398f8c722e335f20d5a4a30c8a;p=dwm.git diff --git a/draw.c b/draw.c index cbf6502..614d6d1 100644 --- a/draw.c +++ b/draw.c @@ -22,9 +22,16 @@ textnw(const char *text, unsigned int len) } static void -drawborder() +drawtext(const char *text, unsigned int colidx, Bool highlight) { + int x, y, w, h; + static char buf[256]; + unsigned int len, olen; XPoint points[5]; + XRectangle r = { dc.x, dc.y, dc.w, dc.h }; + + XSetForeground(dpy, dc.gc, dc.bg[colidx]); + XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); points[0].x = dc.x; points[0].y = dc.y; points[1].x = dc.w - 1; @@ -35,24 +42,8 @@ drawborder() points[3].y = 0; points[4].x = 0; points[4].y = -(dc.h - 1); + XSetForeground(dpy, dc.gc, dc.fg[colidx]); XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); -} - -static void -drawtext(const char *text, Bool invert, Bool highlight) -{ - int x, y, w, h; - static char buf[256]; - unsigned int len, olen; - DC tmp; - XGCValues gcv; - XRectangle r = { dc.x, dc.y, dc.w, dc.h }; - - XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); - XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); - XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter); - XSetForeground(dpy, dc.gc, dc.border); - drawborder(); if(!text) return; @@ -82,25 +73,24 @@ drawtext(const char *text, Bool invert, Bool highlight) if(w > dc.w) return; /* too long */ - 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); + if(dc.font.set) XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len); - } else { - gcv.font = dc.font.xfont->fid; - XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv); + XSetFont(dpy, dc.gc, dc.font.xfont->fid); XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); } if(highlight) { - tmp = dc; - dc.x += 2; - dc.y += 2; - dc.w -= 4; - dc.h -= 4; - drawborder(); - dc = tmp; + points[0].x = dc.x + 1; + points[0].y = dc.y + 1; + points[1].x = dc.w - 3; + points[1].y = 0; + points[2].x = 0; + points[2].y = dc.h - 3; + points[3].x = -(dc.w - 3); + points[3].y = 0; + points[4].x = 0; + points[4].y = -(dc.h - 3); + XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); } } @@ -161,11 +151,11 @@ drawtitle(Client *c) if(c == sel && issel) { drawstatus(); XUnmapWindow(dpy, c->twin); - XSetWindowBorder(dpy, c->win, dc.fg); + XSetWindowBorder(dpy, c->win, dc.fg[1]); return; } - XSetWindowBorder(dpy, c->win, dc.bg); + XSetWindowBorder(dpy, c->win, dc.bg[0]); XMapWindow(dpy, c->twin); dc.x = dc.y = 0; dc.w = c->tw;