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/painting/qtextureglyphcache.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/painting/qtextureglyphcache.cpp')
-rw-r--r-- | src/gui/painting/qtextureglyphcache.cpp | 27 |
1 files changed, 5 insertions, 22 deletions
diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp index 5876f3bf93..1e0ed0f798 100644 --- a/src/gui/painting/qtextureglyphcache.cpp +++ b/src/gui/painting/qtextureglyphcache.cpp @@ -99,23 +99,6 @@ int QTextureGlyphCache::calculateSubPixelPositionCount(glyph_t glyph) const return images.size(); } -QFixed QTextureGlyphCache::subPixelPositionForX(QFixed x) const -{ - if (m_subPixelPositionCount <= 1) - return QFixed(); - - QFixed subPixelPosition; - if (x != 0) { - subPixelPosition = x - x.floor(); - QFixed fraction = (subPixelPosition / QFixed::fromReal(1.0 / m_subPixelPositionCount)).floor(); - - // 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; -} - bool QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const glyph_t *glyphs, const QFixedPoint *positions) { @@ -129,13 +112,13 @@ bool QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const const int paddingDoubled = glyphPadding() * 2; bool supportsSubPixelPositions = fontEngine->supportsSubPixelPositions(); - if (m_subPixelPositionCount == 0) { + if (fontEngine->m_subPixelPositionCount == 0) { if (!supportsSubPixelPositions) { - m_subPixelPositionCount = 1; + fontEngine->m_subPixelPositionCount = 1; } else { int i = 0; - while (m_subPixelPositionCount == 0 && i < numGlyphs) - m_subPixelPositionCount = calculateSubPixelPositionCount(glyphs[i++]); + while (fontEngine->m_subPixelPositionCount == 0 && i < numGlyphs) + fontEngine->m_subPixelPositionCount = calculateSubPixelPositionCount(glyphs[i++]); } } @@ -156,7 +139,7 @@ bool QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const QFixed subPixelPosition; if (supportsSubPixelPositions) { QFixed x = positions != 0 ? positions[i].x : QFixed(); - subPixelPosition = subPixelPositionForX(x); + subPixelPosition = fontEngine->subPixelPositionForX(x); } if (coords.contains(GlyphAndSubPixelPosition(glyph, subPixelPosition))) |