summaryrefslogtreecommitdiff
path: root/fitz/dev_text.c
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2010-06-21 03:48:46 +0200
committerTor Andersson <tor@ghostscript.com>2010-06-21 03:48:46 +0200
commitbfa48cafeb06c903f2a6341a343231b239f3e5fc (patch)
tree5c205fd57f9f9f875621ae91f279f5033e1d0a17 /fitz/dev_text.c
parent190e934523d20db62c9b8f92ad4dd1b403fab5cd (diff)
downloadmupdf-bfa48cafeb06c903f2a6341a343231b239f3e5fc.tar.xz
Fix ascender and descender and other metric calculations to use proper scaling values.
Diffstat (limited to 'fitz/dev_text.c')
-rw-r--r--fitz/dev_text.c18
1 files changed, 10 insertions, 8 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);