diff options
| author | kyle.hu.gz <[email protected]> | 2010-05-21 17:42:10 +0000 |
|---|---|---|
| committer | kyle.hu.gz <[email protected]> | 2010-05-21 17:42:10 +0000 |
| commit | 0b02a2ebcae2f00bcfa0330a6d32859137ef7d85 (patch) | |
| tree | ebc207328f16eb986b6037670a6c03de7017b132 | |
| parent | 0ce26895a515dbee47f8ceb272f56dbe89f684e8 (diff) | |
Add ASCII large font support.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@723 bbd45198-f89e-11dd-88c7-29a3b14d5316
| -rw-r--r-- | components/rtgui/common/font.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/components/rtgui/common/font.c b/components/rtgui/common/font.c index 9e9f63c7e4..07c7030831 100644 --- a/components/rtgui/common/font.c +++ b/components/rtgui/common/font.c @@ -171,27 +171,31 @@ void rtgui_bitmap_font_draw_char(struct rtgui_font_bitmap* font, struct rtgui_dc rtgui_rect_t* rect) { const rt_uint8_t* font_ptr; - rt_uint16_t x, y, w, h; - register rt_base_t i, j; + rt_uint16_t x, y, h; + register rt_base_t i, j, k, word_bytes; + + /* check first and last char */ + if (ch < font->first_char || ch > font->last_char) return; x = rect->x1; y = rect->y1; + word_bytes = (((font->width - 1) / 8) + 1); - /* check first and last char */ - if (ch < font->first_char || ch > font->last_char) return; - font_ptr = font->bmp + (ch - font->first_char) * font->height; + font_ptr = font->bmp + (ch - font->first_char) * word_bytes * font->height; - w = (font->width + x > rect->x2)? rect->x2 - rect->x1 : font->width; - h = (font->height + y > rect->y2)? rect->y2 - rect->y1 : font->height; + h = (font->height + y > rect->y2) ? rect->y2 - rect->y1 : font->height; - for (i = 0; i < h; i ++ ) + for (i = 0; i < h; i++) { - for (j = 0; j < w; j ++) + for (j = 0; j < word_bytes; j++) { - if ( ((font_ptr[i] >> (7-j)) & 0x01) != 0) + for (k = 0; k < 8; k++) { - /* draw a pixel */ - rtgui_dc_draw_point(dc, j + x, i + y); + if (((font_ptr[i * word_bytes + j] >> (7 - k)) & 0x01) != 0) + { + /* draw a pixel */ + rtgui_dc_draw_point(dc, k + 8 * j + x, i + y); + } } } } |
