applied dfenze drawtext simplifications
858251de
1 file(s) · +7 −8
| 210 | 210 | void zoom(const char *arg); |
|
| 211 | 211 | ||
| 212 | 212 | /* variables */ |
|
| 213 | - | char stext[256], buf[256]; |
|
| 213 | + | char stext[256]; |
|
| 214 | 214 | int screen, sx, sy, sw, sh; |
|
| 215 | 215 | int (*xerrorxlib)(Display *, XErrorEvent *); |
|
| 216 | 216 | int bx, by, bw, bh, blw, bgw, mx, my, mw, mh, mox, moy, mow, moh, tx, ty, tw, th, wx, wy, ww, wh; |
|
| 597 | 597 | int x, y, w, h; |
|
| 598 | 598 | unsigned int len, olen; |
|
| 599 | 599 | XRectangle r = { dc.x, dc.y, dc.w, dc.h }; |
|
| 600 | + | char buf[256]; |
|
| 600 | 601 | ||
| 601 | 602 | XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]); |
|
| 602 | 603 | XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); |
|
| 603 | 604 | if(!text) |
|
| 604 | 605 | return; |
|
| 605 | - | w = 0; |
|
| 606 | 606 | olen = strlen(text); |
|
| 607 | - | len = MIN(olen, sizeof buf - 1); |
|
| 607 | + | len = MIN(olen, sizeof buf); |
|
| 608 | 608 | memcpy(buf, text, len); |
|
| 609 | - | buf[len] = 0; |
|
| 609 | + | w = 0; |
|
| 610 | 610 | h = dc.font.ascent + dc.font.descent; |
|
| 611 | 611 | y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent; |
|
| 612 | 612 | x = dc.x + (h / 2); |
|
| 613 | 613 | /* shorten text if necessary */ |
|
| 614 | - | while(len && (w = textnw(buf, len)) > dc.w - h) |
|
| 615 | - | buf[--len] = 0; |
|
| 614 | + | for(; len && (w = textnw(buf, len)) > dc.w - h; len--); |
|
| 615 | + | if (!len) |
|
| 616 | + | return; |
|
| 616 | 617 | if(len < olen) { |
|
| 617 | 618 | if(len > 1) |
|
| 618 | 619 | buf[len - 1] = '.'; |
|
| 621 | 622 | if(len > 3) |
|
| 622 | 623 | buf[len - 3] = '.'; |
|
| 623 | 624 | } |
|
| 624 | - | if(w > dc.w) |
|
| 625 | - | return; /* too long */ |
|
| 626 | 625 | XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]); |
|
| 627 | 626 | if(dc.font.set) |
|
| 628 | 627 | XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len); |
|