- Pixmap canvas;
- struct {
- int ascent;
- int descent;
- int height;
- int width;
- XFontSet set;
- XFontStruct *xfont;
- } font;
-} DC; /* draw context */
-
-void drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsigned long color);
-void drawtext(DC *dc, const char *text, unsigned long col[ColLast]);
-void drawtextn(DC *dc, const char *text, size_t n, unsigned long col[ColLast]);
-void eprintf(const char *fmt, ...);
-void freedc(DC *dc);
-unsigned long getcolor(DC *dc, const char *colstr);
-DC *initdc(void);
-void initfont(DC *dc, const char *fontstr);
-void mapdc(DC *dc, Window win, unsigned int w, unsigned int h);
-void resizedc(DC *dc, unsigned int w, unsigned int h);
-int textnw(DC *dc, const char *text, size_t len);
-int textw(DC *dc, const char *text);
+ Col *fg;
+ Col *bg;
+ Fnt *font;
+};
+
+/* Drawable abstraction */
+Draw *draw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h);
+void draw_resize(Draw *draw, unsigned int w, unsigned int h);
+void draw_free(Draw *draw);
+
+/* Fnt abstraction */
+Fnt *draw_font_create(Draw *draw, const char *fontname);
+void draw_font_free(Draw *draw, Fnt *font);
+
+/* Colour abstraction */
+Col *draw_col_create(Draw *draw, const char *colname);
+void draw_col_free(Draw *draw, Col *col);
+
+/* Drawing context manipulation */
+void draw_setfont(Draw *draw, Fnt *font);
+void draw_setfg(Draw *draw, Col *col);
+void draw_setbg(Draw *draw, Col *col);
+
+/* Drawing functions */
+void draw_rect(Draw *draw, int x, int y, unsigned int w, unsigned int h);
+void draw_text(Draw *draw, int x, int y, const char *text);
+
+/* Map functions */
+void draw_map(Draw *draw, int x, int y, unsigned int w, unsigned int h);
+
+/* Text functions */
+void draw_getextents(Draw *draw, const char *text, TextExtents *extents);
+