[HarfBuzz] HB-NG and Qt

Konstantin Ritt ritt.ks at gmail.com
Mon Nov 3 23:18:36 PST 2014


The issue appears on Windows indeed. The problematic font was "Tahoma".
See more details at https://bugreports.qt-project.org/browse/QTBUG-41931 (not
that many, though).
The proposed `fontEngine->doKerning(..)` is used either in the HB-old path
in case the shaper item's `kerning_applied` flag appears to be unset after
shaping, though there is no similar thing in HB-NG, so I don't think
applying additional kerning blindly is a good solution in general.
All `doKerning()` method does is loads the kerning pairs from the font's
('k', 'e', 'r', 'n') table and applies kerning metrics. I believe it is
quite the same HB does.

Regards,
Konstantin

2014-11-04 10:51 GMT+04:00 Behdad Esfahbod <behdad at behdad.org>:

> Hi Konstantin?
>
> Which font exactly?
>
> The rule in HarfBuzz-ng is, if the font has *any* GPOS, then the old-style
> kern table is not applied.  This is not exactly what OpenType recommends,
> but
> is a cleaner approach than applying old-style kern if the GPOS table has no
> 'kern' feature.
>
> At any rate, we need to see what font exactly this is happening with, and
> what
> Uniscribe does.
>
> IIRC, some fonts shipped with Windows XP or 7 could hit this problem, but
> hardly any other font we know about.
>
> Cheers,
> behdad
>
> PS.  If you write to the list, others can chime in.  Specifically, Jonathan
> knows a lot about these as they highly care about Windows experience.
>
> On 14-11-03 10:43 PM, Konstantin Ritt wrote:
> > Hi Behdad,
> >
> >
> > As you may know, we've switched to HB-NG as of Qt 5.4 alpha, which is a
> good
> > news, of course.
> > However we didn't drop the HB-old path and it is possible to switch to
> it,
> > which is very handy for comparing the shaping/rendering results between
> HB-NG
> > and HB-old, BTW.
> >
> > Now, here is a bug report
> https://bugreports.qt-project.org/browse/QTBUG-41931
> > about kerning issue with some fonts.
> > I was proposing a quick possible solution w/o expecting it to help...
> but it
> > helped, so I'm in doubts:
> >  ~2 years ago you answered that NG supports both old and new style
> kerning
> > just fine (even better than HB-old) by enabling the kern feature, so my
> code
> > currently is:
> > {code}
> > const hb_feature_t features[1] = {
> >     { HB_TAG('k','e','r','n'), !!kerningEnabled, 0, uint(-1) }
> > };
> > const int num_features = 1;
> > shapedOk = hb_shape_full(hb_font, buffer, features, num_features, 0);
> > {code}
> > but then, I don't understand why applying the old-style kerning manually
> on
> > top of HB's results solves the raised issue. Am I missing something?
> >
> > Best regards,
> > Konstantin
>
> --
> behdad
> http://behdad.org/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/harfbuzz/attachments/20141104/a3e98af0/attachment.html>


More information about the HarfBuzz mailing list