summaryrefslogtreecommitdiff
path: root/fitz
diff options
context:
space:
mode:
Diffstat (limited to 'fitz')
-rw-r--r--fitz/res_font.c38
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;
}