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
void setAntialiasingSpreadFunc(AntialiasingSpreadFunc func) { m_antialiasingSpread_func = func; }
private:
+ static QString fontKey(const QRawFont &font);
+
QHash<QString, QSGDistanceFieldGlyphCache *> m_caches;
QSGGlyphNode::AntialiasingMode m_defaultAntialiasingMode;