X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=draw.c;h=95ff072a9a0cee5329ba8066d05a11a6cd60a69e;hb=1654d6cd6269bc784ee99045edd89e4bda24149f;hp=85c1279a3b40dd73e501914119216bdaa198154c;hpb=a0a99d10e1a019f74a8b2af4d5f8b47348e08a75;p=dmenu.git diff --git a/draw.c b/draw.c index 85c1279..95ff072 100644 --- a/draw.c +++ b/draw.c @@ -7,11 +7,9 @@ #include #include "draw.h" -#define MAX(a, b) ((a) > (b) ? (a) : (b)) -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#define FG(dc, col) ((col)[(dc)->invert ? ColBG : ColFG]) -#define BG(dc, col) ((col)[(dc)->invert ? ColFG : ColBG]) -#define DEFFONT "fixed" +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define DEFFONT "fixed" static Bool loadfont(DC *dc, const char *fontstr); @@ -27,15 +25,13 @@ drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsign (fill ? XFillRectangles : XDrawRectangles)(dc->dpy, dc->canvas, dc->gc, &r, 1); } - void drawtext(DC *dc, const char *text, unsigned long col[ColLast]) { - char buf[256]; - size_t n, mn; + char buf[BUFSIZ]; + size_t mn, n = strlen(text); /* shorten text if necessary */ - n = strlen(text); - for(mn = MIN(n, sizeof buf); textnw(dc, text, mn) > dc->w - dc->font.height/2; mn--) + for(mn = MIN(n, sizeof buf); textnw(dc, text, mn) + dc->font.height/2 > dc->w; mn--) if(mn == 0) return; memcpy(buf, text, mn); @@ -48,10 +44,8 @@ drawtext(DC *dc, const char *text, unsigned long col[ColLast]) { void drawtextn(DC *dc, const char *text, size_t n, unsigned long col[ColLast]) { - int x, y; - - x = dc->x + dc->font.height/2; - y = dc->y + dc->font.ascent+1; + int x = dc->x + dc->font.height/2; + int y = dc->y + dc->font.ascent+1; XSetForeground(dc->dpy, dc->gc, FG(dc, col)); if(dc->font.set) @@ -66,10 +60,14 @@ void eprintf(const char *fmt, ...) { va_list ap; - fprintf(stderr, "%s: ", progname); va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); + + if(fmt[strlen(fmt)-1] == ':') { + fputc(' ', stderr); + perror(NULL); + } exit(EXIT_FAILURE); } @@ -101,17 +99,14 @@ initdc(void) { DC *dc; if(!setlocale(LC_CTYPE, "") || !XSupportsLocale()) - weprintf("no locale support\n"); - if(!(dc = malloc(sizeof *dc))) - eprintf("cannot malloc %u bytes\n", sizeof *dc); + fprintf(stderr, "no locale support\n"); + if(!(dc = calloc(1, sizeof *dc))) + eprintf("cannot malloc %u bytes:", sizeof *dc); if(!(dc->dpy = XOpenDisplay(NULL))) eprintf("cannot open display\n"); dc->gc = XCreateGC(dc->dpy, DefaultRootWindow(dc->dpy), 0, NULL); XSetLineAttributes(dc->dpy, dc->gc, 1, LineSolid, CapButt, JoinMiter); - dc->font.xfont = NULL; - dc->font.set = NULL; - dc->canvas = None; return dc; } @@ -119,7 +114,7 @@ void initfont(DC *dc, const char *fontstr) { if(!loadfont(dc, fontstr ? fontstr : DEFFONT)) { if(fontstr != NULL) - weprintf("cannot load font '%s'\n", fontstr); + fprintf(stderr, "cannot load font '%s'\n", fontstr); if(fontstr == NULL || !loadfont(dc, DEFFONT)) eprintf("cannot load font '%s'\n", DEFFONT); } @@ -161,12 +156,11 @@ void resizedc(DC *dc, unsigned int w, unsigned int h) { if(dc->canvas) XFreePixmap(dc->dpy, dc->canvas); + dc->canvas = XCreatePixmap(dc->dpy, DefaultRootWindow(dc->dpy), w, h, DefaultDepth(dc->dpy, DefaultScreen(dc->dpy))); - dc->x = dc->y = 0; dc->w = w; dc->h = h; - dc->invert = False; } int @@ -184,13 +178,3 @@ int textw(DC *dc, const char *text) { return textnw(dc, text, strlen(text)) + dc->font.height; } - -void -weprintf(const char *fmt, ...) { - va_list ap; - - fprintf(stderr, "%s: warning: ", progname); - va_start(ap, fmt); - vfprintf(stderr, fmt, ap); - va_end(ap); -}