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.
This commit is contained in:
parent
a0797d32c9
commit
27d28d43d1
1 changed files with 16 additions and 20 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue