diff options
author | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> | 2019-06-22 15:33:32 +0900 |
---|---|---|
committer | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> | 2019-06-22 15:33:32 +0900 |
commit | 27d28d43d12999cf04d823ec9e08228d1b862a49 (patch) | |
tree | be14c15d36c35853ff2618987a1a7f3c9fde12bf | |
parent | a0797d32c95948d8b5800c5771026dee3903729c (diff) | |
download | emacs-27d28d43d12999cf04d823ec9e08228d1b862a49.tar.gz |
Make ftcr font backend driver more consistent with xft
* src/ftcrfont.c (ftcrfont_open): Use metrics of glyph ID 0 if there is no
glyph for an ASCII printable.
-rw-r--r-- | src/ftcrfont.c | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/src/ftcrfont.c b/src/ftcrfont.c index a019fe8294a..0cc40b4c944 100644 --- a/src/ftcrfont.c +++ b/src/ftcrfont.c @@ -187,7 +187,6 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size) block_input (); cairo_glyph_t stack_glyph; - int n = 0; font->min_width = font->average_width = font->space_width = 0; for (char c = 32; c < 127; c++) { @@ -198,28 +197,25 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size) 0, 0, &c, 1, &glyphs, &num_glyphs, NULL, NULL, NULL); - if (status == CAIRO_STATUS_SUCCESS) + /* In order to simulate the Xft behavior, we use metrics of + glyph ID 0 if there is no glyph for an ASCII printable. */ + if (status != CAIRO_STATUS_SUCCESS) + stack_glyph.index = 0; + else if (glyphs != &stack_glyph) { - if (glyphs != &stack_glyph) - cairo_glyph_free (glyphs); - else if (stack_glyph.index) - { - int this_width = ftcrfont_glyph_extents (font, stack_glyph.index, - NULL); - - if (this_width > 0 - && (! font->min_width - || font->min_width > this_width)) - font->min_width = this_width; - if (c == 32) - font->space_width = this_width; - font->average_width += this_width; - n++; - } + cairo_glyph_free (glyphs); + stack_glyph.index = 0; } + int this_width = ftcrfont_glyph_extents (font, stack_glyph.index, NULL); + if (this_width > 0 + && (! font->min_width + || font->min_width > this_width)) + font->min_width = this_width; + if (c == 32) + font->space_width = this_width; + font->average_width += this_width; } - if (n > 0) - font->average_width /= n; + font->average_width /= 95; cairo_scaled_font_extents (ftcrfont_info->cr_scaled_font, &extents); font->ascent = lround (extents.ascent); |