summaryrefslogtreecommitdiff
path: root/fitz/dev_text.c
diff options
context:
space:
mode:
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);