diff options
author | Tor Andersson <tor@ghostscript.com> | 2010-06-21 03:48:46 +0200 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2010-06-21 03:48:46 +0200 |
commit | bfa48cafeb06c903f2a6341a343231b239f3e5fc (patch) | |
tree | 5c205fd57f9f9f875621ae91f279f5033e1d0a17 /fitz | |
parent | 190e934523d20db62c9b8f92ad4dd1b403fab5cd (diff) | |
download | mupdf-bfa48cafeb06c903f2a6341a343231b239f3e5fc.tar.xz |
Fix ascender and descender and other metric calculations to use proper scaling values.
Diffstat (limited to 'fitz')
-rw-r--r-- | fitz/dev_text.c | 18 | ||||
-rw-r--r-- | fitz/res_font.c | 2 |
2 files changed, 11 insertions, 9 deletions
diff --git a/fitz/dev_text.c b/fitz/dev_text.c index b5e662e7..d107c50a 100644 --- a/fitz/dev_text.c +++ b/fitz/dev_text.c @@ -15,9 +15,9 @@ FT_Get_Advance(FT_Face face, int gid, int masks, FT_Fixed *out) if (err) return err; if (masks & FT_LOAD_VERTICAL_LAYOUT) - *out = face->glyph->advance.y * 1024; + *out = (face->glyph->metrics.vertAdvance << 16) / 1000; else - *out = face->glyph->advance.x * 1024; + *out = (face->glyph->metrics.horiAdvance << 16) / 1000; return 0; } @@ -230,6 +230,7 @@ static void fz_textextractspan(fz_textspan **last, fz_text *text, fz_matrix ctm, fz_point *pen) { fz_font *font = text->font; + FT_Face face = font->ftface; fz_matrix tm = text->trm; fz_matrix trm; float size; @@ -248,12 +249,11 @@ fz_textextractspan(fz_textspan **last, fz_text *text, fz_matrix ctm, fz_point *p if (font->ftface) { - FT_Set_Transform(font->ftface, NULL, NULL); - err = FT_Set_Char_Size(font->ftface, 64, 64, 72, 72); + err = FT_Set_Char_Size(font->ftface, 1000, 1000, 72, 72); if (err) fz_warn("freetype set character size: %s", ft_errorstring(err)); - ascender = ((FT_Face)font->ftface)->ascender * 0.001f; - descender = ((FT_Face)font->ftface)->descender * 0.001f; + ascender = (float)face->ascender / face->units_per_EM; + descender = (float)face->descender / face->units_per_EM; } rect = fz_emptyrect; @@ -349,8 +349,10 @@ fz_textextractspan(fz_textspan **last, fz_text *text, fz_matrix ctm, fz_point *p else { adv = font->t3widths[text->els[i].gid]; - rect.x0 = 0; rect.y1 = 0; - rect.x1 = adv; rect.y1 = 1; + rect.x0 = 0; + rect.y0 = descender; + rect.x1 = adv; + rect.y1 = ascender; } rect = fz_transformrect(trm, rect); diff --git a/fitz/res_font.c b/fitz/res_font.c index e8cf76e3..933b732e 100644 --- a/fitz/res_font.c +++ b/fitz/res_font.c @@ -238,7 +238,7 @@ fz_renderftglyph(fz_font *font, int gid, fz_matrix trm) if (fterr) fz_warn("freetype failed to load glyph: %s", ft_errorstring(fterr)); - realw = ((FT_Face)font->ftface)->glyph->advance.x; + realw = ((FT_Face)font->ftface)->glyph->metrics.horiAdvance; subw = font->widthtable[gid]; if (realw) scale = (float) subw / realw; |