From: Behdad Esfahbod Date: Fri, 16 Sep 2011 05:11:30 +0000 (-0400) Subject: Always shape at size=upem X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7bf6ecd3bfb1ccf5d9ac6fe274efa74b46885fea;p=platform%2Fupstream%2FlibHarfBuzzSharp.git 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_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 d747c9f..daa202d 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 4b09d6f..863039b 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