[Development] Replacement for QFont::ForceIntegerMetrics in Qt 6?
Kai Uwe Broulik
kde at privat.broulik.de
Tue Nov 7 18:13:53 CET 2023
Hi,
thanks, QFont::PreferFullHinting seems to do the trick.
I actually had that set for testing and thought
QTextOption::setDesignMetrics(false) was the fix (after reading a bit of
QFontEngineFT) but it was the hinting all along :-)
Thanks!
Cheers Kai Uwe
Am 06.11.23 um 12:04 schrieb Eskil Abrahamsen Blomfeldt:
> Hi!
>
> ForceIntegerMetrics was originally added to get CoreText to look at
> little bit better with WebKit, since WebKit did not support subpixel
> positioning at the time and CoreText did not support font hinting. I
> removed it in Qt 6 because it's honestly not a typographically sensible
> thing to do, and the original use case had become irrelevant 🙂
>
> For your case, where you want to make sure your font aligns to the pixel
> grid, you could try enabling hinting on it with
> font.setHintingPreference(QFont::PreferFullHinting). Font hinting will
> slightly alter the glyphs so that they actually align to the pixel grid
> instead of introducing kerning errors (which is what ForceIntegerMetrics
> did). I'm not sure if this is what you mean by "disabling design
> metrics"? If so, what exactly was the issue with it? I principle, I
> think this is the most correct solution to the problem, so maybe there's
> some way of getting it to work.
>
> If that does not work, then another option is to manually get the
> QGlyphRuns from the QTextLayout and align the glyphs yourself before
> drawing them. That should get you the same layout as with
> ForceIntegerMetrics, both good and bad, without much extra work.
>
> (Of course, ideally the rendering code should not assume integer
> advances for the characters, since this is not really a reasonable
> expectation for unhinted, scalable fonts, but I can see how it's not
> tempting to rewrite it just for this port.)
>
> Eskil Abrahamsen Blomfeldt
> Senior Manager, Graphics
>
More information about the Development
mailing list