about summary refs log tree commit diff
path: root/src/engine/client/ec_font.c
diff options
context:
space:
mode:
authorJakob Fries <jakob.fries@gmail.com>2008-01-11 16:48:34 +0000
committerJakob Fries <jakob.fries@gmail.com>2008-01-11 16:48:34 +0000
commit24e17b41a8a5d600e0f116bc059ba121ac21bad5 (patch)
tree36edd4d0ca27caa9434b3e43064c0d4807bddd34 /src/engine/client/ec_font.c
parentac25b91088626a432722a2d74b16c4e0b7e9a97e (diff)
downloadzcatch-24e17b41a8a5d600e0f116bc059ba121ac21bad5.tar.gz
zcatch-24e17b41a8a5d600e0f116bc059ba121ac21bad5.zip
Minimized font's gfx memory footprint.
Diffstat (limited to 'src/engine/client/ec_font.c')
-rw-r--r--src/engine/client/ec_font.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/engine/client/ec_font.c b/src/engine/client/ec_font.c
index 92ba3cb7..04f8b954 100644
--- a/src/engine/client/ec_font.c
+++ b/src/engine/client/ec_font.c
@@ -1,6 +1,7 @@
 /* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
 #include <stdarg.h>
 #include <stdio.h>
+#include <string.h>
 #include <engine/e_system.h>
 #include "ec_font.h"
 
@@ -86,7 +87,8 @@ int font_load(FONT *font, const char *filename)
         return -1;
 }
 
-int gfx_load_texture(const char *filename);
+int gfx_load_texture(const char *filename, int store_format);
+#define IMG_ALPHA 2
 
 int font_set_load(FONT_SET *font_set, const char *font_filename, const char *text_texture_filename, const char *outline_texture_filename, int fonts, ...)
 {
@@ -117,8 +119,8 @@ int font_set_load(FONT_SET *font_set, const char *font_filename, const char *tex
         }
 
         font->size = size;
-        font->text_texture = gfx_load_texture(composed_text_texture_filename);
-        font->outline_texture = gfx_load_texture(composed_outline_texture_filename);
+        font->text_texture = gfx_load_texture(composed_text_texture_filename, IMG_ALPHA);
+        font->outline_texture = gfx_load_texture(composed_outline_texture_filename, IMG_ALPHA);
     }
 
     va_end(va);
@@ -130,16 +132,24 @@ float font_text_width(FONT *font, const char *text, float size, int length)
     float width = 0.0f;
 
     const unsigned char *c = (unsigned char *)text;
+    int chars_left;
+    if (length == -1)
+        chars_left = strlen(text);
+    else
+        chars_left = length;
 
-    while (*c)
+    while (chars_left--)
     {
         float tex_x0, tex_y0, tex_x1, tex_y1;
         float char_width, char_height;
         float x_offset, y_offset, x_advance;
+        float 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;
+        advance = x_advance + font_kerning(font, *c, *(c+1));
+
+        width += advance;
 
         c++;
     }