[Fontconfig] Changing to hintslight globally by default + hintfull for otfs
madigens at gmail.com
Thu Oct 8 01:39:25 PDT 2015
(reposting because I wasn't subscribed to the list)
Hello fontconfig people,
I'm currently trying to save the world, ehm, bring more order into the
font rendering world.
The first problem is, I personally don't like hintslight/medium/full
because they are coarse descriptions that mean different things to
different font formats:
1. OpenType/CFF (.otf) fonts: medium == full == snapping glyphs to the
y-axis only. By design, this tries to preserve outline fidelity.
2. TrueType (.ttf) fonts: Full currently (FreeType 2.6.1) snaps to
x-and-y-axis and FT doesn't fully handle ClearType yet (so no
y-only-snapping like on Windows). Medium is similar to full, but seems
to be less aggressive on the x-axis. Both sacrifice outline fidelity and
"harmoniousness" for absolute sharpness with varying success. Even when
ClearType is fully handled, it depends on the bytecode in the font if
you get y-only or x-and-y snapping.
3. Postscript fonts: not sure, but the native hinter produces
sub-optimal results anyway.
4. Slight invokes the autohinter regardless of font format. Like for
.otfs, it snaps to the y-axis only.
The problem is nicely visible when you go medium or full and mix font
formats. A default installation of Fedora will have Cantarell in
OpenType/CFF format in the UI and DejaVu (.ttf) on the console.
Cantarell is y-snapped (and slightly emboldened), DejaVu
x-and-y-snapped. The difference is jarring.
The second problem is that FreeType currently doesn't fully handle
ClearType. TrueType fonts developed with ClearType in mind will look
sub-optimal by default. The OpenType/CFF hint support is top notch in
contrast, thanks to Adobe's contributed CFF engine. The autohinter has
been doing a mighty fine job across the board and for different
languages for a while.
I propose that fontconfig defaults to the autohinter == hintslight
globally and sets hintfull only for OpenType/CFF fonts. That way, the
default for all fonts is to snap them to the y-axis, leading to a much
more coherent and harmonious look out of the box. Ubuntu has been doing
global hintslight for years and I personally found rendering to be
mostly fine there.
Ideally, fontconfig exposes something like "hintnative", "hintauto",
"hintnone" and the modifiers "y-only", "x-and-y-if-supported", and
scraps "hintslight/medium/full" and the "hinting" and "autohint" attributes.
More information about the Fontconfig