rpms/openoffice.org/devel openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch, 1.5, 1.6 openoffice.org.spec, 1.2142, 1.2143
Caolan McNamara
caolanm at fedoraproject.org
Tue Feb 9 12:44:37 UTC 2010
Author: caolanm
Update of /cvs/pkgs/rpms/openoffice.org/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv14724/devel
Modified Files:
openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch
openoffice.org.spec
Log Message:
Resolves: rhbz#445588 improve same name substitution
openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch:
inc/vcl/fontmanager.hxx | 4 -
inc/vcl/outfont.hxx | 10 +-
source/gdi/outdev3.cxx | 37 ++++++----
unx/source/fontmanager/fontconfig.cxx | 124 ++++++++++++++++++++++------------
unx/source/gdi/salgdi3.cxx | 93 +++++++++++++++++++++----
5 files changed, 191 insertions(+), 77 deletions(-)
Index: openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch
===================================================================
RCS file: /cvs/pkgs/rpms/openoffice.org/devel/openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch 10 Oct 2009 15:48:45 -0000 1.5
+++ openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch 9 Feb 2010 12:44:36 -0000 1.6
@@ -1,7 +1,7 @@
-diff -ru vcl/inc/vcl/fontmanager.hxx vcl/inc/vcl/fontmanager.hxx
---- openoffice.org.orig/vcl/inc/vcl/fontmanager.hxx 2008-05-26 15:48:28.000000000 +0100
-+++ openoffice.org/vcl/inc/vcl/fontmanager.hxx 2008-05-26 15:50:13.000000000 +0100
-@@ -765,8 +765,8 @@
+diff -r 2da10c20ba01 vcl/inc/vcl/fontmanager.hxx
+--- a/vcl/inc/vcl/fontmanager.hxx Mon Feb 08 10:49:42 2010 +0000
++++ b/vcl/inc/vcl/fontmanager.hxx Tue Feb 09 12:05:15 2010 +0000
+@@ -759,8 +759,8 @@
FontConfigHints getFontConfigHints(const FastPrintFontInfo& rInfo, int nSize, void (*subcallback)(void *));
rtl::OUString Substitute( const rtl::OUString& rFontName, rtl::OUString& rMissingCodes,
@@ -12,10 +12,126 @@ diff -ru vcl/inc/vcl/fontmanager.hxx vcl
bool hasFontconfig() const { return m_bFontconfigSuccess; }
int FreeTypeCharIndex( void *pFace, sal_uInt32 aChar );
-diff -ru vcl/unx/source/fontmanager/fontconfig.cxx vcl/unx/source/fontmanager/fontconfig.cxx
---- openoffice.org.orig/vcl/unx/source/fontmanager/fontconfig.cxx 2008-05-26 15:48:28.000000000 +0100
-+++ openoffice.org/vcl/unx/source/fontmanager/fontconfig.cxx 2008-05-26 16:07:30.000000000 +0100
-@@ -560,6 +560,72 @@
+diff -r 2da10c20ba01 vcl/inc/vcl/outfont.hxx
+--- a/vcl/inc/vcl/outfont.hxx Mon Feb 08 10:49:42 2010 +0000
++++ b/vcl/inc/vcl/outfont.hxx Tue Feb 09 12:05:15 2010 +0000
+@@ -339,15 +339,17 @@
+ short mnOrientation; // text angle in 3600 system
+ bool mbInit; // true if maMetric member is valid
+
+- void AddFallbackForUnicode( sal_UCS4, const String& rFontName );
+- bool GetFallbackForUnicode( sal_UCS4, String* pFontName ) const;
+- void IgnoreFallbackForUnicode( sal_UCS4, const String& rFontName );
++ void AddFallbackForUnicode( sal_UCS4, FontWeight eWeight, const String& rFontName );
++ bool GetFallbackForUnicode( sal_UCS4, FontWeight eWeight, String* pFontName ) const;
++ void IgnoreFallbackForUnicode( sal_UCS4, FontWeight eWeight, const String& rFontName );
+
+ private:
+ // cache of Unicode characters and replacement font names
+ // TODO: a fallback map can be shared with many other ImplFontEntries
+ // TODO: at least the ones which just differ in orientation, stretching or height
+- typedef ::std::hash_map<sal_UCS4,String> UnicodeFallbackList;
++ typedef ::std::pair<sal_UCS4,FontWeight> CharDescr;
++ struct CharDescr_Hash{ size_t operator()( const CharDescr& ) const; };
++ typedef ::std::hash_map<CharDescr,String,CharDescr_Hash> UnicodeFallbackList;
+ UnicodeFallbackList* mpUnicodeFallbackList;
+ };
+
+diff -r 2da10c20ba01 vcl/source/gdi/outdev3.cxx
+--- a/vcl/source/gdi/outdev3.cxx Mon Feb 08 10:49:42 2010 +0000
++++ b/vcl/source/gdi/outdev3.cxx Tue Feb 09 12:05:15 2010 +0000
+@@ -995,21 +995,28 @@
+
+ // -----------------------------------------------------------------------
+
+-inline void ImplFontEntry::AddFallbackForUnicode( sal_UCS4 cChar, const String& rFontName )
++size_t ImplFontEntry::CharDescr_Hash::operator()( const CharDescr& rData ) const
++{
++ std::hash<sal_UCS4> a;
++ std::hash<int > b;
++ return a(rData.first) | b(rData.second);
++}
++
++inline void ImplFontEntry::AddFallbackForUnicode( sal_UCS4 cChar, FontWeight eWeight, const String& rFontName )
+ {
+ if( !mpUnicodeFallbackList )
+ mpUnicodeFallbackList = new UnicodeFallbackList;
+- (*mpUnicodeFallbackList)[cChar] = rFontName;
+-}
+-
+-// -----------------------------------------------------------------------
+-
+-inline bool ImplFontEntry::GetFallbackForUnicode( sal_UCS4 cChar, String* pFontName ) const
++ (*mpUnicodeFallbackList)[CharDescr(cChar, eWeight)] = rFontName;
++}
++
++// -----------------------------------------------------------------------
++
++inline bool ImplFontEntry::GetFallbackForUnicode( sal_UCS4 cChar, FontWeight eWeight, String* pFontName ) const
+ {
+ if( !mpUnicodeFallbackList )
+ return false;
+
+- UnicodeFallbackList::const_iterator it = mpUnicodeFallbackList->find( cChar );
++ UnicodeFallbackList::const_iterator it = mpUnicodeFallbackList->find( CharDescr(cChar, eWeight) );
+ if( it == mpUnicodeFallbackList->end() )
+ return false;
+
+@@ -1019,10 +1026,10 @@
+
+ // -----------------------------------------------------------------------
+
+-inline void ImplFontEntry::IgnoreFallbackForUnicode( sal_UCS4 cChar, const String& rFontName )
++inline void ImplFontEntry::IgnoreFallbackForUnicode( sal_UCS4 cChar, FontWeight eWeight, const String& rFontName )
+ {
+ // DBG_ASSERT( mpUnicodeFallbackList, "ImplFontEntry::IgnoreFallbackForUnicode no list" );
+- UnicodeFallbackList::iterator it = mpUnicodeFallbackList->find( cChar );
++ UnicodeFallbackList::iterator it = mpUnicodeFallbackList->find( CharDescr(cChar, eWeight) );
+ // DBG_ASSERT( it != mpUnicodeFallbackList->end(), "ImplFontEntry::IgnoreFallbackForUnicode no match" );
+ if( it == mpUnicodeFallbackList->end() )
+ return;
+@@ -1417,7 +1424,7 @@
+ while( nStrIndex < rMissingCodes.getLength() )
+ {
+ cChar = rMissingCodes.iterateCodePoints( &nStrIndex );
+- bCached = rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, &rFontSelData.maSearchName );
++ bCached = rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, rFontSelData.GetWeight(), &rFontSelData.maSearchName );
+ // ignore entries which don't have a fallback
+ if( !bCached || (rFontSelData.maSearchName.Len() != 0) )
+ break;
+@@ -1433,7 +1440,7 @@
+ while( nStrIndex < rMissingCodes.getLength() )
+ {
+ cChar = rMissingCodes.iterateCodePoints( &nStrIndex );
+- bCached = rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, &aFontName );
++ bCached = rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, rFontSelData.GetWeight(), &aFontName );
+ if( !bCached || (rFontSelData.maSearchName != aFontName) )
+ pRemainingCodes[ nRemainingLength++ ] = cChar;
+ }
+@@ -1452,8 +1459,8 @@
+ // cache the result even if there was no match
+ for(;;)
+ {
+- if( !rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, &rFontSelData.maSearchName ) )
+- rFontSelData.mpFontEntry->AddFallbackForUnicode( cChar, rFontSelData.maSearchName );
++ if( !rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, rFontSelData.GetWeight(), &rFontSelData.maSearchName ) )
++ rFontSelData.mpFontEntry->AddFallbackForUnicode( cChar, rFontSelData.GetWeight(), rFontSelData.maSearchName );
+ if( nStrIndex >= aOldMissingCodes.getLength() )
+ break;
+ cChar = aOldMissingCodes.iterateCodePoints( &nStrIndex );
+@@ -1464,7 +1471,7 @@
+ for( nStrIndex = 0; nStrIndex < rMissingCodes.getLength(); )
+ {
+ cChar = rMissingCodes.iterateCodePoints( &nStrIndex );
+- rFontSelData.mpFontEntry->IgnoreFallbackForUnicode( cChar, rFontSelData.maSearchName );
++ rFontSelData.mpFontEntry->IgnoreFallbackForUnicode( cChar, rFontSelData.GetWeight(), rFontSelData.maSearchName );
+ }
+ }
+ }
+diff -r 2da10c20ba01 vcl/unx/source/fontmanager/fontconfig.cxx
+--- a/vcl/unx/source/fontmanager/fontconfig.cxx Mon Feb 08 10:49:42 2010 +0000
++++ b/vcl/unx/source/fontmanager/fontconfig.cxx Tue Feb 09 12:05:15 2010 +0000
+@@ -572,6 +572,72 @@
return true;
}
@@ -88,7 +204,7 @@ diff -ru vcl/unx/source/fontmanager/font
int PrintFontManager::countFontconfigFonts()
{
int nFonts = 0;
-@@ -687,47 +753,11 @@
+@@ -699,47 +765,11 @@
pUpdate->m_nFamilyName = nFamilyName;
}
if( eWeightRes == FcResultMatch )
@@ -139,7 +255,7 @@ diff -ru vcl/unx/source/fontmanager/font
if( eStyleRes == FcResultMatch )
{
pUpdate->m_aStyleName = OStringToOUString( OString( (sal_Char*)style ), RTL_TEXTENCODING_UTF8 );
-@@ -867,8 +897,8 @@
+@@ -879,8 +909,8 @@
rtl::OUString PrintFontManager::Substitute(const rtl::OUString& rFontName,
rtl::OUString& rMissingCodes, const rtl::OString &rLangAttrib,
@@ -150,7 +266,7 @@ diff -ru vcl/unx/source/fontmanager/font
{
rtl::OUString aName;
FontCfgWrapper& rWrapper = FontCfgWrapper::get();
-@@ -903,7 +933,7 @@
+@@ -915,7 +945,7 @@
rWrapper.FcCharSetDestroy( unicodes );
}
@@ -159,28 +275,27 @@ diff -ru vcl/unx/source/fontmanager/font
// query fontconfig for a substitute
rWrapper.FcConfigSubstitute( rWrapper.FcConfigGetCurrent(), pPattern, FcMatchPattern );
-@@ -940,6 +970,17 @@
- if (aI != rWrapper.m_aFontNameToLocalized.end())
- sFamily = aI->second;
+@@ -954,6 +984,16 @@
aName = rtl::OStringToOUString( sFamily, RTL_TEXTENCODING_UTF8 );
-+
-+
-+ int val = 0;
-+ if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_WEIGHT, 0, &val))
-+ rWeight = convertWeight(val);
-+ if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_SLANT, 0, &val))
-+ rItalic = convertSlant(val);
-+ if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_SPACING, 0, &val))
-+ rPitch = convertSpacing(val);
-+ if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_WIDTH, 0, &val))
-+ rWidth = convertWidth(val);
}
++ int val = 0;
++ if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_WEIGHT, 0, &val))
++ rWeight = convertWeight(val);
++ if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_SLANT, 0, &val))
++ rItalic = convertSlant(val);
++ if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_SPACING, 0, &val))
++ rPitch = convertSpacing(val);
++ if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_WIDTH, 0, &val))
++ rWidth = convertWidth(val);
++
// update rMissingCodes by removing resolved unicodes
-diff -ru vcl/unx/source/gdi/salgdi3.cxx vcl/unx/source/gdi/salgdi3.cxx
---- openoffice.org.orig/vcl/unx/source/gdi/salgdi3.cxx 2008-05-26 16:46:52.000000000 +0100
-+++ openoffice.org/vcl/unx/source/gdi/salgdi3.cxx 2008-05-26 16:46:28.000000000 +0100
-@@ -2069,8 +2069,10 @@
+ if( rMissingCodes.getLength() > 0 )
+ {
+diff -r 2da10c20ba01 vcl/unx/source/gdi/salgdi3.cxx
+--- a/vcl/unx/source/gdi/salgdi3.cxx Mon Feb 08 10:49:42 2010 +0000
++++ b/vcl/unx/source/gdi/salgdi3.cxx Tue Feb 09 12:05:15 2010 +0000
+@@ -1876,8 +1876,10 @@
// -----------------------------------------------------------------------
@@ -192,7 +307,7 @@ diff -ru vcl/unx/source/gdi/salgdi3.cxx
const rtl::OString aLangAttrib; //TODO: = MsLangId::convertLanguageToIsoByteString( rFontSelData.meLanguage );
psp::italic::type eItalic = psp::italic::Unknown;
-@@ -2138,7 +2140,72 @@
+@@ -1945,7 +1947,72 @@
}
const psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
@@ -266,7 +381,7 @@ diff -ru vcl/unx/source/gdi/salgdi3.cxx
}
//--------------------------------------------------------------------------
-@@ -2154,20 +2221,19 @@
+@@ -1961,20 +2028,19 @@
return false;
rtl::OUString aDummy;
@@ -292,7 +407,7 @@ diff -ru vcl/unx/source/gdi/salgdi3.cxx
return true;
}
-@@ -2184,21 +2250,20 @@
+@@ -1991,21 +2057,20 @@
|| 0 == rFontSelData.maSearchName.CompareIgnoreCaseToAscii( "opensymbol", 10) )
return false;
Index: openoffice.org.spec
===================================================================
RCS file: /cvs/pkgs/rpms/openoffice.org/devel/openoffice.org.spec,v
retrieving revision 1.2142
retrieving revision 1.2143
diff -u -p -r1.2142 -r1.2143
--- openoffice.org.spec 6 Feb 2010 12:28:15 -0000 1.2142
+++ openoffice.org.spec 9 Feb 2010 12:44:37 -0000 1.2143
@@ -1,6 +1,6 @@
%define oootag OOO320
%define ooomilestone 12
-%define rh_rpm_release 3
+%define rh_rpm_release 4
# rhbz#465664 jar-repacking breaks help by reordering META-INF/MANIFEST.MF
%define __jar_repack %{nil}
@@ -4183,6 +4183,9 @@ fi
%endif
%changelog
+* Sat Feb 06 2010 Caolán McNamara <caolanm at redhat.com> - 1:3.2.0-12.4
+- Resolves: rhbz#445588 improve same name substitution
+
* Sat Feb 06 2010 Caolán McNamara <caolanm at redhat.com> - 1:3.2.0-12.3
- Resolves: rhbz#561989 openoffice.org-3.2.0.ooo109009.sc.tooltipcrash.patch
More information about the scm-commits
mailing list