Always shape at size=upem
Fixes bug with uniscribe not handling GIGANTIC sizes.
diff --git a/util/options.cc b/util/options.cc
index aab2403..4e75827 100644
--- a/util/options.cc
+++ b/util/options.cc
@@ -494,7 +494,7 @@
font = hb_font_create (face);
unsigned int upem = hb_face_get_upem (face);
- hb_font_set_scale (font, font_size * upem, font_size * upem);
+ hb_font_set_scale (font, upem, upem);
hb_face_destroy (face);
#if HAVE_FREETYPE
diff --git a/util/view-cairo.cc b/util/view-cairo.cc
index d747c9f..daa202d 100644
--- a/util/view-cairo.cc
+++ b/util/view-cairo.cc
@@ -80,7 +80,7 @@
view_cairo_t::init (const font_options_t *font_opts)
{
lines = g_array_new (FALSE, FALSE, sizeof (line_t));
- upem = hb_face_get_upem (hb_font_get_face (font_opts->get_font ()));
+ scale = double (font_opts->font_size) / hb_face_get_upem (hb_font_get_face (font_opts->get_font ()));
}
void
@@ -115,8 +115,8 @@
for (i = 0; i < (int) l.num_glyphs; i++)
{
l.glyphs[i].index = hb_glyph[i].codepoint;
- l.glyphs[i].x = ( hb_position->x_offset + x) / double (upem);
- l.glyphs[i].y = (-hb_position->y_offset + y) / double (upem);
+ l.glyphs[i].x = ( hb_position->x_offset + x) * scale;
+ l.glyphs[i].y = (-hb_position->y_offset + y) * scale;
x += hb_position->x_advance;
y += -hb_position->y_advance;
@@ -174,7 +174,7 @@
view_cairo_t::line_width (unsigned int i)
{
line_t &line = g_array_index (lines, line_t, i);
- return line.glyphs[line.num_glyphs].x / double (upem);
+ return line.glyphs[line.num_glyphs].x * scale;
}
void
diff --git a/util/view-cairo.hh b/util/view-cairo.hh
index 4b09d6f..863039b 100644
--- a/util/view-cairo.hh
+++ b/util/view-cairo.hh
@@ -57,7 +57,7 @@
double line_width (unsigned int i);
GArray *lines;
- unsigned int upem;
+ double scale;
};
#endif