moved draw.c to libdraw.a
[dmenu.git] / draw / drawtext.c
1 /* See LICENSE file for copyright and license details. */
2 #include <string.h>
3 #include <X11/Xlib.h>
4 #include "draw.h"
5
6 #define MIN(a, b)               ((a) < (b) ? (a) : (b))
7
8 void
9 drawtext(DC *dc, const char *text, unsigned long col[ColLast]) {
10         char buf[256];
11         int i, x, y, h, len, olen;
12         XRectangle r = { dc->x, dc->y, dc->w, dc->h };
13
14         XSetForeground(dc->dpy, dc->gc, col[ColBG]);
15         XFillRectangles(dc->dpy, dc->drawable, dc->gc, &r, 1);
16         if(!text)
17                 return;
18         olen = strlen(text);
19         h = dc->font.height;
20         y = dc->y + ((h+2) / 2) - (h / 2) + dc->font.ascent;
21         x = dc->x + (h / 2);
22         /* shorten text if necessary */
23         for(len = MIN(olen, sizeof buf); len && textnw(dc, text, len) > dc->w - h; len--);
24         if(!len)
25                 return;
26         memcpy(buf, text, len);
27         if(len < olen)
28                 for(i = len; i && i > len - 3; buf[--i] = '.');
29         XSetForeground(dc->dpy, dc->gc, col[ColFG]);
30         if(dc->font.set)
31                 XmbDrawString(dc->dpy, dc->drawable, dc->font.set, dc->gc, x, y, buf, len);
32         else
33                 XDrawString(dc->dpy, dc->drawable, dc->gc, x, y, buf, len);
34 }