summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2013-07-12 00:08:32 +0200
committerEike Rathke <erack@redhat.com>2013-07-12 00:10:13 +0200
commitf66f896657967c0ce3c75680e956cad918a632d3 (patch)
tree3ffeae5734c351e290e8dbfb5f5cc7441a64c731
parent1254a00da0fff439c8f8ac1697da7a96e10b1705 (diff)
DefaultFontConfiguration and FontSubstConfiguration with LanguageTag
Change-Id: I6c111392537d114358d0574f2dbdf40f684b5103
-rw-r--r--include/unotools/fontcfg.hxx10
-rw-r--r--unotools/source/config/fontcfg.cxx68
-rw-r--r--vcl/source/app/settings.cxx2
-rw-r--r--vcl/source/gdi/outdev3.cxx31
-rw-r--r--vcl/source/window/window.cxx2
5 files changed, 56 insertions, 57 deletions
diff --git a/include/unotools/fontcfg.hxx b/include/unotools/fontcfg.hxx
index 5e63ddb7fbdf..e33397f289c6 100644
--- a/include/unotools/fontcfg.hxx
+++ b/include/unotools/fontcfg.hxx
@@ -19,6 +19,7 @@
#ifndef _UNOTOOLS_FONTCFG_HXX
#define _UNOTOOLS_FONTCFG_HXX
+#include <i18nlangtag/languagetag.hxx>
#include <unotools/unotoolsdllapi.h>
#include <tools/solar.h>
#include <tools/fontenum.hxx>
@@ -59,8 +60,8 @@ class UNOTOOLS_DLLPUBLIC DefaultFontConfiguration
static DefaultFontConfiguration& get();
- OUString getDefaultFont( const com::sun::star::lang::Locale& rLocale, int nType ) const;
- OUString getUserInterfaceFont( const com::sun::star::lang::Locale& rLocale ) const;
+ OUString getDefaultFont( const LanguageTag& rLanguageTag, int nType ) const;
+ OUString getUserInterfaceFont( const LanguageTag& rLanguageTag ) const;
};
// IMPL_FONT_ATTR_DEFAULT - Default-Font like Andale Sans UI, Palace Script, Albany, Thorndale, Cumberland, ...
@@ -175,10 +176,7 @@ public:
const FontNameAttr* getSubstInfo(
const OUString& rFontName,
- const com::sun::star::lang::Locale& rLocale =
- com::sun::star::lang::Locale( OUString( "en" ),
- OUString(),
- OUString() )
+ const LanguageTag& rLanguageTag = LanguageTag( OUString( "en"))
) const;
static void getMapName( const OUString& rOrgName, OUString& rShortName, OUString& rFamilyName, FontWeight& rWeight, FontWidth& rWidth, sal_uLong& rType );
};
diff --git a/unotools/source/config/fontcfg.cxx b/unotools/source/config/fontcfg.cxx
index b61de13b7b2b..3edd9b41a5fe 100644
--- a/unotools/source/config/fontcfg.cxx
+++ b/unotools/source/config/fontcfg.cxx
@@ -209,24 +209,23 @@ OUString DefaultFontConfiguration::tryLocale( const OUString& rBcp47, const OUSt
return aRet;
}
-OUString DefaultFontConfiguration::getDefaultFont( const Locale& rLocale, int nType ) const
+OUString DefaultFontConfiguration::getDefaultFont( const LanguageTag& rLanguageTag, int nType ) const
{
OUString aType = OUString::createFromAscii( getKeyType( nType ) );
- LanguageTag aLanguageTag( rLocale);
// Try the simple cases first without constructing fallbacks.
- OUString aRet = tryLocale( aLanguageTag.getBcp47(), aType );
+ OUString aRet = tryLocale( rLanguageTag.getBcp47(), aType );
if (aRet.isEmpty())
{
- if (rLocale.Variant.isEmpty())
+ if (rLanguageTag.isIsoLocale())
{
- if (!rLocale.Country.isEmpty())
+ if (!rLanguageTag.getCountry().isEmpty())
{
- aRet = tryLocale( rLocale.Language, aType );
+ aRet = tryLocale( rLanguageTag.getLanguage(), aType );
}
}
else
{
- ::std::vector< OUString > aFallbacks( aLanguageTag.getFallbackStrings());
+ ::std::vector< OUString > aFallbacks( rLanguageTag.getFallbackStrings());
aFallbacks.erase( aFallbacks.begin()); // first is full BCP47, we already checked that
for (::std::vector< OUString >::const_iterator it( aFallbacks.begin());
it != aFallbacks.end() && aRet.isEmpty(); ++it)
@@ -242,13 +241,13 @@ OUString DefaultFontConfiguration::getDefaultFont( const Locale& rLocale, int nT
return aRet;
}
-OUString DefaultFontConfiguration::getUserInterfaceFont( const Locale& rLocale ) const
+OUString DefaultFontConfiguration::getUserInterfaceFont( const LanguageTag& rLanguageTag ) const
{
- Locale aLocale = rLocale;
- if( aLocale.Language.isEmpty() )
- aLocale = SvtSysLocale().GetUILanguageTag().getLocale();
+ LanguageTag aLanguageTag( rLanguageTag);
+ if( aLanguageTag.isSystemLocale() )
+ aLanguageTag = SvtSysLocale().GetUILanguageTag();
- OUString aUIFont = getDefaultFont( aLocale, DEFAULTFONT_UI_SANS );
+ OUString aUIFont = getDefaultFont( aLanguageTag, DEFAULTFONT_UI_SANS );
if( !aUIFont.isEmpty() )
return aUIFont;
@@ -265,16 +264,18 @@ OUString DefaultFontConfiguration::getUserInterfaceFont( const Locale& rLocale )
#define FALLBACKFONT_UI_SANS_CHINSIM "Andale Sans UI;Arial Unicode MS;ZYSong18030;AR PL SungtiL GB;AR PL KaitiM GB;SimSun;Lucida Sans Unicode;Fangsong;Hei;Song;Kai;Ming;gnu-unifont;Interface User;"
#define FALLBACKFONT_UI_SANS_CHINTRD "Andale Sans UI;Arial Unicode MS;AR PL Mingti2L Big5;AR PL KaitiM Big5;Kai;PMingLiU;MingLiU;Ming;Lucida Sans Unicode;gnu-unifont;Interface User;"
+ const OUString aLanguage( aLanguageTag.getLanguage());
+
// optimize font list for some locales, as long as Andale Sans UI does not support them
- if( aLocale.Language == "ar" || aLocale.Language == "he" || aLocale.Language == "iw" )
+ if( aLanguage == "ar" || aLanguage == "he" || aLanguage == "iw" )
{
return OUString(FALLBACKFONT_UI_SANS_ARABIC);
}
- else if ( aLocale.Language == "th" )
+ else if ( aLanguage == "th" )
{
return OUString(FALLBACKFONT_UI_SANS_THAI);
}
- else if ( aLocale.Language == "ko" )
+ else if ( aLanguage == "ko" )
{
// we need localized names for korean fonts
const sal_Unicode aSunGulim[] = { 0xC36C, 0xAD74, 0xB9BC, 0 };
@@ -289,23 +290,19 @@ OUString DefaultFontConfiguration::getUserInterfaceFont( const Locale& rLocale )
return aFallBackKoreanLocalized.makeStringAndClear();
}
- else if( aLocale.Language == "cs" ||
- aLocale.Language == "hu" ||
- aLocale.Language == "pl" ||
- aLocale.Language == "ro" ||
- aLocale.Language == "rm" ||
- aLocale.Language == "hr" ||
- aLocale.Language == "sk" ||
- aLocale.Language == "sl" ||
- aLocale.Language == "sb")
+ else if( aLanguage == "cs" ||
+ aLanguage == "hu" ||
+ aLanguage == "pl" ||
+ aLanguage == "ro" ||
+ aLanguage == "rm" ||
+ aLanguage == "hr" ||
+ aLanguage == "sk" ||
+ aLanguage == "sl" ||
+ aLanguage == "sb")
{
return OUString(FALLBACKFONT_UI_SANS_LATIN2);
}
- else if (MsLangId::isTraditionalChinese(aLocale))
- return OUString(FALLBACKFONT_UI_SANS_CHINTRD);
- else if (MsLangId::isSimplifiedChinese(aLocale))
- return OUString(FALLBACKFONT_UI_SANS_CHINSIM);
- else if ( aLocale.Language == "ja" )
+ else if ( aLanguage == "ja" )
{
// we need localized names for japanese fonts
const sal_Unicode aMSGothic[] = { 0xFF2D, 0xFF33, ' ', 0x30B4, 0x30B7, 0x30C3, 0x30AF, 0 };
@@ -331,6 +328,14 @@ OUString DefaultFontConfiguration::getUserInterfaceFont( const Locale& rLocale )
return aFallBackJapaneseLocalized.makeStringAndClear();
}
+ else
+ {
+ Locale aLocale( aLanguageTag.getLocale());
+ if (MsLangId::isTraditionalChinese(aLocale))
+ return OUString(FALLBACKFONT_UI_SANS_CHINTRD);
+ else if (MsLangId::isSimplifiedChinese(aLocale))
+ return OUString(FALLBACKFONT_UI_SANS_CHINSIM);
+ }
return OUString(FALLBACKFONT_UI_SANS);
}
@@ -1125,7 +1130,8 @@ void FontSubstConfiguration::readLocaleSubst( const OUString& rBcp47 ) const
}
}
-const FontNameAttr* FontSubstConfiguration::getSubstInfo( const OUString& rFontName, const Locale& rLocale ) const
+const FontNameAttr* FontSubstConfiguration::getSubstInfo( const OUString& rFontName,
+ const LanguageTag& rLanguageTag ) const
{
if( rFontName.isEmpty() )
return NULL;
@@ -1136,7 +1142,7 @@ const FontNameAttr* FontSubstConfiguration::getSubstInfo( const OUString& rFontN
FontNameAttr aSearchAttr;
aSearchAttr.Name = aSearchFont;
- LanguageTag aLanguageTag( rLocale);
+ LanguageTag aLanguageTag( rLanguageTag);
if( aLanguageTag.isSystemLocale() )
aLanguageTag = SvtSysLocale().GetUILanguageTag();
diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
index 141207150ff7..14ab944a79c9 100644
--- a/vcl/source/app/settings.cxx
+++ b/vcl/source/app/settings.cxx
@@ -377,7 +377,7 @@ void ImplStyleData::SetStandardStyles()
Font aStdFont( FAMILY_SWISS, Size( 0, 8 ) );
aStdFont.SetCharSet( osl_getThreadTextEncoding() );
aStdFont.SetWeight( WEIGHT_NORMAL );
- aStdFont.SetName( utl::DefaultFontConfiguration::get().getUserInterfaceFont(com::sun::star::lang::Locale( OUString( "en" ), OUString(), OUString() ) ) );
+ aStdFont.SetName( utl::DefaultFontConfiguration::get().getUserInterfaceFont( LanguageTag("en")) );
maAppFont = aStdFont;
maHelpFont = aStdFont;
maMenuFont = aStdFont;
diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx
index 8c657031b01d..8f6717672822 100644
--- a/vcl/source/gdi/outdev3.cxx
+++ b/vcl/source/gdi/outdev3.cxx
@@ -426,19 +426,14 @@ static void ImplFontSubstitute( OUString& rFontName,
Font OutputDevice::GetDefaultFont( sal_uInt16 nType, LanguageType eLang,
sal_uLong nFlags, const OutputDevice* pOutDev )
{
- com::sun::star::lang::Locale aLocale;
- if( eLang == LANGUAGE_NONE || eLang == LANGUAGE_SYSTEM || eLang == LANGUAGE_DONTKNOW )
- {
- aLocale = Application::GetSettings().GetUILanguageTag().getLocale();
- }
- else
- {
- aLocale = LanguageTag( eLang ).getLocale();
- }
+ LanguageTag aLanguageTag(
+ ( eLang == LANGUAGE_NONE || eLang == LANGUAGE_SYSTEM || eLang == LANGUAGE_DONTKNOW ) ?
+ Application::GetSettings().GetUILanguageTag() :
+ LanguageTag( eLang ));
utl::DefaultFontConfiguration& rDefaults = utl::DefaultFontConfiguration::get();
- String aSearch = rDefaults.getUserInterfaceFont( aLocale ); // ensure a fallback
- String aDefault = rDefaults.getDefaultFont( aLocale, nType );
+ String aSearch = rDefaults.getUserInterfaceFont( aLanguageTag ); // ensure a fallback
+ String aDefault = rDefaults.getDefaultFont( aLanguageTag, nType );
if( aDefault.Len() )
aSearch = aDefault;
@@ -1895,23 +1890,23 @@ ImplDevFontListData* ImplDevFontList::FindDefaultFont() const
// try to find one of the default fonts of the
// UNICODE, SANSSERIF, SERIF or FIXED default font lists
const DefaultFontConfiguration& rDefaults = DefaultFontConfiguration::get();
- com::sun::star::lang::Locale aLocale( OUString( "en" ), OUString(), OUString() );
- String aFontname = rDefaults.getDefaultFont( aLocale, DEFAULTFONT_SANS_UNICODE );
+ LanguageTag aLanguageTag( OUString( "en"));
+ String aFontname = rDefaults.getDefaultFont( aLanguageTag, DEFAULTFONT_SANS_UNICODE );
ImplDevFontListData* pFoundData = ImplFindByTokenNames( aFontname );
if( pFoundData )
return pFoundData;
- aFontname = rDefaults.getDefaultFont( aLocale, DEFAULTFONT_SANS );
+ aFontname = rDefaults.getDefaultFont( aLanguageTag, DEFAULTFONT_SANS );
pFoundData = ImplFindByTokenNames( aFontname );
if( pFoundData )
return pFoundData;
- aFontname = rDefaults.getDefaultFont( aLocale, DEFAULTFONT_SERIF );
+ aFontname = rDefaults.getDefaultFont( aLanguageTag, DEFAULTFONT_SERIF );
pFoundData = ImplFindByTokenNames( aFontname );
if( pFoundData )
return pFoundData;
- aFontname = rDefaults.getDefaultFont( aLocale, DEFAULTFONT_FIXED );
+ aFontname = rDefaults.getDefaultFont( aLanguageTag, DEFAULTFONT_FIXED );
pFoundData = ImplFindByTokenNames( aFontname );
if( pFoundData )
return pFoundData;
@@ -2559,8 +2554,8 @@ ImplDevFontListData* ImplDevFontList::ImplFindByFont( FontSelectPattern& rFSD,
// if a target symbol font is not available use a default symbol font
if( rFSD.IsSymbolFont() )
{
- com::sun::star::lang::Locale aDefaultLocale( OUString( "en" ), OUString(), OUString() );
- aSearchName = DefaultFontConfiguration::get().getDefaultFont( aDefaultLocale, DEFAULTFONT_SYMBOL );
+ LanguageTag aDefaultLanguageTag( OUString( "en"));
+ aSearchName = DefaultFontConfiguration::get().getDefaultFont( aDefaultLanguageTag, DEFAULTFONT_SYMBOL );
ImplDevFontListData* pFoundData = ImplFindByTokenNames( aSearchName );
if( pFoundData )
return pFoundData;
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 2125cda2c56b..2a7440ae16ef 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -470,7 +470,7 @@ void Window::ImplUpdateGlobalSettings( AllSettings& rSettings, sal_Bool bCallHdl
if ( !bUseSystemFont )
{
ImplInitFontList();
- String aConfigFont = utl::DefaultFontConfiguration::get().getUserInterfaceFont( rSettings.GetUILanguageTag().getLocale() );
+ String aConfigFont = utl::DefaultFontConfiguration::get().getUserInterfaceFont( rSettings.GetUILanguageTag() );
sal_Int32 nIndex = 0;
while( nIndex != -1 )
{