X-Git-Url: https://git.xinqibao.xyz/dmenu.git/blobdiff_plain/855a56631916bdff1438e11c232b88450f973648..7f36736d11418b0b11d02da8aa0cb663406706c2:/dmenu.c?ds=inline diff --git a/dmenu.c b/dmenu.c index 6fc414c..9386e06 100644 --- a/dmenu.c +++ b/dmenu.c @@ -24,6 +24,7 @@ static void calcoffsetsv(void); static char *cistrstr(const char *s, const char *sub); static void cleanup(void); static void dinput(void); +static void drawitem(const char *s, unsigned long col[ColLast]); static void drawmenuh(void); static void drawmenuv(void); static void match(void); @@ -133,12 +134,13 @@ drawbar(void) { dc.y = 0; dc.w = mw; dc.h = mh; - drawtext(&dc, NULL, normcol); + drawbox(&dc, normcol); dc.h = dc.font.height + 2; dc.y = topbar ? 0 : mh - dc.h; /* print prompt? */ if(prompt) { dc.w = promptw; + drawbox(&dc, selcol); drawtext(&dc, prompt, selcol); dc.x += dc.w; } @@ -154,6 +156,17 @@ drawbar(void) { commitdraw(&dc, win); } +void +drawitem(const char *s, unsigned long col[ColLast]) { + const char *p; + unsigned int w = textnw(&dc, text, strlen(text)); + + drawbox(&dc, col); + drawtext(&dc, s, col); + for(p = fstrstr(s, text); *text && (p = fstrstr(p, text)); p++) + drawline(&dc, textnw(&dc, s, p-s) + dc.h/2 - 1, dc.h-2, w, 1, col); +} + void drawmenuh(void) { Item *i; @@ -164,7 +177,7 @@ drawmenuh(void) { dc.x += dc.w; for(i = curr; i != next; i = i->right) { dc.w = MIN(textw(&dc, i->text), mw / 3); - drawtext(&dc, i->text, (sel == i) ? selcol : normcol); + drawitem(i->text, (sel == i) ? selcol : normcol); dc.x += dc.w; } dc.w = textw(&dc, ">"); @@ -180,7 +193,7 @@ drawmenuv(void) { dc.y = topbar ? dc.h : 0; dc.w = mw - dc.x; for(i = curr; i != next; i = i->right) { - drawtext(&dc, i->text, (sel == i) ? selcol : normcol); + drawitem(i->text, (sel == i) ? selcol : normcol); dc.y += dc.h; } if(!XGetWindowAttributes(dpy, win, &wa))