Subject: Re: bug#54646: 29.0.50; set-fontset-font and font clipping issues

From: Eli Zaretskii <[email-masked]>
Date: Fri, 01 Apr 2022 13:54:04 +0300

> From: Robert Pluim <[email-masked]>
> Cc: [email-masked],Eli Zaretskii <[email-masked]>
> Date: Fri, 01 Apr 2022 10:49:21 +0200
> 
>     Visuwesh> I can reproduce it in HarfBuzz 4.2.0.  Maybe this could be related to
>     Visuwesh> the toolkit being used?  I have only tested so far with Lucid.  I will
>     Visuwesh> try GTK some time later.
> 
> Iʼve managed to reproduce this, but only once, with HarfBuzz 4.2.0
> using lucid and Kurinto Seri. I guess that points more at HarfBuzz
> than at Emacs, but maybe the lucid build is doing things slightly
> differently to gtk.

I think at this point we need to establish whether we pass the same
information to HarfBuzz in the "good" and the "bad" cases.  In
particular, we tell it how to scale the glyph metrics:

  hb_font_t *hb_font
    = font->driver->begin_hb_font
    ? font->driver->begin_hb_font (font, &position_unit)
    : NULL;

The value of position_unit then affects the values returned in the
Lisp glyph object used to display the grapheme cluster:

      xoff = lround (pos[i].x_offset * position_unit);
      yoff = - lround (pos[i].y_offset * position_unit);
      wadjust = lround (pos[i].x_advance * position_unit);
      if (xoff || yoff || wadjust != metrics.width)
	LGLYPH_SET_ADJUSTMENT (lglyph, CALLN (Fvector,
					      make_fixnum (xoff),
					      make_fixnum (yoff),
					      make_fixnum (wadjust)));

I'd be interested in what happens there in the "good" vs the "bad"
cases.

If we pass the same information to HarfBuzz, and it returns different
results, then it's probably a problem in HarfBuzz.