diff options
author | Caolán McNamara <caolanm@redhat.com> | 2011-10-19 16:03:29 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2011-10-19 16:04:01 +0100 |
commit | 3f9a28f1f704967446b411b3b7e176deeb78ca83 (patch) | |
tree | 9559cac448c3af810936e4ada09e2216ff5ca444 | |
parent | 4ea86b46768c8309a7c259f713fd6d3c8d7abc28 (diff) |
Resolves: fdo#41556 font sub cache of nameA => nameB is too simplistic
-rwxr-xr-x | vcl/source/gdi/outdev3.cxx | 2 | ||||
-rw-r--r-- | vcl/unx/generic/gdi/salgdi3.cxx | 21 |
2 files changed, 6 insertions, 17 deletions
diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx index 4d21f5d0ec00..b0f59cd91b04 100755 --- a/vcl/source/gdi/outdev3.cxx +++ b/vcl/source/gdi/outdev3.cxx @@ -3304,7 +3304,6 @@ ImplFontMetricData::ImplFontMetricData( const ImplFontSelectData& rFontSelData ) { // initialize the members provided by the font request mnWidth = rFontSelData.mnWidth; - mnSlant = rFontSelData.GetSlant(); mnOrientation = sal::static_int_cast<short>(rFontSelData.mnOrientation); // intialize the used font name @@ -3329,6 +3328,7 @@ ImplFontMetricData::ImplFontMetricData( const ImplFontSelectData& rFontSelData ) mnDescent = 0; mnIntLeading = 0; mnExtLeading = 0; + mnSlant = 0; mnMinKashida = 0; // reset metrics that are usually derived from the measurements diff --git a/vcl/unx/generic/gdi/salgdi3.cxx b/vcl/unx/generic/gdi/salgdi3.cxx index 7c94d40b5949..0ced0200b194 100644 --- a/vcl/unx/generic/gdi/salgdi3.cxx +++ b/vcl/unx/generic/gdi/salgdi3.cxx @@ -847,11 +847,6 @@ class FcPreMatchSubstititution { public: bool FindFontSubstitute( ImplFontSelectData& ) const; - -private: - typedef ::boost::unordered_map< ::rtl::OUString, ::rtl::OUString, ::rtl::OUStringHash > - CachedFontMapType; - mutable CachedFontMapType maCachedFontMap; }; class FcGlyphFallbackSubstititution @@ -945,20 +940,14 @@ bool FcPreMatchSubstititution::FindFontSubstitute( ImplFontSelectData &rFontSelD || 0 == rFontSelData.maSearchName.CompareIgnoreCaseToAscii( "opensymbol", 10) ) return false; - CachedFontMapType::const_iterator itr = maCachedFontMap.find(rFontSelData.maTargetName); - if (itr != maCachedFontMap.end()) - { - // Cached substitution pair - rFontSelData.maSearchName = itr->second; - return true; - } - + //Note: see fdo#41556 if you feel compelled to cache the results here, + //remember that fontconfig can return e.g. an italic font for a non-italic + //input and/or different fonts depending on fontsize, bold, etc settings so + //don't cache just on the name, cache on all the input and be don't just + //return the original selection data with the fontname updated rtl::OUString aDummy; const ImplFontSelectData aOut = GetFcSubstitute( rFontSelData, aDummy ); - maCachedFontMap.insert( - CachedFontMapType::value_type(rFontSelData.maTargetName, aOut.maSearchName)); - if( !aOut.maSearchName.Len() ) return false; |