-
- w = 0;
- olen = len = strlen(text);
- if(len >= sizeof(buf))
- len = sizeof(buf) - 1;
- memcpy(buf, text, len);
- buf[len] = 0;
-
- h = dc.font.ascent + dc.font.descent;
- y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
- x = dc.x + (h / 2);
-
- /* shorten text if necessary */
- while(len && (w = textnw(buf, len)) > dc.w - h)
- buf[--len] = 0;
- if(len < olen) {
- if(len > 1)
- buf[len - 1] = '.';
- if(len > 2)
- buf[len - 2] = '.';
- if(len > 3)
- buf[len - 3] = '.';
- }
-
- if(w > dc.w)
- return; /* too long */
- if(dc.font.set)
- XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
- else {
- XSetFont(dpy, dc.gc, dc.font.xfont->fid);
- XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
- }
- if(highlight) {
- points[0].x = dc.x + 1;
- points[0].y = dc.y + 1;
- points[1].x = dc.w - 3;
- points[1].y = 0;
- points[2].x = 0;
- points[2].y = dc.h - 3;
- points[3].x = -(dc.w - 3);
- points[3].y = 0;
- points[4].x = 0;
- points[4].y = -(dc.h - 3);
- XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious);
- }
+ draw->w = w;
+ draw->h = h;
+ XFreePixmap(draw->dpy, draw->drawable);
+ draw->drawable = XCreatePixmap(draw->dpy, draw->win, w, h, DefaultDepth(draw->dpy, draw->screen));