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

From: Visuwesh <[email-masked]>
Date: Fri, 01 Apr 2022 17:08:59 +0530

[வெள்ளி ஏப்ரல் 01, 2022] Eli Zaretskii wrote:

>> 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.

If you can give some instructions on how to get started, I can try
getting the value of position_unit in the good and the bad cases.