diff --git a/util/options.cc b/util/options.cc index aab24033e..4e7582743 100644 --- a/util/options.cc +++ b/util/options.cc @@ -494,7 +494,7 @@ font_options_t::get_font (void) const 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 d747c9fb2..daa202d7f 100644 --- a/util/view-cairo.cc +++ b/util/view-cairo.cc @@ -80,7 +80,7 @@ void 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 @@ view_cairo_t::consume_line (hb_buffer_t *buffer, 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 @@ double 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 4b09d6fbd..863039b6d 100644 --- a/util/view-cairo.hh +++ b/util/view-cairo.hh @@ -57,7 +57,7 @@ struct view_cairo_t : output_options_t, view_options_t { double line_width (unsigned int i); GArray *lines; - unsigned int upem; + double scale; }; #endif