dwm.c
changeset 1182 9940d125b703
parent 1179 6fad217390c6
child 1183 b20561489ffb
equal deleted inserted replaced
1181:65db532ac394 1182:9940d125b703
   208 int xerrordummy(Display *dpy, XErrorEvent *ee);
   208 int xerrordummy(Display *dpy, XErrorEvent *ee);
   209 int xerrorstart(Display *dpy, XErrorEvent *ee);
   209 int xerrorstart(Display *dpy, XErrorEvent *ee);
   210 void zoom(const char *arg);
   210 void zoom(const char *arg);
   211 
   211 
   212 /* variables */
   212 /* variables */
   213 char stext[256], buf[256];
   213 char stext[256];
   214 int screen, sx, sy, sw, sh;
   214 int screen, sx, sy, sw, sh;
   215 int (*xerrorxlib)(Display *, XErrorEvent *);
   215 int (*xerrorxlib)(Display *, XErrorEvent *);
   216 int bx, by, bw, bh, blw, bgw, mx, my, mw, mh, mox, moy, mow, moh, tx, ty, tw, th, wx, wy, ww, wh;
   216 int bx, by, bw, bh, blw, bgw, mx, my, mw, mh, mox, moy, mow, moh, tx, ty, tw, th, wx, wy, ww, wh;
   217 int viewtags_set = 0;
   217 int viewtags_set = 0;
   218 double mfact;
   218 double mfact;
   595 void
   595 void
   596 drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
   596 drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
   597 	int x, y, w, h;
   597 	int x, y, w, h;
   598 	unsigned int len, olen;
   598 	unsigned int len, olen;
   599 	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
   599 	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
       
   600 	char buf[256];
   600 
   601 
   601 	XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]);
   602 	XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]);
   602 	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
   603 	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
   603 	if(!text)
   604 	if(!text)
   604 		return;
   605 		return;
       
   606 	olen = strlen(text);
       
   607 	len = MIN(olen, sizeof buf);
       
   608 	memcpy(buf, text, len);
   605 	w = 0;
   609 	w = 0;
   606 	olen = strlen(text);
       
   607 	len = MIN(olen, sizeof buf - 1);
       
   608 	memcpy(buf, text, len);
       
   609 	buf[len] = 0;
       
   610 	h = dc.font.ascent + dc.font.descent;
   610 	h = dc.font.ascent + dc.font.descent;
   611 	y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
   611 	y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
   612 	x = dc.x + (h / 2);
   612 	x = dc.x + (h / 2);
   613 	/* shorten text if necessary */
   613 	/* shorten text if necessary */
   614 	while(len && (w = textnw(buf, len)) > dc.w - h)
   614 	for(; len && (w = textnw(buf, len)) > dc.w - h; len--);
   615 		buf[--len] = 0;
   615 	if (!len)
       
   616 		return;
   616 	if(len < olen) {
   617 	if(len < olen) {
   617 		if(len > 1)
   618 		if(len > 1)
   618 			buf[len - 1] = '.';
   619 			buf[len - 1] = '.';
   619 		if(len > 2)
   620 		if(len > 2)
   620 			buf[len - 2] = '.';
   621 			buf[len - 2] = '.';
   621 		if(len > 3)
   622 		if(len > 3)
   622 			buf[len - 3] = '.';
   623 			buf[len - 3] = '.';
   623 	}
   624 	}
   624 	if(w > dc.w)
       
   625 		return; /* too long */
       
   626 	XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
   625 	XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
   627 	if(dc.font.set)
   626 	if(dc.font.set)
   628 		XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
   627 		XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
   629 	else
   628 	else
   630 		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
   629 		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);