Index: uspace/app/fontedit/fontedit.c
===================================================================
--- uspace/app/fontedit/fontedit.c	(revision 06b8383847ae4de1f2e464710f9877a9fbea7bc9)
+++ uspace/app/fontedit/fontedit.c	(revision 20d0098517d095c5d2dc40ac64c967b69372d0cf)
@@ -39,4 +39,5 @@
 #include <gfx/color.h>
 #include <gfx/font.h>
+#include <gfx/glyph.h>
 #include <gfx/render.h>
 #include <gfx/typeface.h>
@@ -49,4 +50,10 @@
 #include "fontedit.h"
 
+enum {
+	glyph_scale = 8
+};
+
+static errno_t font_edit_paint(font_edit_t *);
+
 /** Clear screen.
  *
@@ -86,4 +93,72 @@
 }
 
+/** Handle font editor position event.
+ *
+ * @param widget Canvas widget
+ * @param data Position event
+ */
+static void font_edit_pos_event(widget_t *widget, void *data)
+{
+	pos_event_t *event = (pos_event_t *) data;
+	font_edit_t *fedit;
+
+	fedit = (font_edit_t *) widget_get_data(widget);
+
+	if (event->type == POS_PRESS) {
+		gfx_glyph_bmp_setpix(fedit->gbmp, event->hpos / glyph_scale,
+		    event->vpos / glyph_scale, 1);
+		font_edit_paint(fedit);
+	}
+}
+
+/** Paint glyph bitmap.
+ *
+ * @param fedit Font editor
+ */
+static errno_t font_edit_paint_gbmp(font_edit_t *fedit)
+{
+	gfx_color_t *color = NULL;
+	gfx_rect_t rect;
+	errno_t rc;
+	int w, h;
+	int x, y;
+	int pix;
+
+	w = 50;
+	h = 50;
+
+	rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff, &color);
+	if (rc != EOK)
+		goto error;
+
+	rc = gfx_set_color(fedit->gc, color);
+	if (rc != EOK)
+		goto error;
+
+	for (y = 0; y < h; y++) {
+		for (x = 0; x < w; x++) {
+			pix = gfx_glyph_bmp_getpix(fedit->gbmp, x, y);
+
+			rect.p0.x = x * glyph_scale;
+			rect.p0.y = y * glyph_scale;
+			rect.p1.x = (x + 1) * glyph_scale;
+			rect.p1.y = (y + 1) * glyph_scale;
+
+			if (pix != 0) {
+				rc = gfx_fill_rect(fedit->gc, &rect);
+				if (rc != EOK)
+					goto error;
+			}
+		}
+	}
+
+	gfx_color_delete(color);
+	return EOK;
+error:
+	if (color != NULL)
+		gfx_color_delete(color);
+	return rc;
+}
+
 /** Paint font editor.
  *
@@ -99,4 +174,8 @@
 
 	rc = clear_scr(fedit->gc, w, h);
+	if (rc != EOK)
+		return rc;
+
+	rc = font_edit_paint_gbmp(fedit);
 	if (rc != EOK)
 		return rc;
@@ -123,4 +202,7 @@
 	gfx_font_props_t props;
 	gfx_font_metrics_t metrics;
+	gfx_glyph_metrics_t gmetrics;
+	gfx_glyph_t *glyph;
+	gfx_glyph_bmp_t *bmp;
 	gfx_coord_t vw, vh;
 	gfx_context_t *gc;
@@ -163,5 +245,5 @@
 	pixbuf = NULL;
 
-	canvas = create_canvas(window_root(window), NULL, vw, vh,
+	canvas = create_canvas(window_root(window), fedit, vw, vh,
 	    surface);
 	if (canvas == NULL) {
@@ -197,4 +279,21 @@
 		goto error;
 	}
+
+	gfx_glyph_metrics_init(&gmetrics);
+
+	rc = gfx_glyph_create(font, &gmetrics, &glyph);
+	if (rc != EOK) {
+		printf("Error creating glyph.\n");
+		goto error;
+	}
+
+	rc = gfx_glyph_bmp_open(glyph, &bmp);
+	if (rc != EOK) {
+		printf("Error opening glyph bitmap.\n");
+		goto error;
+	}
+
+	sig_connect(&canvas->position_event, &canvas->widget,
+	    font_edit_pos_event);
 
 	fedit->cgc = cgc;
@@ -203,4 +302,6 @@
 	fedit->height = vh;
 	fedit->typeface = tface;
+	fedit->glyph = glyph;
+	fedit->gbmp = bmp;
 
 	*rfedit = fedit;
@@ -212,4 +313,12 @@
 	 * handler (which we have no way of registering)
 	 */
+	if (bmp != NULL)
+		gfx_glyph_bmp_close(bmp);
+	if (glyph != NULL)
+		gfx_glyph_destroy(glyph);
+	if (font != NULL)
+		gfx_font_close(font);
+	if (tface != NULL)
+		gfx_typeface_destroy(tface);
 	if (surface != NULL)
 		surface_destroy(surface);
Index: uspace/app/fontedit/fontedit.h
===================================================================
--- uspace/app/fontedit/fontedit.h	(revision 06b8383847ae4de1f2e464710f9877a9fbea7bc9)
+++ uspace/app/fontedit/fontedit.h	(revision 20d0098517d095c5d2dc40ac64c967b69372d0cf)
@@ -37,4 +37,6 @@
 #define FONTEDIT_H
 
+#include <gfx/glyph.h>
+#include <gfx/glyph_bmp.h>
 #include <gfx/typeface.h>
 #include <guigfx/canvas.h>
@@ -52,4 +54,8 @@
 	/** Typeface */
 	gfx_typeface_t *typeface;
+	/** Glyph */
+	gfx_glyph_t *glyph;
+	/** Glyph bitmap */
+	gfx_glyph_bmp_t *gbmp;
 } font_edit_t;
 
Index: uspace/lib/gfxfont/src/font.c
===================================================================
--- uspace/lib/gfxfont/src/font.c	(revision 06b8383847ae4de1f2e464710f9877a9fbea7bc9)
+++ uspace/lib/gfxfont/src/font.c	(revision 20d0098517d095c5d2dc40ac64c967b69372d0cf)
@@ -113,5 +113,11 @@
 	finfo->props = *props;
 	finfo->font = font;
+
 	font->typeface = tface;
+
+	font->rect.p0.x = 0;
+	font->rect.p0.y = 0;
+	font->rect.p1.x = 1;
+	font->rect.p1.y = 1;
 
 	rc = gfx_font_set_metrics(font, metrics);
