summaryrefslogtreecommitdiffstats
path: root/src/font.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/font.c')
-rw-r--r--src/font.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/font.c b/src/font.c
index c198943..c2300b5 100644
--- a/src/font.c
+++ b/src/font.c
@@ -27,6 +27,10 @@
#include <linux/font.h>
+#define FONT_H(f) ((size_t) (f)->desc.height)
+#define FONT_W(f) ((size_t) (f)->desc.width)
+#define CHAR_PIXEL(f, c, x, y) (((((c) * FONT_H(f)) + (y)) * FONT_W(f)) + (x))
+
struct font {
const struct font_desc desc;
};
@@ -66,3 +70,27 @@ font_get_height(struct font *font)
{
return font->desc.height;
}
+
+void
+font_render(struct font *font, png_const_colorp fg, png_const_colorp bg,
+ char ch, png_bytepp rows, int row, int col)
+{
+ size_t y;
+ size_t r;
+ size_t x;
+ size_t c;
+
+ for (y = 0, r = row * FONT_H(font); y < FONT_H(font); ++y, ++r) {
+ for (x = 0, c = col * FONT_W(font); x < FONT_W(font); ++x, ++c){
+ if (CHAR_PIXEL(font, ch, x, y)) {
+ *(&rows[r][c] + 0) = fg->red;
+ *(&rows[r][c] + 1) = fg->green;
+ *(&rows[r][c] + 2) = fg->blue;
+ } else {
+ *(&rows[r][c] + 0) = bg->red;
+ *(&rows[r][c] + 1) = bg->green;
+ *(&rows[r][c] + 2) = bg->blue;
+ }
+ }
+ }
+}