Apply fontconfig settings to custom fonts
Currently QtWebKits custom fonts does not follow the system settings on Linux. This is because they are only handled by the basic fontdatabase. This patch adds handling of custom fonts to QFontconfigDatabase. Change-Id: I676fc97840766b58cd937bb8e2c9f166f30c8a6e Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>bb10
parent
ecf6aa2dca
commit
c2c136306d
|
|
@ -170,6 +170,7 @@ QFontEngine *QBasicFontDatabase::fontEngine(const QByteArray &fontData, qreal pi
|
|||
{
|
||||
QFontDef fontDef;
|
||||
fontDef.pixelSize = pixelSize;
|
||||
fontDef.hintingPreference = hintingPreference;
|
||||
|
||||
QFontEngineFTRawData *fe = new QFontEngineFTRawData(fontDef);
|
||||
if (!fe->initFromData(fontData)) {
|
||||
|
|
|
|||
|
|
@ -650,6 +650,56 @@ QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, void *usrPtr)
|
|||
return engine;
|
||||
}
|
||||
|
||||
QFontEngine *QFontconfigDatabase::fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference)
|
||||
{
|
||||
QFontEngineFT *engine = static_cast<QFontEngineFT*>(QBasicFontDatabase::fontEngine(fontData, pixelSize, hintingPreference));
|
||||
QFontDef fontDef = engine->fontDef;
|
||||
|
||||
QFontEngineFT::GlyphFormat format;
|
||||
// try and get the pattern
|
||||
FcPattern *pattern = FcPatternCreate();
|
||||
|
||||
FcValue value;
|
||||
value.type = FcTypeString;
|
||||
QByteArray cs = fontDef.family.toUtf8();
|
||||
value.u.s = (const FcChar8 *)cs.data();
|
||||
FcPatternAdd(pattern,FC_FAMILY,value,true);
|
||||
|
||||
FcResult result;
|
||||
|
||||
FcConfigSubstitute(0, pattern, FcMatchPattern);
|
||||
FcDefaultSubstitute(pattern);
|
||||
|
||||
FcPattern *match = FcFontMatch(0, pattern, &result);
|
||||
if (match) {
|
||||
engine->setDefaultHintStyle(defaultHintStyleFromMatch(hintingPreference, match));
|
||||
|
||||
FcBool fc_antialias;
|
||||
if (FcPatternGetBool(match, FC_ANTIALIAS,0, &fc_antialias) != FcResultMatch)
|
||||
fc_antialias = true;
|
||||
engine->antialias = fc_antialias;
|
||||
|
||||
if (engine->antialias) {
|
||||
QFontEngineFT::SubpixelAntialiasingType subpixelType = subpixelTypeFromMatch(match);
|
||||
engine->subpixelType = subpixelType;
|
||||
|
||||
format = subpixelType == QFontEngineFT::Subpixel_None
|
||||
? QFontEngineFT::Format_A8
|
||||
: QFontEngineFT::Format_A32;
|
||||
} else
|
||||
format = QFontEngineFT::Format_Mono;
|
||||
FcPatternDestroy(match);
|
||||
} else
|
||||
format = QFontEngineFT::Format_A8;
|
||||
|
||||
FcPatternDestroy(pattern);
|
||||
|
||||
engine->defaultFormat = format;
|
||||
engine->glyphFormat = format;
|
||||
|
||||
return engine;
|
||||
}
|
||||
|
||||
QStringList QFontconfigDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const
|
||||
{
|
||||
QStringList fallbackFamilies;
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ public:
|
|||
void populateFontDatabase();
|
||||
QFontEngineMulti *fontEngineMulti(QFontEngine *fontEngine, QChar::Script script);
|
||||
QFontEngine *fontEngine(const QFontDef &fontDef, void *handle);
|
||||
QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference);
|
||||
QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const;
|
||||
QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName);
|
||||
QString resolveFontFamilyAlias(const QString &family) const;
|
||||
|
|
|
|||
Loading…
Reference in New Issue