adjust patch to apply

f41
Caolán McNamara 13 years ago
parent 81d48c0b6c
commit 375ba1f096

@ -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 <vector>
@@ -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 );
@ -281,6 +241,28 @@ 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: */

@ -1,76 +0,0 @@
From 3f9a28f1f704967446b411b3b7e176deeb78ca83 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
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<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 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

@ -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

Loading…
Cancel
Save