summaryrefslogtreecommitdiffstats
path: root/src/gui/painting/qtextureglyphcache.cpp
diff options
context:
space:
mode:
authorJiang Jiang <jiang.jiang@nokia.com>2011-11-04 14:47:31 +0100
committerQt by Nokia <qt-info@nokia.com>2011-11-08 07:43:00 +0100
commit63eae1bd15ea8aa1e4fc460194e34ecb5fc55b3a (patch)
treeaf59cef7a05fffcc04655449ad18371f3719c8ee /src/gui/painting/qtextureglyphcache.cpp
parent04f6983979021aecd5c3dbb7cc80f864bb4ee56d (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.cpp27
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)))