[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

rpms/openoffice.org/devel openoffice.org-1.9.129.ooo54603.fontconfig.part2.patch, NONE, 1.1 openoffice.org.spec, 1.805, 1.806



Author: caolanm

Update of /cvs/dist/rpms/openoffice.org/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv22037

Modified Files:
	openoffice.org.spec 
Added Files:
	openoffice.org-1.9.129.ooo54603.fontconfig.part2.patch 
Log Message:
store openoffice.org-1.9.129.ooo54603.fontconfig.part2.patch

openoffice.org-1.9.129.ooo54603.fontconfig.part2.patch:
 psprint/inc/psprint/fontmanager.hxx       |    2 -
 psprint/source/fontmanager/fontconfig.cxx |   42 +++++++++++++++++++++++++++++-
 vcl/source/gdi/outdev3.cxx                |   28 ++++++++++----------
 3 files changed, 57 insertions(+), 15 deletions(-)

--- NEW FILE openoffice.org-1.9.129.ooo54603.fontconfig.part2.patch ---
--- OOC680_m7/psprint/inc/psprint/fontmanager.hxx.foo	2006-07-31 05:54:21.000000000 +0100
+++ OOC680_m7/psprint/inc/psprint/fontmanager.hxx	2006-07-31 05:54:36.000000000 +0100
@@ -765,7 +765,7 @@
     bool matchFont( FastPrintFontInfo& rInfo, const com::sun::star::lang::Locale& rLocale );
     FontConfigHints getFontConfigHints(const FastPrintFontInfo& rInfo, int nSize);
 
-    String Substitute(const std::vector<String> &rNames, const std::vector<sal_Unicode> &rGlyphs, 
+    String Substitute(const std::vector<String> &rNames, std::vector<sal_Unicode> &rGlyphs, 
         const ByteString &rLangAttrib, italic::type eItalic, weight::type eWeight, 
         width::type eWidth, pitch::type ePitch) const;
     bool hasFontconfig() const { return m_bFontconfigSuccess; }
--- OOC680_m7/psprint/source/fontmanager/fontconfig.cxx.foo	2006-07-31 05:45:23.000000000 +0100
+++ OOC680_m7/psprint/source/fontmanager/fontconfig.cxx	2006-07-31 05:54:08.000000000 +0100
@@ -97,9 +97,12 @@
     FcFontSet*		(*m_pFcFontSetCreate)();
     FcCharSet*                (*m_pFcCharSetCreate)();
     FcBool                    (*m_pFcCharSetAddChar)(FcCharSet *, FcChar32);
+    FcBool          (*m_pFcCharSetHasChar)(FcCharSet *, FcChar32);
+    void            (*m_pFcCharSetDestroy)(FcCharSet*);
     void			(*m_pFcFontSetDestroy)(FcFontSet*);
     FcBool			(*m_pFcFontSetAdd)(FcFontSet*,FcPattern*);
     void            (*m_pFcPatternReference)(FcPattern*);
+    FcResult        (*m_pFcPatternGetCharSet)(const FcPattern*,const char*,int,FcCharSet**);
     FcResult		(*m_pFcPatternGetString)(const FcPattern*,const char*,int,FcChar8**);
     FcResult		(*m_pFcPatternGetInteger)(const FcPattern*,const char*,int,int*);
     FcResult		(*m_pFcPatternGetDouble)(const FcPattern*,const char*,int,double*);
@@ -169,6 +172,12 @@
     FcBool FcCharSetAddChar(FcCharSet *fcs, FcChar32 ucs4)
     { return m_pFcCharSetAddChar(fcs, ucs4); }
 
+    FcBool FcCharSetHasChar(FcCharSet *fcs, FcChar32 ucs4)
+    { return m_pFcCharSetHasChar(fcs, ucs4); }
+
+    void FcCharSetDestroy( FcCharSet* pSet )
+    { m_pFcCharSetDestroy( pSet );}
+
     void FcFontSetDestroy( FcFontSet* pSet )
     { m_pFcFontSetDestroy( pSet );}
 
@@ -178,6 +187,9 @@
     void FcPatternReference( FcPattern* pPattern )
     { m_pFcPatternReference( pPattern ); }
 
+    FcResult FcPatternGetCharSet( const FcPattern* pPattern, const char* object, int n, FcCharSet** s )
+    { return m_pFcPatternGetCharSet( pPattern, object, n, s ); }
+
     FcResult FcPatternGetString( const FcPattern* pPattern, const char* object, int n, FcChar8** s )
     { return m_pFcPatternGetString( pPattern, object, n, s ); }
 
@@ -263,12 +275,18 @@
         loadSymbol( "FcCharSetCreate" );
     m_pFcCharSetAddChar = (FcBool(*)(FcCharSet*, FcChar32))
         loadSymbol( "FcCharSetAddChar" );
+    m_pFcCharSetHasChar = (FcBool(*)(FcCharSet*, FcChar32))
+        loadSymbol( "FcCharSetHasChar" );
+    m_pFcCharSetDestroy = (void(*)(FcCharSet*))
+        loadSymbol( "FcCharSetDestroy" );
     m_pFcFontSetDestroy = (void(*)(FcFontSet*))
         loadSymbol( "FcFontSetDestroy" );
     m_pFcFontSetAdd = (FcBool(*)(FcFontSet*,FcPattern*))
         loadSymbol( "FcFontSetAdd" );
     m_pFcPatternReference = (void(*)(FcPattern*))
         loadSymbol( "FcPatternReference" );
+    m_pFcPatternGetCharSet = (FcResult(*)(const FcPattern*,const char*,int,FcCharSet**))
+        loadSymbol( "FcPatternGetCharSet" );
     m_pFcPatternGetString = (FcResult(*)(const FcPattern*,const char*,int,FcChar8**))
         loadSymbol( "FcPatternGetString" );
     m_pFcPatternGetInteger = (FcResult(*)(const FcPattern*,const char*,int,int*))
@@ -306,9 +324,12 @@
             m_pFcFontSetCreate				&&
             m_pFcCharSetCreate				&&
             m_pFcCharSetAddChar 			&&
+            m_pFcCharSetHasChar             &&
+            m_pFcCharSetDestroy             &&
             m_pFcFontSetDestroy				&&
             m_pFcFontSetAdd					&&
             m_pFcPatternReference           &&
+			m_pFcPatternGetCharSet			&&
             m_pFcPatternGetString			&&
             m_pFcPatternGetInteger			&&
             m_pFcPatternGetDouble			&&
@@ -675,7 +696,7 @@
 #endif
 }
 
-String PrintFontManager::Substitute(const std::vector<String> &rNames, const std::vector<sal_Unicode> &rGlyphs,
+String PrintFontManager::Substitute(const std::vector<String> &rNames, std::vector<sal_Unicode> &rGlyphs,
         const ByteString &rLangAttrib, italic::type eItalic, weight::type eWeight,
         width::type eWidth, pitch::type ePitch) const
 {
@@ -742,8 +763,27 @@
             FcResult eFileRes = rWrapper.FcPatternGetString( pSet->fonts[0], FC_FAMILY, 0, &family );
             if( eFileRes == FcResultMatch )
                 aName = String( (sal_Char*)family, RTL_TEXTENCODING_UTF8 );
+
+            if (!rGlyphs.empty() )
+            {
+		std::vector<sal_Unicode> aGlyphs;
+                if (rWrapper.FcPatternGetCharSet(pSet->fonts[0], FC_CHARSET, 0, &unicodes) == FcResultMatch)
+                {
+                    std::vector<sal_Unicode>::iterator aGlyphEnd = rGlyphs.end();
+                    for (std::vector<sal_Unicode>::iterator aGlyphIter = rGlyphs.begin();
+                        aGlyphIter != aGlyphEnd; ++aGlyphIter)
+                    {
+                            if (rWrapper.FcCharSetHasChar( unicodes, (FcChar32)*aGlyphIter ))
+				aGlyphs.push_back(*aGlyphIter);
+                    }
+                }
+		rGlyphs.swap(aGlyphs);
+            }
+
         }
     }
+	if (unicodes)
+		rWrapper.FcCharSetDestroy(unicodes);
     rWrapper.FcFontSetDestroy( pSet );
 #endif
     return aName;
--- OOC680_m7/vcl/source/gdi/outdev3.cxx.foo	2006-07-31 05:59:23.000000000 +0100
+++ OOC680_m7/vcl/source/gdi/outdev3.cxx	2006-07-31 06:08:45.000000000 +0100
@@ -2652,7 +2652,7 @@
 
 // -----------------------------------------------------------------------
 
-String GetFcSubstitute(const ImplFontSelectData &rFontSelData, sal_Unicode *pMissingGlyphs=0, int nMissingGlyphs=0)
+String GetFcSubstitute(const ImplFontSelectData &rFontSelData, std::vector<sal_Unicode> &rGlyphs)
 {
     std::vector<String> aNames;
     if( rFontSelData.GetFamilyName().Len() )
@@ -2667,10 +2667,6 @@
         while (nIndex != STRING_NOTFOUND);
     }
 
-    std::vector<sal_Unicode> aGlyphs;
-    for (int i=0; i < nMissingGlyphs; ++i)
-	aGlyphs.push_back(pMissingGlyphs[i]);
-
     ByteString aLangAttrib = MsLangId::convertLanguageToIsoByteString( rFontSelData.meLanguage );
 
     psp::italic::type eItalic = psp::italic::Unknown;
@@ -2737,7 +2733,7 @@
     }
 
     const psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
-    return rMgr.Substitute(aNames, aGlyphs, aLangAttrib, eItalic, eWeight, eWidth, ePitch);
+    return rMgr.Substitute(aNames, rGlyphs, aLangAttrib, eItalic, eWeight, eWidth, ePitch);
 }
 
 // -----------------------------------------------------------------------
@@ -2752,7 +2748,8 @@
         ||  0 == rFontSelData.maSearchName.CompareIgnoreCaseToAscii( "opensymbol", 10) )
         return 0;
 
-    String aName(GetFcSubstitute(rFontSelData));
+    std::vector<sal_Unicode> aDummy;
+    String aName(GetFcSubstitute(rFontSelData, aDummy));
     if (!aName.Len())
         return 0;
 
@@ -3168,17 +3165,21 @@
         cached = true;
     }
 
+    std::vector<sal_Unicode> aGlyphs;
+    for (int i=0; i < nMissingUnicodes; ++i)
+        aGlyphs.push_back(pMissingUnicodes[i]);
+
     // Try cached fallbacks first
-    if ( !symbolFont && (nMissingUnicodes > 0) )
+    if ( !symbolFont && aGlyphs.empty() )
     {
-        aSelData.maSearchName = pOrigFontEntry->GetFallbackForUnicode( pMissingUnicodes[0] );
+        aSelData.maSearchName = pOrigFontEntry->GetFallbackForUnicode( aGlyphs[0] );
         if ( aSelData.maSearchName.Len() )
             cached = true;
     }
 
     if ( !cached )
     {
-        String aName(GetFcSubstitute( aSelData, pMissingUnicodes, nMissingUnicodes ));
+        String aName(GetFcSubstitute( aSelData, aGlyphs ));
       if (aName.Len())
             aSelData.maSearchName = aName;
     }
@@ -3218,10 +3219,11 @@
     // Cache the fallback font for each of the missing Unicode chars
     if ( !symbolFont && aSelData.maSearchName.Len() )
     {
-        for ( int i = 0; i < nMissingUnicodes; i++ )
+        std::vector<sal_Unicode>::const_iterator aEnd = aGlyphs.end();
+        for (std::vector<sal_Unicode>::const_iterator aI = aGlyphs.begin(); aI != aEnd; ++aI)
         {
-            if ( ! pOrigFontEntry->GetFallbackForUnicode(pMissingUnicodes[i]).Len() )
-                pOrigFontEntry->AddFallbackForUnicode( pMissingUnicodes[i], aSelData.maSearchName );
+            if (!pOrigFontEntry->GetFallbackForUnicode(*aI).Len())
+                pOrigFontEntry->AddFallbackForUnicode(*aI, aSelData.maSearchName);
         }
     }
 


Index: openoffice.org.spec
===================================================================
RCS file: /cvs/dist/rpms/openoffice.org/devel/openoffice.org.spec,v
retrieving revision 1.805
retrieving revision 1.806
diff -u -r1.805 -r1.806
--- openoffice.org.spec	29 Jul 2006 20:02:55 -0000	1.805
+++ openoffice.org.spec	31 Jul 2006 08:19:33 -0000	1.806
@@ -127,6 +127,7 @@
 Patch61: openoffice.org-2.0.3.ooo65081.sw.layout.patch
 Patch62: openoffice.org-2.0.3.ooo67781.sc.reloadhiddenrows.patch
 Patch63: workspace.configure18.patch
+Patch64: openoffice.org-1.9.129.ooo54603.fontconfig.part2.patch
 
 %define instdir %{_libdir}/openoffice.org2.0
 
@@ -921,6 +922,7 @@
 %patch61 -p1 -b .ooo65081.sw.layout.patch
 %patch62 -p1 -b .ooo67781.sc.reloadhiddenrows.patch
 %patch63 -p1 -b .workspace.configure18.patch
+%patch64 -p1 -b .ooo54603.fontconfig.part2.patch
 
 tar xzf %{SOURCE1}
 
@@ -3496,6 +3498,9 @@
 %{instdir}/share/registry/modules/org/openoffice/Office/Scripting/Scripting-python.xcu
 
 %changelog
+* Mon Jul 31 2006 Caolan McNamara <caolanm redhat com> - 1:2.0.3-7.8
+- add openoffice.org-1.9.129.ooo54603.fontconfig.part2.patch
+
 * Wed Jul 26 2006 Caolan McNamara <caolanm redhat com> - 1:2.0.3-7.7
 - rh#200207# -> openoffice.org-2.0.3.ooo67779.svx.toolbarcrash.patch
 - rh#200194# -> openoffice.org-2.0.3.ooo67793.sw.stickymenu.patch


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]