-/* static */
-
-static void
-drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]) {
- int x;
- XGCValues gcv;
- XRectangle r = { dc.x, dc.y, dc.w, dc.h };
-
- gcv.foreground = col[ColFG];
- XChangeGC(dpy, dc.gc, GCForeground, &gcv);
- x = (dc.font.ascent + dc.font.descent + 2) / 4;
- r.x = dc.x + 1;
- r.y = dc.y + 1;
- if(filled) {
- r.width = r.height = x + 1;
- XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
+#include "draw.h"
+#include "util.h"
+
+Draw *
+draw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h) {
+ Draw *draw = (Draw *)calloc(1, sizeof(Draw));
+ draw->dpy = dpy;
+ draw->screen = screen;
+ draw->win = win;
+ draw->w = w;
+ draw->h = h;
+ draw->drawable = XCreatePixmap(dpy, win, w, h, DefaultDepth(dpy, screen));
+ draw->gc = XCreateGC(dpy, win, 0, NULL);
+ XSetLineAttributes(dpy, draw->gc, 1, LineSolid, CapButt, JoinMiter);
+ return draw;
+}
+
+void
+draw_resize(Draw *draw, unsigned int w, unsigned int h) {
+ if(!draw)
+ return;
+ 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));
+}
+
+void
+draw_free(Draw *draw) {
+ XFreePixmap(draw->dpy, draw->drawable);
+ XFreeGC(draw->dpy, draw->gc);
+ free(draw);
+}
+
+Fnt *
+draw_font_create(Draw *draw, const char *fontname) {
+ Fnt *font;
+ char *def, **missing;
+ int n;
+
+ if(!draw)
+ return NULL;
+ font = (Fnt *)calloc(1, sizeof(Fnt));
+ font->set = XCreateFontSet(draw->dpy, fontname, &missing, &n, &def);
+ if(missing) {
+ while(n--)
+ fprintf(stderr, "draw: missing fontset: %s\n", missing[n]);
+ XFreeStringList(missing);