diff options
author | Eike Rathke <erack@redhat.com> | 2013-07-12 00:08:32 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2013-07-12 00:10:13 +0200 |
commit | f66f896657967c0ce3c75680e956cad918a632d3 (patch) | |
tree | 3ffeae5734c351e290e8dbfb5f5cc7441a64c731 | |
parent | 1254a00da0fff439c8f8ac1697da7a96e10b1705 (diff) |
DefaultFontConfiguration and FontSubstConfiguration with LanguageTag
Change-Id: I6c111392537d114358d0574f2dbdf40f684b5103
-rw-r--r-- | include/unotools/fontcfg.hxx | 10 | ||||
-rw-r--r-- | unotools/source/config/fontcfg.cxx | 68 | ||||
-rw-r--r-- | vcl/source/app/settings.cxx | 2 | ||||
-rw-r--r-- | vcl/source/gdi/outdev3.cxx | 31 | ||||
-rw-r--r-- | vcl/source/window/window.cxx | 2 |
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 ) { |