summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2013-02-11 12:51:22 +0000
committerCaolán McNamara <caolanm@redhat.com>2013-02-11 12:52:59 +0000
commit949bc0cbbcad19d1f4a9de0813c9eb83f79234cf (patch)
treedb029018605f9b8f0b47504919a0788446448896 /vcl
parentbd505fdb9f669f365ff39b0ef46f0742c638e333 (diff)
Resolves: rhbz#527719 #i105784# improve selection of fallback font
Change-Id: Ib935ebd1609d4584d464e42fa418c2e91202e59b
Diffstat (limited to 'vcl')
-rw-r--r--vcl/generic/fontmanager/fontconfig.cxx35
1 files changed, 21 insertions, 14 deletions
diff --git a/vcl/generic/fontmanager/fontconfig.cxx b/vcl/generic/fontmanager/fontconfig.cxx
index 0efdbe47bebb..67506d8dcb06 100644
--- a/vcl/generic/fontmanager/fontconfig.cxx
+++ b/vcl/generic/fontmanager/fontconfig.cxx
@@ -832,7 +832,6 @@ namespace
#endif
}
-#if defined(ENABLE_DBUS) && defined(ENABLE_PACKAGEKIT)
LanguageTag getExemplerLangTagForCodePoint(sal_uInt32 currentChar)
{
int32_t script = u_getIntPropertyValue(currentChar, UCHAR_SCRIPT);
@@ -844,6 +843,7 @@ namespace
return LanguageTag(OStringToOUString(aBuf.makeStringAndClear(), RTL_TEXTENCODING_UTF8));
}
+#if defined(ENABLE_DBUS) && defined(ENABLE_PACKAGEKIT)
guint get_xid_for_dbus()
{
const Window *pTopWindow = Application::IsHeadlessModeEnabled() ? NULL : Application::GetActiveTopWindow();
@@ -927,25 +927,32 @@ bool PrintFontManager::Substitute( FontSelectPattern &rPattern, rtl::OUString& r
const FcChar8* pTargetNameUtf8 = (FcChar8*)aTargetName.getStr();
FcPatternAddString(pPattern, FC_FAMILY, pTargetNameUtf8);
- const LanguageTag aLangTag(rPattern.meLanguage);
- const rtl::OString aLangAttrib = mapToFontConfigLangTag(aLangTag);
- if (!aLangAttrib.isEmpty())
- FcPatternAddString(pPattern, FC_LANG, (FcChar8*)aLangAttrib.getStr());
+ LanguageTag aLangTag(rPattern.meLanguage);
+ OString aLangAttrib = mapToFontConfigLangTag(aLangTag);
// Add required Unicode characters, if any
if ( !rMissingCodes.isEmpty() )
{
- FcCharSet *unicodes = FcCharSetCreate();
- for( sal_Int32 nStrIndex = 0; nStrIndex < rMissingCodes.getLength(); )
- {
- // also handle unicode surrogates
- const sal_uInt32 nCode = rMissingCodes.iterateCodePoints( &nStrIndex );
- FcCharSetAddChar( unicodes, nCode );
- }
- FcPatternAddCharSet(pPattern, FC_CHARSET, unicodes);
- FcCharSetDestroy(unicodes);
+ FcCharSet *unicodes = FcCharSetCreate();
+ for( sal_Int32 nStrIndex = 0; nStrIndex < rMissingCodes.getLength(); )
+ {
+ // also handle unicode surrogates
+ const sal_uInt32 nCode = rMissingCodes.iterateCodePoints( &nStrIndex );
+ FcCharSetAddChar( unicodes, nCode );
+ //#i105784#/rhbz#527719 improve selection of fallback font
+ if (aLangAttrib.isEmpty())
+ {
+ aLangTag = getExemplerLangTagForCodePoint(nCode);
+ aLangAttrib = mapToFontConfigLangTag(aLangTag);
+ }
+ }
+ FcPatternAddCharSet(pPattern, FC_CHARSET, unicodes);
+ FcCharSetDestroy(unicodes);
}
+ if (!aLangAttrib.isEmpty())
+ FcPatternAddString(pPattern, FC_LANG, (FcChar8*)aLangAttrib.getStr());
+
addtopattern(pPattern, rPattern.GetSlant(), rPattern.GetWeight(),
rPattern.GetWidthType(), rPattern.GetPitch());