bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: Visuwesh
Subject: bug#54646: 29.0.50; set-fontset-font and font clipping issues
Date: Fri, 01 Apr 2022 20:28:06 +0530
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux)

[Friday April 01, 2022] Eli Zaretskii wrote:

>> From: Robert Pluim <rpluim@gmail.com>
>> Cc: 54646@debbugs.gnu.org,Eli Zaretskii <eliz@gnu.org>
>> 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.

I get the same value for position_unit just after begin_hb_font call and
just after setting the value of wadjust, in the bad and the good case:
0.015625.  In case I was not clear, here's a patch that shows where I
added the printf calls

diff --git a/src/hbfont.c b/src/hbfont.c
index 2721a66120..887e0c0e86 100644
--- a/src/hbfont.c
+++ b/src/hbfont.c
@@ -490,6 +490,7 @@ hbfont_shape (Lisp_Object lgstring, Lisp_Object direction)
     : NULL;
   if (!hb_font)
     return make_fixnum (0);
+  printf("position_unit begin_hb_font: %f\n", position_unit);
 
   hb_bool_t success = hb_shape_full (hb_font, hb_buffer, NULL, 0, NULL);
   if (font->driver->end_hb_font)
@@ -593,6 +594,7 @@ hbfont_shape (Lisp_Object lgstring, Lisp_Object direction)
       xoff = lround (pos[i].x_offset * position_unit);
       yoff = - lround (pos[i].y_offset * position_unit);
       wadjust = lround (pos[i].x_advance * position_unit);
+      printf("position_unit after lround: %f\n", position_unit);
       if (xoff || yoff || wadjust != metrics.width)
        LGLYPH_SET_ADJUSTMENT (lglyph, CALLN (Fvector,
                                              make_fixnum (xoff),

So I see "position_unit begin_hb_font: 0.0015625" and "position_unit
after lround: 0.0015625" in the good and the bad case.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]