Revert "Avoid fontconfig access in fontEngine creation"
This reverts commit 8dcb52df8e2e949232ccded9fad5a4f25ba6dda2. Turns out that hint style is retrieved from font match instead of pattern match, which shouldn't be retreived until font engine creation. Change-Id: I90e779a3823e6a6604cdadb52586fcd5e22c295b Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
This commit is contained in:
parent
e142a64a33
commit
35f56b0cf9
@ -50,7 +50,6 @@ struct FontFile
|
||||
{
|
||||
QString fileName;
|
||||
int indexValue;
|
||||
int hintStyle;
|
||||
};
|
||||
|
||||
class QBasicFontDatabase : public QPlatformFontDatabase
|
||||
|
@ -319,7 +319,7 @@ void QFontconfigDatabase::populateFontDatabase()
|
||||
FC_FAMILY, FC_WEIGHT, FC_SLANT,
|
||||
FC_SPACING, FC_FILE, FC_INDEX,
|
||||
FC_LANG, FC_CHARSET, FC_FOUNDRY, FC_SCALABLE, FC_PIXEL_SIZE, FC_WEIGHT,
|
||||
FC_WIDTH, FC_HINT_STYLE,
|
||||
FC_WIDTH,
|
||||
#if FC_VERSION >= 20297
|
||||
FC_CAPABILITY,
|
||||
#endif
|
||||
@ -409,31 +409,9 @@ void QFontconfigDatabase::populateFontDatabase()
|
||||
}
|
||||
#endif
|
||||
|
||||
QFontEngineFT::HintStyle default_hint_style;
|
||||
|
||||
// hinting
|
||||
int hint_style = 0;
|
||||
if (FcPatternGetInteger(fonts->fonts[i], FC_HINT_STYLE, 0, &hint_style) == FcResultNoMatch)
|
||||
hint_style = QFontEngineFT::HintFull;
|
||||
switch (hint_style) {
|
||||
case FC_HINT_NONE:
|
||||
default_hint_style = QFontEngineFT::HintNone;
|
||||
break;
|
||||
case FC_HINT_SLIGHT:
|
||||
default_hint_style = QFontEngineFT::HintLight;
|
||||
break;
|
||||
case FC_HINT_MEDIUM:
|
||||
default_hint_style = QFontEngineFT::HintMedium;
|
||||
break;
|
||||
default:
|
||||
default_hint_style = QFontEngineFT::HintFull;
|
||||
break;
|
||||
}
|
||||
|
||||
FontFile *fontFile = new FontFile;
|
||||
fontFile->fileName = QLatin1String((const char *)file_value);
|
||||
fontFile->indexValue = indexValue;
|
||||
fontFile->hintStyle = default_hint_style;
|
||||
|
||||
QFont::Style style = (slant_value == FC_SLANT_ITALIC)
|
||||
? QFont::StyleItalic
|
||||
@ -507,7 +485,48 @@ QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, QUnicodeTables::
|
||||
QFontEngineFT::GlyphFormat format = antialias? QFontEngineFT::Format_A8 : QFontEngineFT::Format_Mono;
|
||||
|
||||
engine = new QFontEngineFT(fontDef);
|
||||
engine->setDefaultHintStyle(QFontEngineFT::HintStyle(fontfile->hintStyle));
|
||||
|
||||
// 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);
|
||||
|
||||
|
||||
value.u.s = (const FcChar8 *)fid.filename.data();
|
||||
FcPatternAdd(pattern,FC_FILE,value,true);
|
||||
|
||||
value.type = FcTypeInteger;
|
||||
value.u.i = fid.index;
|
||||
FcPatternAdd(pattern,FC_INDEX,value,true);
|
||||
|
||||
if (FcConfigSubstitute(0,pattern,FcMatchPattern)) {
|
||||
QFontEngineFT::HintStyle default_hint_style;
|
||||
|
||||
//hinting
|
||||
int hint_style = 0;
|
||||
if (FcPatternGetInteger (pattern, FC_HINT_STYLE, 0, &hint_style) == FcResultNoMatch)
|
||||
hint_style = QFontEngineFT::HintFull;
|
||||
switch (hint_style) {
|
||||
case FC_HINT_NONE:
|
||||
default_hint_style = QFontEngineFT::HintNone;
|
||||
break;
|
||||
case FC_HINT_SLIGHT:
|
||||
default_hint_style = QFontEngineFT::HintLight;
|
||||
break;
|
||||
case FC_HINT_MEDIUM:
|
||||
default_hint_style = QFontEngineFT::HintMedium;
|
||||
break;
|
||||
default:
|
||||
default_hint_style = QFontEngineFT::HintFull;
|
||||
break;
|
||||
}
|
||||
engine->setDefaultHintStyle(default_hint_style);
|
||||
}
|
||||
FcPatternDestroy(pattern);
|
||||
|
||||
if (!engine->init(fid,antialias,format)) {
|
||||
delete engine;
|
||||
|
Loading…
x
Reference in New Issue
Block a user