From 375ba1f096d620518336a807c042b386b1bd33a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Thu, 27 Oct 2011 15:16:08 +0100 Subject: [PATCH] adjust patch to apply --- ...65-handle-that-FreeSerif-lacks-some-.patch | 146 ++++++++---------- ...56-font-sub-cache-of-nameA-nameB-is-.patch | 76 --------- libreoffice.spec | 6 +- 3 files changed, 66 insertions(+), 162 deletions(-) delete mode 100644 0001-Resolves-fdo-41556-font-sub-cache-of-nameA-nameB-is-.patch diff --git a/0001-Resolves-fdo-32665-handle-that-FreeSerif-lacks-some-.patch b/0001-Resolves-fdo-32665-handle-that-FreeSerif-lacks-some-.patch index 62c19c7..afc626d 100644 --- a/0001-Resolves-fdo-32665-handle-that-FreeSerif-lacks-some-.patch +++ b/0001-Resolves-fdo-32665-handle-that-FreeSerif-lacks-some-.patch @@ -23,36 +23,36 @@ way there by excluding such cases from the caches. diff --git a/vcl/generic/fontmanager/fontconfig.cxx b/vcl/generic/fontmanager/fontconfig.cxx index be91349..a4f5f7f 100644 ---- a/vcl/generic/fontmanager/fontconfig.cxx -+++ b/vcl/generic/fontmanager/fontconfig.cxx -@@ -68,6 +68,9 @@ using namespace psp; - #ifndef FC_EMBOLDEN - #define FC_EMBOLDEN "embolden" - #endif -+#ifndef FC_MATRIX -+ #define FC_MATRIX "matrix" -+#endif - #ifndef FC_FONTFORMAT - #define FC_FONTFORMAT "fontformat" - #endif -@@ -747,7 +750,7 @@ static void addtopattern(FcPattern *pPattern, +--- a/vcl/unx/source/fontmanager/fontconfig.cxx ++++ b/vcl/unx/source/fontmanager/fontconfig.cxx +@@ -68,6 +68,9 @@ + #ifndef FC_EMBOLDEN + #define FC_EMBOLDEN "embolden" + #endif ++ #ifndef FC_MATRIX ++ #define FC_MATRIX "matrix" ++ #endif + #ifndef FC_FONTFORMAT + #define FC_FONTFORMAT "fontformat" + #endif +@@ -1260,7 +1263,7 @@ rtl::OUString PrintFontManager::Substitute(const rtl::OUString& rFontName, rtl::OUString& rMissingCodes, const rtl::OString &rLangAttrib, - FontItalic &rItalic, FontWeight &rWeight, -- FontWidth &rWidth, FontPitch &rPitch) const -+ FontWidth &rWidth, FontPitch &rPitch, bool &rEmbolden, ItalicMatrix &rMatrix) const + italic::type &rItalic, weight::type &rWeight, +- width::type &rWidth, pitch::type &rPitch) const ++ width::type &rWidth, pitch::type &rPitch, bool &rEmbolden, ItalicMatrix &rMatrix) const { rtl::OUString aName; FontCfgWrapper& rWrapper = FontCfgWrapper::get(); -@@ -834,6 +837,17 @@ rtl::OUString PrintFontManager::Substitute(const rtl::OUString& rFontName, +@@ -1353,6 +1356,17 @@ rPitch = convertSpacing(val); - if (FcResultMatch == FcPatternGetInteger(pSet->fonts[0], FC_WIDTH, 0, &val)) + if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_WIDTH, 0, &val)) rWidth = convertWidth(val); + FcBool bEmbolden; -+ if (FcResultMatch == FcPatternGetBool(pSet->fonts[0], FC_EMBOLDEN, 0, &bEmbolden)) ++ if (FcResultMatch == rWrapper.FcPatternGetBool(pSet->fonts[0], FC_EMBOLDEN, 0, &bEmbolden)) + rEmbolden = bEmbolden; + FcMatrix *pMatrix = 0; -+ if (FcResultMatch == FcPatternGetMatrix(pSet->fonts[0], FC_MATRIX, 0, &pMatrix)) ++ if (FcResultMatch == rWrapper.FcPatternGetMatrix(pSet->fonts[0], FC_MATRIX, 0, &pMatrix)) + { + rMatrix.xx = pMatrix->xx; + rMatrix.xy = pMatrix->xy; @@ -62,39 +62,30 @@ index be91349..a4f5f7f 100644 } // update rMissingCodes by removing resolved unicodes -@@ -844,7 +858,7 @@ rtl::OUString PrintFontManager::Substitute(const rtl::OUString& rFontName, - FcCharSet* unicodes; - if (!FcPatternGetCharSet(pSet->fonts[0], FC_CHARSET, 0, &unicodes)) - { -- for( sal_Int32 nStrIndex = 0; nStrIndex < rMissingCodes.getLength(); ) -+ for( sal_Int32 nStrIndex = 0; nStrIndex < rMissingCodes.getLength(); ) - { - // also handle unicode surrogates - const sal_uInt32 nCode = rMissingCodes.iterateCodePoints( &nStrIndex ); diff --git a/vcl/generic/fontmanager/fontsubst.cxx b/vcl/generic/fontmanager/fontsubst.cxx index 3bf2d07..2d187b1 100644 ---- a/vcl/generic/fontmanager/fontsubst.cxx -+++ b/vcl/generic/fontmanager/fontsubst.cxx -@@ -127,10 +127,14 @@ static ImplFontSelectData GetFcSubstitute(const ImplFontSelectData &rFontSelData - FontWeight eWeight = rFontSelData.GetWeight(); - FontWidth eWidth = rFontSelData.GetWidthType(); - FontPitch ePitch = rFontSelData.GetPitch(); +--- a/vcl/unx/source/gdi/salgdi3.cxx ++++ b/vcl/unx/source/gdi/salgdi3.cxx +@@ -1526,8 +1526,14 @@ + } + } + + bool bEmbolden = rFontSelData.mbEmbolden; + ItalicMatrix aMatrix = rFontSelData.maItalicMatrix; - ++ const psp::PrintFontManager& rMgr = psp::PrintFontManager::get(); - aRet.maSearchName = rMgr.Substitute( rFontSelData.maTargetName, rMissingCodes, aLangAttrib, eItalic, eWeight, eWidth, ePitch); + aRet.maSearchName = rMgr.Substitute( rFontSelData.maTargetName, rMissingCodes, aLangAttrib, eItalic, eWeight, eWidth, ePitch, bEmbolden, aMatrix ); - ++ + aRet.maItalicMatrix = aMatrix; + aRet.mbEmbolden = bEmbolden; - aRet.meItalic = eItalic; - aRet.meWeight = eWeight; - aRet.meWidthType = eWidth; + + switch (eItalic) + { diff --git a/vcl/generic/glyphs/glyphcache.cxx b/vcl/generic/glyphs/glyphcache.cxx index 5322b65..fa712bb 100644 ---- a/vcl/generic/glyphs/glyphcache.cxx -+++ b/vcl/generic/glyphs/glyphcache.cxx +--- a/vcl/source/glyphs/glyphcache.cxx ++++ b/vcl/source/glyphs/glyphcache.cxx @@ -163,6 +163,13 @@ bool GlyphCache::IFSD_Equal::operator()( const ImplFontSelectData& rA, const Imp != STRING_NOTFOUND) && rA.maTargetName != rB.maTargetName) return false; @@ -111,31 +102,8 @@ index 5322b65..fa712bb 100644 diff --git a/vcl/inc/outfont.hxx b/vcl/inc/outfont.hxx index faf2b00..857d944 100644 ---- a/vcl/inc/outfont.hxx -+++ b/vcl/inc/outfont.hxx -@@ -156,6 +156,22 @@ friend class ImplDevFontListData; - // - ImplFontSelectData - - // ---------------------- - -+struct ItalicMatrix -+{ -+ double xx, xy, yx, yy; -+ ItalicMatrix() : xx(1), xy(0), yx(0), yy(1) {} -+}; -+ -+inline bool operator ==(const ItalicMatrix& a, const ItalicMatrix& b) -+{ -+ return a.xx == b.xx && a.xy == b.xy && a.yx == b.yx && a.yy == b.yy; -+} -+ -+inline bool operator !=(const ItalicMatrix& a, const ItalicMatrix& b) -+{ -+ return a.xx != b.xx || a.xy != b.xy || a.yx != b.yx || a.yy != b.yy; -+} -+ - class ImplFontSelectData : public ImplFontAttributes - { - public: +--- a/vcl/inc/vcl/outfont.hxx ++++ b/vcl/inc/vcl/outfont.hxx @@ -175,6 +191,9 @@ public: // TODO: change to private bool mbVertical; // vertical mode of requested font bool mbNonAntialiased; // true if antialiasing is disabled @@ -150,20 +118,12 @@ diff --git a/vcl/inc/vcl/fontmanager.hxx b/vcl/inc/vcl/fontmanager.hxx index 0af5e14..4a110ad 100644 --- a/vcl/inc/vcl/fontmanager.hxx +++ b/vcl/inc/vcl/fontmanager.hxx -@@ -37,6 +37,7 @@ - #include "vcl/dllapi.h" - #include "vcl/helper.hxx" - #include "vcl/vclenum.hxx" -+#include "outfont.hxx" - #include "com/sun/star/lang/Locale.hpp" - - #include -@@ -649,7 +650,7 @@ public: +@@ -737,7 +737,7 @@ rtl::OUString Substitute( const rtl::OUString& rFontName, rtl::OUString& rMissingCodes, - const rtl::OString& rLangAttrib, FontItalic& rItalic, FontWeight& rWeight, -- FontWidth& rWidth, FontPitch& rPitch) const; -+ FontWidth& rWidth, FontPitch& rPitch, bool &rEmboldening, ItalicMatrix &rMatrix) const; + const rtl::OString& rLangAttrib, italic::type& rItalic, weight::type& rWeight, +- width::type& rWidth, pitch::type& rPitch) const; ++ width::type& rWidth, pitch::type& rPitch, bool &rEmboldening, ItalicMatrix &rMatrix) const; bool hasFontconfig() const { return m_bFontconfigSuccess; } int FreeTypeCharIndex( void *pFace, sal_uInt32 aChar ); @@ -280,7 +240,29 @@ index b0f59cd..3cc438c 100755 + return true; } - --- -1.7.6.4 +--- a/vcl/inc/vcl/vclenum.hxx 2011-10-27 15:10:10.402317337 +0100 ++++ b/vcl/inc/vcl/vclenum.hxx 2011-10-27 15:10:29.561528762 +0100 +@@ -326,6 +326,22 @@ + + #endif + ++struct ItalicMatrix ++{ ++ double xx, xy, yx, yy; ++ ItalicMatrix() : xx(1), xy(0), yx(0), yy(1) {} ++}; ++ ++inline bool operator ==(const ItalicMatrix& a, const ItalicMatrix& b) ++{ ++ return a.xx == b.xx && a.xy == b.xy && a.yx == b.yx && a.yy == b.yy; ++} ++ ++inline bool operator !=(const ItalicMatrix& a, const ItalicMatrix& b) ++{ ++ return a.xx != b.xx || a.xy != b.xy || a.yx != b.yx || a.yy != b.yy; ++} ++ + #endif // _VCL_VCLENUM_HXX + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/0001-Resolves-fdo-41556-font-sub-cache-of-nameA-nameB-is-.patch b/0001-Resolves-fdo-41556-font-sub-cache-of-nameA-nameB-is-.patch deleted file mode 100644 index 5668691..0000000 --- a/0001-Resolves-fdo-41556-font-sub-cache-of-nameA-nameB-is-.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 3f9a28f1f704967446b411b3b7e176deeb78ca83 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Wed, 19 Oct 2011 16:03:29 +0100 -Subject: [PATCH] Resolves: fdo#41556 font sub cache of nameA => nameB is too - simplistic - ---- - vcl/source/gdi/outdev3.cxx | 2 +- - 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 4d21f5d..b0f59cd 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(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 7c94d40..0ced020 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; - --- -1.7.6.4 - diff --git a/libreoffice.spec b/libreoffice.spec index 5523ad6..b65a14d 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -123,8 +123,7 @@ Patch27: 0001-Related-fdo-37195-migrationoo3-not-registered.patch Patch28: 0001-Resolves-rhbz-738255-avoid-crash-on-NULL-pointer.patch Patch29: 0001-avoid-using-com.sun.org-apis.patch Patch30: 0001-add-Oracle-Java-1.7.0-recognition.patch -Patch31: 0001-Resolves-fdo-41556-font-sub-cache-of-nameA-nameB-is-.patch -Patch32: 0001-Resolves-fdo-32665-handle-that-FreeSerif-lacks-some-.patch +Patch31: 0001-Resolves-fdo-32665-handle-that-FreeSerif-lacks-some-.patch %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} %define instdir %{_libdir} @@ -797,8 +796,7 @@ mv -f redhat.soc extras/source/palettes/standard.soc %patch28 -p1 -b .rhbz738255-avoid-crash-on-NULL-pointer.patch %patch29 -p1 -b .avoid-using-com.sun.org-apis.patch %patch30 -p1 -b .add-Oracle-Java-1.7.0-recognition.patch -%patch31 -p1 -b .fdo41556-font-sub-cache-of-nameA-nameB-is-.patch -%patch32 -p1 -b .fdo32665-handle-that-FreeSerif-lacks-some-.patch +%patch31 -p1 -b .fdo32665-handle-that-FreeSerif-lacks-some-.patch # these are horribly incomplete--empty translations and copied english # strings with spattering of translated strings