Only use Xft font settings as defaults, and let fontconfig override
On a GNOME or UNITY desktop, Qt will currently read font-settings from Xft and use those ignoring any fontconfig instructions. This patch changes the behavior so the Xft settings are only used as default, but any explicit overrides by fontconfig will take precedence. Task-number: QTBUG-43660 Change-Id: Ie10d5828cbfdd95fe5364c63a625d455d9213936 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
This commit is contained in:
parent
55162dae7e
commit
2e2df81537
@ -526,18 +526,8 @@ QFontEngine::HintStyle defaultHintStyleFromMatch(QFont::HintingPreference hintin
|
|||||||
return QFontEngine::HintNone;
|
return QFontEngine::HintNone;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (useXftConf) {
|
|
||||||
void *hintStyleResource =
|
|
||||||
QGuiApplication::platformNativeInterface()->nativeResourceForScreen("hintstyle",
|
|
||||||
QGuiApplication::primaryScreen());
|
|
||||||
int hintStyle = int(reinterpret_cast<qintptr>(hintStyleResource));
|
|
||||||
if (hintStyle > 0)
|
|
||||||
return QFontEngine::HintStyle(hintStyle - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int hint_style = 0;
|
int hint_style = 0;
|
||||||
if (FcPatternGetInteger (match, FC_HINT_STYLE, 0, &hint_style) == FcResultNoMatch)
|
if (FcPatternGetInteger (match, FC_HINT_STYLE, 0, &hint_style) == FcResultMatch) {
|
||||||
hint_style = FC_HINT_FULL;
|
|
||||||
switch (hint_style) {
|
switch (hint_style) {
|
||||||
case FC_HINT_NONE:
|
case FC_HINT_NONE:
|
||||||
return QFontEngine::HintNone;
|
return QFontEngine::HintNone;
|
||||||
@ -551,23 +541,24 @@ QFontEngine::HintStyle defaultHintStyleFromMatch(QFont::HintingPreference hintin
|
|||||||
Q_UNREACHABLE();
|
Q_UNREACHABLE();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (useXftConf) {
|
||||||
|
void *hintStyleResource =
|
||||||
|
QGuiApplication::platformNativeInterface()->nativeResourceForScreen("hintstyle",
|
||||||
|
QGuiApplication::primaryScreen());
|
||||||
|
int hintStyle = int(reinterpret_cast<qintptr>(hintStyleResource));
|
||||||
|
if (hintStyle > 0)
|
||||||
|
return QFontEngine::HintStyle(hintStyle - 1);
|
||||||
|
}
|
||||||
|
|
||||||
return QFontEngine::HintFull;
|
return QFontEngine::HintFull;
|
||||||
}
|
}
|
||||||
|
|
||||||
QFontEngine::SubpixelAntialiasingType subpixelTypeFromMatch(FcPattern *match, bool useXftConf)
|
QFontEngine::SubpixelAntialiasingType subpixelTypeFromMatch(FcPattern *match, bool useXftConf)
|
||||||
{
|
{
|
||||||
if (useXftConf) {
|
|
||||||
void *subpixelTypeResource =
|
|
||||||
QGuiApplication::platformNativeInterface()->nativeResourceForScreen("subpixeltype",
|
|
||||||
QGuiApplication::primaryScreen());
|
|
||||||
int subpixelType = int(reinterpret_cast<qintptr>(subpixelTypeResource));
|
|
||||||
if (subpixelType > 0)
|
|
||||||
return QFontEngine::SubpixelAntialiasingType(subpixelType - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int subpixel = FC_RGBA_UNKNOWN;
|
int subpixel = FC_RGBA_UNKNOWN;
|
||||||
FcPatternGetInteger(match, FC_RGBA, 0, &subpixel);
|
if (FcPatternGetInteger(match, FC_RGBA, 0, &subpixel) == FcResultMatch) {
|
||||||
|
|
||||||
switch (subpixel) {
|
switch (subpixel) {
|
||||||
case FC_RGBA_UNKNOWN:
|
case FC_RGBA_UNKNOWN:
|
||||||
case FC_RGBA_NONE:
|
case FC_RGBA_NONE:
|
||||||
@ -584,6 +575,17 @@ QFontEngine::SubpixelAntialiasingType subpixelTypeFromMatch(FcPattern *match, bo
|
|||||||
Q_UNREACHABLE();
|
Q_UNREACHABLE();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (useXftConf) {
|
||||||
|
void *subpixelTypeResource =
|
||||||
|
QGuiApplication::platformNativeInterface()->nativeResourceForScreen("subpixeltype",
|
||||||
|
QGuiApplication::primaryScreen());
|
||||||
|
int subpixelType = int(reinterpret_cast<qintptr>(subpixelTypeResource));
|
||||||
|
if (subpixelType > 0)
|
||||||
|
return QFontEngine::SubpixelAntialiasingType(subpixelType - 1);
|
||||||
|
}
|
||||||
|
|
||||||
return QFontEngine::Subpixel_None;
|
return QFontEngine::Subpixel_None;
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
@ -823,10 +825,8 @@ void QFontconfigDatabase::setupFontEngine(QFontEngineFT *engine, const QFontDef
|
|||||||
QGuiApplication::platformNativeInterface()->nativeResourceForScreen("antialiasingEnabled",
|
QGuiApplication::platformNativeInterface()->nativeResourceForScreen("antialiasingEnabled",
|
||||||
QGuiApplication::primaryScreen());
|
QGuiApplication::primaryScreen());
|
||||||
int antialiasingEnabled = int(reinterpret_cast<qintptr>(antialiasResource));
|
int antialiasingEnabled = int(reinterpret_cast<qintptr>(antialiasResource));
|
||||||
if (antialiasingEnabled > 0) {
|
if (antialiasingEnabled > 0)
|
||||||
antialias = antialiasingEnabled - 1;
|
antialias = antialiasingEnabled - 1;
|
||||||
forcedAntialiasSetting = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QFontEngine::GlyphFormat format;
|
QFontEngine::GlyphFormat format;
|
||||||
|
Loading…
Reference in New Issue
Block a user