diff options
Diffstat (limited to 'fitz')
-rw-r--r-- | fitz/res_font.c | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/fitz/res_font.c b/fitz/res_font.c index a09c507b..edc8c054 100644 --- a/fitz/res_font.c +++ b/fitz/res_font.c @@ -131,10 +131,22 @@ fz_drop_font(fz_context *ctx, fz_font *font) void fz_set_font_bbox(fz_context *ctx, fz_font *font, float xmin, float ymin, float xmax, float ymax) { - font->bbox.x0 = xmin; - font->bbox.y0 = ymin; - font->bbox.x1 = xmax; - font->bbox.y1 = ymax; + if (xmin >= xmax || ymin >= ymax) + { + /* Invalid bbox supplied. It would be prohibitively slow to + * measure the true one, so make one up. */ + font->bbox.x0 = -1; + font->bbox.y0 = -1; + font->bbox.x1 = 2; + font->bbox.y1 = 2; + } + else + { + font->bbox.x0 = xmin; + font->bbox.y0 = ymin; + font->bbox.x1 = xmax; + font->bbox.y1 = ymax; + } } /* @@ -282,10 +294,11 @@ fz_new_font_from_file(fz_context *ctx, char *name, char *path, int index, int us font = fz_new_font(ctx, name, use_glyph_bbox, face->num_glyphs); font->ft_face = face; - font->bbox.x0 = (float) face->bbox.xMin / face->units_per_EM; - font->bbox.y0 = (float) face->bbox.yMin / face->units_per_EM; - font->bbox.x1 = (float) face->bbox.xMax / face->units_per_EM; - font->bbox.y1 = (float) face->bbox.yMax / face->units_per_EM; + fz_set_font_bbox(ctx, font, + (float) face->bbox.xMin / face->units_per_EM, + (float) face->bbox.yMin / face->units_per_EM, + (float) face->bbox.xMax / face->units_per_EM, + (float) face->bbox.yMax / face->units_per_EM); return font; } @@ -313,10 +326,11 @@ fz_new_font_from_memory(fz_context *ctx, char *name, unsigned char *data, int le font = fz_new_font(ctx, name, use_glyph_bbox, face->num_glyphs); font->ft_face = face; - font->bbox.x0 = (float) face->bbox.xMin / face->units_per_EM; - font->bbox.y0 = (float) face->bbox.yMin / face->units_per_EM; - font->bbox.x1 = (float) face->bbox.xMax / face->units_per_EM; - font->bbox.y1 = (float) face->bbox.yMax / face->units_per_EM; + fz_set_font_bbox(ctx, font, + (float) face->bbox.xMin / face->units_per_EM, + (float) face->bbox.yMin / face->units_per_EM, + (float) face->bbox.xMax / face->units_per_EM, + (float) face->bbox.yMax / face->units_per_EM); return font; } |