diff options
author | Jiang Jiang <jiang.jiang@nokia.com> | 2011-11-04 14:47:31 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-08 07:43:00 +0100 |
commit | 63eae1bd15ea8aa1e4fc460194e34ecb5fc55b3a (patch) | |
tree | af59cef7a05fffcc04655449ad18371f3719c8ee /src/gui/text/qfontengine.cpp | |
parent | 04f6983979021aecd5c3dbb7cc80f864bb4ee56d (diff) |
Fix subpixel positioning support
Move subpixelPositionForX from QTextureGlyphCache to QFontEngine,
since some font engines like QFontEngineFT may need a custom
implementation or tweak it a little bit.
In QRasterPaintEngine::drawCachedGlyphs, do not add aliasedCoodinate
to x offset as that will break subpixel positioning.
Change-Id: Idbcec617509459b80965220ceb07b17737649bbf
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
Diffstat (limited to 'src/gui/text/qfontengine.cpp')
-rw-r--r-- | src/gui/text/qfontengine.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 067a630d4d..5c6c8d186a 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -179,6 +179,7 @@ QFontEngine::QFontEngine() hbFace = 0; glyphFormat = -1; + m_subPixelPositionCount = 0; } QFontEngine::~QFontEngine() @@ -635,17 +636,19 @@ QImage QFontEngine::alphaRGBMapForGlyph(glyph_t glyph, QFixed /*subPixelPosition return rgbMask; } -QFixed QFontEngine::subPixelPositionForX(QFixed x) +QFixed QFontEngine::subPixelPositionForX(QFixed x) const { - int m_subPixelPositionCount = 4; - if (!supportsSubPixelPositions()) - return 0; + if (m_subPixelPositionCount <= 1 || !supportsSubPixelPositions()) + return QFixed(); QFixed subPixelPosition; if (x != 0) { subPixelPosition = x - x.floor(); QFixed fraction = (subPixelPosition / QFixed::fromReal(1.0 / m_subPixelPositionCount)).floor(); - subPixelPosition = fraction / QFixed(m_subPixelPositionCount); + + // Compensate for precision loss in fixed point to make sure we are always drawing at a subpixel position over + // the lower boundary for the selected rasterization by adding 1/64. + subPixelPosition = fraction / QFixed(m_subPixelPositionCount) + QFixed::fromReal(0.015625); } return subPixelPosition; } |