From 24b560185c2574f2898583ba2c8fc40a01b95885 Mon Sep 17 00:00:00 2001 From: blub Date: Sun, 3 Jan 2010 11:43:08 +0000 Subject: [PATCH] Do not load sizes < 0 at all. Trying a different snapping approach for width_of which doesn't ignore fnt->scale in DrawQ_* functions. git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9771 d7cf8633-e32d-0410-b094-e92efae38249 --- ft2.c | 8 ++++---- ft2.h | 3 ++- gl_draw.c | 15 ++++++++++----- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/ft2.c b/ft2.c index ee84d5a6..0e7d31c6 100644 --- a/ft2.c +++ b/ft2.c @@ -300,7 +300,7 @@ qboolean Font_Attach(ft2_font_t *font, ft2_attachment_t *attachment) return true; } -static float Font_VirtualToRealSize(float sz) +float Font_VirtualToRealSize(float sz) { int vh, vw, si; float sn; @@ -316,7 +316,7 @@ static float Font_VirtualToRealSize(float sz) return si; } -static float Font_SnapTo(float val, float snapwidth) +float Font_SnapTo(float val, float snapwidth) { return floor(val / snapwidth + 0.5f) * snapwidth; } @@ -378,7 +378,7 @@ qboolean Font_LoadFont(const char *name, dp_font_t *dpfnt) break; } count = 0; - for (s = 0; s < MAX_FONT_SIZES; ++s) + for (s = 0; s < MAX_FONT_SIZES && dpfnt->req_sizes[s] >= 0; ++s) { if (Font_LoadSize(fb, Font_VirtualToRealSize(dpfnt->req_sizes[s]), true, false)) ++count; @@ -405,7 +405,7 @@ qboolean Font_LoadFont(const char *name, dp_font_t *dpfnt) } count = 0; - for (s = 0; s < MAX_FONT_SIZES; ++s) + for (s = 0; s < MAX_FONT_SIZES && dpfnt->req_sizes[s] >= 0; ++s) { if (Font_LoadSize(ft2, Font_VirtualToRealSize(dpfnt->req_sizes[s]), false, false)) ++count; diff --git a/ft2.h b/ft2.h index 99de79a7..6c1cf812 100644 --- a/ft2.h +++ b/ft2.h @@ -72,7 +72,8 @@ ft2_font_map_t *Font_MapForIndex(ft2_font_t *font, int index); qboolean Font_LoadFont(const char *name, dp_font_t *dpfnt); qboolean Font_GetKerningForSize(ft2_font_t *font, float w, float h, Uchar left, Uchar right, float *outx, float *outy); qboolean Font_GetKerningForMap(ft2_font_t *font, int map_index, float w, float h, Uchar left, Uchar right, float *outx, float *outy); - +float Font_VirtualToRealSize(float sz); +float Font_SnapTo(float val, float snapwidth); // since this is used on a font_map_t, let's name it FontMap_* ft2_font_map_t *FontMap_FindForChar(ft2_font_map_t *start, Uchar ch); #endif // DP_FREETYPE2_H__ diff --git a/gl_draw.c b/gl_draw.c index 689a8614..5bf47364 100644 --- a/gl_draw.c +++ b/gl_draw.c @@ -619,8 +619,14 @@ static void LoadFont(qboolean override, const char *name, dp_font_t *fnt) fnt->width_of[ch] = atof(com_token) + extraspacing; if (fnt->ft2) { - for (i = 0; i < MAX_FONT_SIZES && fnt->req_sizes[i] >= 0; ++i) - Font_MapForIndex(fnt->ft2, i)->width_of[ch] = snap_to_pixel_x(fnt->width_of[ch] * fnt->req_sizes[i], 0.4); + for (i = 0; i < MAX_FONT_SIZES; ++i) + { + //Font_MapForIndex(fnt->ft2, i)->width_of[ch] = snap_to_pixel_x(fnt->width_of[ch] * fnt->req_sizes[i], 0.4); + ft2_font_map_t *map = Font_MapForIndex(fnt->ft2, i); + if (!map) + break; + map->width_of[ch] = Font_SnapTo(fnt->width_of[ch], 1/map->size); + } } ch++; break; @@ -789,7 +795,6 @@ static void LoadFont_f(void) for(i = 1; i < MAX_FONT_SIZES; ++i) f->req_sizes[i] = -1; - // for some reason this argc is 3 even when using 2 arguments here, maybe nexuiz screws up if(Cmd_Argc() >= 3) { for(i = 0; i < Cmd_Argc()-3; ++i) @@ -1145,7 +1150,7 @@ float DrawQ_TextWidth_UntilWidth_TrackColors_Scale(const char *text, size_t *max if (fontmap) { - width_of_factor = 1; + width_of_factor = dw; width_of = fontmap->width_of; } else @@ -1361,7 +1366,7 @@ float DrawQ_String_Scale(float startx, float starty, const char *text, size_t ma if (fontmap) { - width_of_factor = 1; + width_of_factor = dw; width_of = fontmap->width_of; } else -- 2.39.2