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: Eli Zaretskii
Subject: bug#54646: 29.0.50; set-fontset-font and font clipping issues
Date: Fri, 01 Apr 2022 15:14:06 +0300

> From: Visuwesh <visuweshm@gmail.com>
> Cc: Robert Pluim <rpluim@gmail.com>,  54646@debbugs.gnu.org
> Date: Fri, 01 Apr 2022 17:08:59 +0530
> 
> > 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.

I don't think I understand where to begin the instructions.  Are you
familiar with running Emacs under GDB and debugging the C code?  If
so, setting a breakpoint in the code which I quoted (it's in hbfont.c)
and showing the values in both the "good" and the "bad" cases is what
we need.

Alternatively, you could add printf statements in that code which
would output those values to stdout or stderr streams.





reply via email to

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