-extern void draw(Display *dpy, Brush *b, Bool border, const char *text);
-extern void loadcolors(Display *dpy, int screen, Brush *b,
- const char *bg, const char *fg, const char *bo);
-extern void loadfont(Display *dpy, Fnt *font, const char *fontstr);
-extern unsigned int textwidth_l(Fnt *font, char *text, unsigned int len);
-extern unsigned int textwidth(Fnt *font, char *text);
-extern unsigned int labelheight(Fnt *font);
+typedef struct {
+ unsigned int w;
+ unsigned int h;
+ int x;
+ int y;
+ int xOff;
+ int yOff;
+} TextExtents;
+
+/* Drawable abstraction */
+Draw *draw_create(Display *dpy, Window win, unsigned int w, unsigned int h);
+void draw_resize(Draw *draw, unsigned int w, unsigned int h);
+void draw_free(Draw *draw);
+
+/* Drawing context abstraction */
+DDC *dc_create(Draw *draw);
+void dc_free(DDC *dc);
+
+/* Fnt abstraction */
+Fnt *font_create(const char *fontname);
+void font_free(Fnt *font);
+
+/* Colour abstraction */
+Col *col_create(const char *colname);
+void col_free(Col *col);
+
+/* Drawing context manipulation */
+void dc_setfont(DDC *dc, Fnt *font);
+void dc_setfg(DDC *dc, Col *col);
+void dc_setbg(DDC *dc, Col *col);
+void dc_setfill(DDC *dc, Bool fill);
+
+/* Drawing functions */
+void dc_drawrect(DDC *dc, int x, int y, unsigned int w, unsigned int h);
+void dc_drawtext(DDC *dc, int x, int y, const char *text);
+
+/* Map functions */
+void dc_map(DDC *dc, int x, int y, unsigned int w, unsigned int h);
+
+/* Text functions */
+void dc_getextents(DDC *dc, const char *text, TextExtents *extents);
+