QFontEngineFT: Apply hinting for non-scaled rotated glyphs
Scaled hinted glyphs looks ugly, see QTBUG-24846. It was fixed
in 6da6845f07 by disabling hinting
for them. But at the same time that commit also disabled hinting
for glyphs with the most common transformation - rotating without
scaling.
Detect this type of transformation and don't disable hinting for it.
Change-Id: I0e69a2b60e7e4bc24e9efc4fdedb984df07ad15c
Task-number: QTBUG-50574
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
bb10
parent
9bc352e38d
commit
adc4e000fc
|
|
@ -1780,6 +1780,12 @@ void QFontEngineFT::unlockAlphaMapForGlyph()
|
|||
QFontEngine::unlockAlphaMapForGlyph();
|
||||
}
|
||||
|
||||
static inline bool is2dRotation(const QTransform &t)
|
||||
{
|
||||
return qFuzzyCompare(t.m11(), t.m22()) && qFuzzyCompare(t.m12(), -t.m21())
|
||||
&& qFuzzyCompare(t.m11()*t.m22() - t.m12()*t.m21(), 1.0);
|
||||
}
|
||||
|
||||
QFontEngineFT::Glyph *QFontEngineFT::loadGlyphFor(glyph_t g,
|
||||
QFixed subPixelPosition,
|
||||
GlyphFormat format,
|
||||
|
|
@ -1793,7 +1799,7 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyphFor(glyph_t g,
|
|||
Glyph *glyph = glyphSet != 0 ? glyphSet->getGlyph(g, subPixelPosition) : 0;
|
||||
if (!glyph || glyph->format != format || (!fetchBoundingBox && !glyph->data)) {
|
||||
QScopedValueRollback<HintStyle> saved_default_hint_style(default_hint_style);
|
||||
if (t.type() >= QTransform::TxScale)
|
||||
if (t.type() >= QTransform::TxScale && !is2dRotation(t))
|
||||
default_hint_style = HintNone; // disable hinting if the glyphs are transformed
|
||||
|
||||
lockFace();
|
||||
|
|
|
|||
Loading…
Reference in New Issue