changeset 1182 | 9940d125b703 |
parent 1179 | 6fad217390c6 |
child 1183 | b20561489ffb |
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); |