summaryrefslogtreecommitdiff
path: root/source/fitz/font.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/fitz/font.c')
-rw-r--r--source/fitz/font.c28
1 files changed, 8 insertions, 20 deletions
diff --git a/source/fitz/font.c b/source/fitz/font.c
index e705c229..5a1e61ff 100644
--- a/source/fitz/font.c
+++ b/source/fitz/font.c
@@ -412,34 +412,22 @@ fz_adjust_ft_glyph_width(fz_context *ctx, fz_font *font, int gid, fz_matrix *trm
/* Fudge the font matrix to stretch the glyph if we've substituted the font. */
if (font->ft_stretch && font->width_table /* && font->wmode == 0 */)
{
- FT_Error fterr;
- int subw;
- int realw;
- float scale;
+ FT_Fixed adv;
+ float subw;
+ float realw;
fz_lock(ctx, FZ_LOCK_FREETYPE);
- /* TODO: use FT_Get_Advance */
- fterr = FT_Set_Char_Size(font->ft_face, 1000, 1000, 72, 72);
- if (fterr)
- fz_warn(ctx, "freetype setting character size: %s", ft_error_string(fterr));
-
- fterr = FT_Load_Glyph(font->ft_face, gid,
- FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP | FT_LOAD_IGNORE_TRANSFORM);
- if (fterr)
- fz_warn(ctx, "freetype failed to load glyph: %s", ft_error_string(fterr));
-
- realw = ((FT_Face)font->ft_face)->glyph->metrics.horiAdvance;
+ FT_Get_Advance(font->ft_face, gid, FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING | FT_LOAD_IGNORE_TRANSFORM, &adv);
fz_unlock(ctx, FZ_LOCK_FREETYPE);
+
+ realw = (float)adv * 1000 / ((FT_Face)font->ft_face)->units_per_EM;
if (gid < font->width_count)
subw = font->width_table[gid];
else
subw = font->width_default;
- if (realw)
- scale = (float) subw / realw;
- else
- scale = 1;
- fz_pre_scale(trm, scale, 1);
+ if (realw > 0)
+ fz_pre_scale(trm, subw / realw, 1);
}
return trm;