aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/scenegraph/util/qsgdistancefieldutil.cpp
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2012-06-25 15:20:53 +1000
committerQt by Nokia <qt-info@nokia.com>2012-06-27 11:28:41 +0200
commitab5eb33495baa253bd1d7ccf567f71a58c39f700 (patch)
tree9f6ee90bc84965c9c54ec076709d5fde073dc6d2 /src/quick/scenegraph/util/qsgdistancefieldutil.cpp
parent589d39ec6c35edc1ba195474be30dfcf8c31598d (diff)
Use resolved font name for key in distance field cache.
On windows at least multiple QRawFonts can share a family name but have different font engines. Prefer the faceId information when constructing a key for the distance field cache to avoid a conflict. Task-number: QTBUG-26201 Change-Id: I9111f22045eb35e6535039117ec4184075e778a4 Reviewed-by: Yoann Lopes <yoann.lopes@nokia.com>
Diffstat (limited to 'src/quick/scenegraph/util/qsgdistancefieldutil.cpp')
-rw-r--r--src/quick/scenegraph/util/qsgdistancefieldutil.cpp26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/quick/scenegraph/util/qsgdistancefieldutil.cpp b/src/quick/scenegraph/util/qsgdistancefieldutil.cpp
index ecfdf9b03c..8bd2ecad0a 100644
--- a/src/quick/scenegraph/util/qsgdistancefieldutil.cpp
+++ b/src/quick/scenegraph/util/qsgdistancefieldutil.cpp
@@ -75,22 +75,32 @@ QSGDistanceFieldGlyphCacheManager::~QSGDistanceFieldGlyphCacheManager()
QSGDistanceFieldGlyphCache *QSGDistanceFieldGlyphCacheManager::cache(const QRawFont &font)
{
- QString key = QString::fromLatin1("%1_%2_%3_%4")
- .arg(font.familyName())
- .arg(font.styleName())
- .arg(font.weight())
- .arg(font.style());
- return m_caches.value(key, 0);
+ return m_caches.value(fontKey(font), 0);
}
void QSGDistanceFieldGlyphCacheManager::insertCache(const QRawFont &font, QSGDistanceFieldGlyphCache *cache)
{
- QString key = QString::fromLatin1("%1_%2_%3_%4")
+ m_caches.insert(fontKey(font), cache);
+}
+
+QString QSGDistanceFieldGlyphCacheManager::fontKey(const QRawFont &font)
+{
+ QFontEngine *fe = QRawFontPrivate::get(font)->fontEngine;
+ if (!fe->faceId().filename.isEmpty()) {
+ QByteArray keyName = fe->faceId().filename;
+ if (font.style() != QFont::StyleNormal)
+ keyName += QByteArray(" I");
+ if (font.weight() != QFont::Normal)
+ keyName += ' ' + QByteArray::number(font.weight());
+ keyName += QByteArray(" DF");
+ return QString::fromUtf8(keyName);
+ } else {
+ return QString::fromLatin1("%1_%2_%3_%4")
.arg(font.familyName())
.arg(font.styleName())
.arg(font.weight())
.arg(font.style());
- m_caches.insert(key, cache);
+ }
}
QT_END_NAMESPACE