[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