From: YAMAMOTO Mitsuharu Date: Mon, 26 Sep 2022 00:57:23 +0000 (+0900) Subject: Make average width computation on ftcr more permissive (Bug#43058) X-Git-Tag: emacs-29.0.90~1856^2~221 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=9ed03040d5bfb228c8d41f1df44e74a824d0cd44;p=emacs.git Make average width computation on ftcr more permissive (Bug#43058) * src/ftcrfont.c (ftcrfont_open): Use only non-zero width glyphs for computing average width. --- diff --git a/src/ftcrfont.c b/src/ftcrfont.c index a02ff99870e..dc765e5aee4 100644 --- a/src/ftcrfont.c +++ b/src/ftcrfont.c @@ -233,6 +233,7 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size) cairo_glyph_t stack_glyph; font->min_width = font->max_width = 0; font->average_width = font->space_width = 0; + int n = 0; for (char c = 32; c < 127; c++) { cairo_glyph_t *glyphs = &stack_glyph; @@ -252,17 +253,20 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size) 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 (this_width > font->max_width) - font->max_width = this_width; - if (c == 32) - font->space_width = this_width; - font->average_width += this_width; + if (this_width > 0) + { + if (! font->min_width || font->min_width > this_width) + font->min_width = this_width; + if (this_width > font->max_width) + font->max_width = this_width; + if (c == 32) + font->space_width = this_width; + font->average_width += this_width; + n++; + } } - font->average_width /= 95; + if (n) + font->average_width /= n; cairo_scaled_font_extents (ftcrfont_info->cr_scaled_font, &extents); font->ascent = lround (extents.ascent);