X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=main.c;h=cd0e2b5df0472c654b2282b16d2a75a3cf08f4b4;hb=007be12f2bf7648f79138e834477e77f612766bb;hp=54a3a12ca91adff4f06e8d633478283a0e314cec;hpb=66b2e8379f0b851d0535a50321e22b58fdaa247d;p=dmenu.git diff --git a/main.c b/main.c index 54a3a12..cd0e2b5 100644 --- a/main.c +++ b/main.c @@ -3,7 +3,6 @@ * See LICENSE file for license details. */ #include "dmenu.h" - #include #include #include @@ -42,22 +41,6 @@ static Item *curr = NULL; static Window root; static Window win; -static unsigned int -textnw(const char *text, unsigned int len) { - XRectangle r; - - if(dc.font.set) { - XmbTextExtents(dc.font.set, text, len, NULL, &r); - return r.width; - } - return XTextWidth(dc.font.xfont, text, len); -} - -static unsigned int -textw(const char *text) { - return textnw(text, strlen(text)) + dc.font.height; -} - static void calcoffsets(void) { unsigned int tw, w; @@ -84,53 +67,6 @@ calcoffsets(void) { } } -static void -drawtext(const char *text, unsigned long col[ColLast]) { - int x, y, w, h; - static char buf[256]; - unsigned int len, olen; - XGCValues gcv; - XRectangle r = { dc.x, dc.y, dc.w, dc.h }; - - XSetForeground(dpy, dc.gc, col[ColBG]); - XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); - if(!text) - return; - w = 0; - olen = len = strlen(text); - if(len >= sizeof buf) - len = sizeof buf - 1; - memcpy(buf, text, len); - buf[len] = 0; - h = dc.font.ascent + dc.font.descent; - y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent; - x = dc.x + (h / 2); - /* shorten text if necessary */ - while(len && (w = textnw(buf, len)) > dc.w - h) - buf[--len] = 0; - if(len < olen) { - if(len > 1) - buf[len - 1] = '.'; - if(len > 2) - buf[len - 2] = '.'; - if(len > 3) - buf[len - 3] = '.'; - } - if(w > dc.w) - return; /* too long */ - gcv.foreground = col[ColFG]; - if(dc.font.set) { - XChangeGC(dpy, dc.gc, GCForeground, &gcv); - 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 | GCFont, &gcv); - XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); - } -} - static void drawmenu(void) { Item *i; @@ -173,7 +109,7 @@ drawmenu(void) { } static unsigned long -getcolor(const char *colstr) { +initcolor(const char *colstr) { Colormap cmap = DefaultColormap(dpy, screen); XColor color; @@ -183,7 +119,7 @@ getcolor(const char *colstr) { } static void -setfont(const char *fontstr) { +initfont(const char *fontstr) { char *def, **missing; int i, n; @@ -482,7 +418,9 @@ main(int argc, char *argv[]) { XModifierKeymap *modmap; XSetWindowAttributes wa; - if(isatty(STDIN_FILENO)) { + if(argc == 2 && !strncmp("-v", argv[1], 3)) + eprint("dmenu-"VERSION", (C)opyright MMVI-MMVII Anselm R. Garbe\n"); + else if(isatty(STDIN_FILENO)) { fputs("error: dmenu can't run in an interactive shell\n", stdout); usage(); } @@ -509,8 +447,6 @@ main(int argc, char *argv[]) { else if(!strncmp(argv[i], "-sf", 4)) { if(++i < argc) selfg = argv[i]; } - else if(!strncmp(argv[i], "-v", 3)) - eprint("dmenu-"VERSION", (C)opyright MMVI-MMVII Anselm R. Garbe\n"); else usage(); setlocale(LC_CTYPE, ""); @@ -534,11 +470,11 @@ main(int argc, char *argv[]) { } XFreeModifiermap(modmap); /* style */ - dc.norm[ColBG] = getcolor(normbg); - dc.norm[ColFG] = getcolor(normfg); - dc.sel[ColBG] = getcolor(selbg); - dc.sel[ColFG] = getcolor(selfg); - setfont(font); + dc.norm[ColBG] = initcolor(normbg); + dc.norm[ColFG] = initcolor(normfg); + dc.sel[ColBG] = initcolor(selbg); + dc.sel[ColFG] = initcolor(selfg); + initfont(font); /* menu window */ wa.override_redirect = 1; wa.background_pixmap = ParentRelative;