applied dfenze drawtext simplifications 858251de
Anselm R Garbe · 2008-04-27 18:00 1 file(s) · +7 −8
dwm.c +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);