diff options
| author | Jakob Fries <jakob.fries@gmail.com> | 2007-12-24 13:09:34 +0000 |
|---|---|---|
| committer | Jakob Fries <jakob.fries@gmail.com> | 2007-12-24 13:09:34 +0000 |
| commit | a02611511c1704c653e5951a44b294a953cdb470 (patch) | |
| tree | adf7232a41d0bd1133b82f8aea952af80a3f53be /src/engine/client/ec_ui.c | |
| parent | 1ddfbba3666a835b59fc79b59aaae367ee93a6ea (diff) | |
| download | zcatch-a02611511c1704c653e5951a44b294a953cdb470.tar.gz zcatch-a02611511c1704c653e5951a44b294a953cdb470.zip | |
more font stuffs
Diffstat (limited to 'src/engine/client/ec_ui.c')
| -rw-r--r-- | src/engine/client/ec_ui.c | 157 |
1 files changed, 0 insertions, 157 deletions
diff --git a/src/engine/client/ec_ui.c b/src/engine/client/ec_ui.c index b0e088a0..50234a6b 100644 --- a/src/engine/client/ec_ui.c +++ b/src/engine/client/ec_ui.c @@ -276,160 +276,3 @@ void ui_margin(const struct rect *original, int pixels, struct rect *other_rect) other_rect->h = r.h - 2*pixels; } -typedef struct -{ - short x, y; - short width, height; - short x_offset, y_offset; - short x_advance; -} FONT_CHARACTER; - -typedef struct -{ - short size; - short width, height; - - short line_height; - short base; - - FONT_CHARACTER characters[256]; - - short kerning[256*256]; -} FONT_DATA; - -int font_load(FONT *font, const char *filename) -{ - FONT_DATA font_data; - IOHANDLE file; - - dbg_msg("font/load", "loading %s", filename); - file = io_open(filename, IOFLAG_READ); - - if(file) - { - int i; - - io_read(file, &font_data, sizeof(FONT_DATA)); - io_close(file); - -#if defined(CONF_ARCH_ENDIAN_BIG) - swap_endian(&font_data, 2, sizeof(FONT_DATA)/2); -#endif - - dbg_msg("font/load", "width: %d, height: %d, sizeof(FONT_DATA): %d", font_data.width, font_data.height, sizeof(FONT_DATA)); - - { - float scale_factor_x = ((float)font_data.size)/font_data.width; - float scale_factor_y = ((float)font_data.size)/font_data.height; - float scale_factor_tex_x = 1.0f/font_data.width; - float scale_factor_tex_y = 1.0f/font_data.height; - - for (i = 0; i < 256; i++) - { - float tex_x0 = font_data.characters[i].x*scale_factor_tex_x; - float tex_y0 = font_data.characters[i].y*scale_factor_tex_y; - float tex_x1 = (font_data.characters[i].x+font_data.characters[i].width)*scale_factor_tex_x; - float tex_y1 = (font_data.characters[i].y+font_data.characters[i].height)*scale_factor_tex_y; - - float width = font_data.characters[i].width*scale_factor_x; - float height = font_data.characters[i].height*scale_factor_y; - float x_offset = font_data.characters[i].x_offset*scale_factor_x; - float y_offset = font_data.characters[i].y_offset*scale_factor_y; - float x_advance = font_data.characters[i].x_advance*scale_factor_x; - - font->characters[i].tex_x0 = tex_x0; - font->characters[i].tex_y0 = tex_y0; - font->characters[i].tex_x1 = tex_x1; - font->characters[i].tex_y1 = tex_y1; - font->characters[i].width = width; - font->characters[i].height = height; - font->characters[i].x_offset = x_offset; - font->characters[i].y_offset = y_offset; - font->characters[i].x_advance = x_advance; - - } - - for (i = 0; i < 256*256; i++) - { - font->kerning[i] = font_data.kerning[i]*scale_factor_x; - } - } - - return 0; - } - else - return -1; -} - -int font_save(FONT *font, const char *filename) -{ - return 0; -} - -float font_string_width(FONT *font, const char *string, float size) -{ - float width = 0.0f; - - const unsigned char *c = (unsigned char *)string; - - while (*c) - { - float tex_x0, tex_y0, tex_x1, tex_y1; - float char_width, char_height; - float x_offset, y_offset, x_advance; - - font_character_info(font, *c, &tex_x0, &tex_y0, &tex_x1, &tex_y1, &char_width, &char_height, &x_offset, &y_offset, &x_advance); - - - width += x_advance; - - c++; - } - - - return width*size; -} - -void font_character_info(FONT *font, unsigned char c, float *tex_x0, float *tex_y0, float *tex_x1, float *tex_y1, float *width, float *height, float *x_offset, float *y_offset, float *x_advance) -{ - CHARACTER *character = &font->characters[c]; - - *tex_x0 = character->tex_x0; - *tex_y0 = character->tex_y0; - *tex_x1 = character->tex_x1; - *tex_y1 = character->tex_y1; - *width = character->width; - *height = character->height; - *x_offset = character->x_offset; - *y_offset = character->y_offset; - *x_advance = character->x_advance; -} - -void font_render(FONT *font, const char *string, float x, float y, float size) -{ - const unsigned char *c = (unsigned char *)string; - - gfx_texture_set(font->texture); - - gfx_quads_begin(); - gfx_setcolor(1.0f, 1.0f, 1.0f, 1.0f); - - while (*c) - { - float tex_x0, tex_y0, tex_x1, tex_y1; - float width, height; - float x_offset, y_offset, x_advance; - - font_character_info(font, *c, &tex_x0, &tex_y0, &tex_x1, &tex_y1, &width, &height, &x_offset, &y_offset, &x_advance); - - gfx_quads_setsubset(tex_x0, tex_y0, tex_x1, tex_y1); - - gfx_quads_drawTL(x+x_offset*size, y+y_offset*size, width*size, height*size); - - x += x_advance*size; - - c++; - } - - gfx_quads_end(); -} |