aboutsummaryrefslogtreecommitdiff
path: root/draw/drawtext.c
diff options
context:
space:
mode:
Diffstat (limited to 'draw/drawtext.c')
-rw-r--r--draw/drawtext.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/draw/drawtext.c b/draw/drawtext.c
new file mode 100644
index 0000000..cf7b015
--- /dev/null
+++ b/draw/drawtext.c
@@ -0,0 +1,34 @@
+/* See LICENSE file for copyright and license details. */
+#include <string.h>
+#include <X11/Xlib.h>
+#include "draw.h"
+
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+
+void
+drawtext(DC *dc, const char *text, unsigned long col[ColLast]) {
+ char buf[256];
+ int i, x, y, h, len, olen;
+ XRectangle r = { dc->x, dc->y, dc->w, dc->h };
+
+ XSetForeground(dc->dpy, dc->gc, col[ColBG]);
+ XFillRectangles(dc->dpy, dc->drawable, dc->gc, &r, 1);
+ if(!text)
+ return;
+ olen = strlen(text);
+ h = dc->font.height;
+ y = dc->y + ((h+2) / 2) - (h / 2) + dc->font.ascent;
+ x = dc->x + (h / 2);
+ /* shorten text if necessary */
+ for(len = MIN(olen, sizeof buf); len && textnw(dc, text, len) > dc->w - h; len--);
+ if(!len)
+ return;
+ memcpy(buf, text, len);
+ if(len < olen)
+ for(i = len; i && i > len - 3; buf[--i] = '.');
+ XSetForeground(dc->dpy, dc->gc, col[ColFG]);
+ if(dc->font.set)
+ XmbDrawString(dc->dpy, dc->drawable, dc->font.set, dc->gc, x, y, buf, len);
+ else
+ XDrawString(dc->dpy, dc->drawable, dc->gc, x, y, buf, len);
+}