diff options
Diffstat (limited to 'src/font.c')
-rw-r--r-- | src/font.c | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -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; + } + } + } +} |