summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKhaled Hosny <khaledhosny@eglug.org>2013-11-26 17:08:25 +0200
committerCaolán McNamara <caolanm@redhat.com>2013-12-04 05:04:04 -0600
commit003a3d7a55d9f83d5b68800d54fdac633b4c281a (patch)
tree636e3f78f804db35c7bf16a64f30871c9f77e35d
parentef1b4c3a5ea6e70a3831d29133ca291aee89f177 (diff)
No more uses of printer built in fonts
Less parsing of AFM files at startup. Change-Id: I62d4c81d6e892f2356df22b53bb35c0f9f7bc344 Reviewed-on: https://gerrit.libreoffice.org/6860 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--include/vcl/fontmanager.hxx36
-rw-r--r--vcl/generic/fontmanager/fontcache.cxx31
-rw-r--r--vcl/generic/fontmanager/fontmanager.cxx341
-rw-r--r--vcl/generic/print/genpspgraphics.cxx6
-rw-r--r--vcl/generic/print/glyphset.cxx7
-rw-r--r--vcl/generic/print/text_gfx.cxx2
-rw-r--r--vcl/headless/svptext.cxx5
-rw-r--r--vcl/unx/generic/gdi/salgdi3.cxx5
8 files changed, 25 insertions, 408 deletions
diff --git a/include/vcl/fontmanager.hxx b/include/vcl/fontmanager.hxx
index 7f8511da21c6..ca78376972a0 100644
--- a/include/vcl/fontmanager.hxx
+++ b/include/vcl/fontmanager.hxx
@@ -56,7 +56,6 @@ enum type {
Unknown = 0,
Type1 = 1,
TrueType = 2,
- Builtin = 3
};
}
@@ -141,11 +140,9 @@ class VCL_PLUGIN_PUBLIC PrintFontManager
struct PrintFont;
struct TrueTypeFontFile;
struct Type1FontFile;
- struct BuiltinFont;
friend struct PrintFont;
friend struct TrueTypeFontFile;
friend struct Type1FontFile;
- friend struct BuiltinFont;
friend class FontCache;
struct PrintFontMetrics
@@ -238,16 +235,6 @@ class VCL_PLUGIN_PUBLIC PrintFontManager
virtual bool queryMetricPage( int nPage, utl::MultiAtomProvider* pProvider );
};
- struct BuiltinFont : public PrintFont
- {
- int m_nDirectory; // atom containing system dependent path
- OString m_aMetricFile;
-
- BuiltinFont() : PrintFont( fonttype::Builtin ) {}
- virtual ~BuiltinFont();
- virtual bool queryMetricPage( int nPage, utl::MultiAtomProvider* pProvider );
- };
-
fontID m_nNextFontID;
boost::unordered_map< fontID, PrintFont* > m_aFonts;
boost::unordered_map< int, FontFamily > m_aFamilyTypes;
@@ -292,8 +279,6 @@ class VCL_PLUGIN_PUBLIC PrintFontManager
return findFontFileID(nDirID, rFile, 0) != 0;
}
- fontID findFontBuiltinID( int nPSNameAtom ) const;
-
FontFamily matchFamilyName( const OUString& rFamily ) const;
PrintFont* getFont( fontID nID ) const
@@ -349,16 +334,10 @@ public:
// returns the number of managed fonts
int getFontCount() const { return m_aFonts.size(); }
- // caution: the getFontList* methods can change the font list on demand
- // depending on the pParser argument. That is getFontCount() may
- // return a larger value after getFontList()
-
- // returns the ids of all managed fonts. on pParser != NULL
- // all fonttype::Builtin type fonts are not listed
- // which do not occur in the PPD of pParser
- void getFontList( std::list< fontID >& rFontIDs, const PPDParser* pParser = NULL );
- // get the font list and fast font info. see getFontList for pParser
- void getFontListWithFastInfo( std::list< FastPrintFontInfo >& rFonts, const PPDParser* pParser = NULL );
+ // returns the ids of all managed fonts.
+ void getFontList( std::list< fontID >& rFontIDs );
+ // get the font list and fast font info.
+ void getFontListWithFastInfo( std::list< FastPrintFontInfo >& rFonts );
// get font info for a specific font
bool getFontInfo( fontID nFontID, PrintFontInfo& rInfo ) const;
@@ -453,16 +432,15 @@ public:
// the user is responsible to allocate pArray large enough
bool getMetrics( fontID nFontID, const sal_Unicode* pString, int nLen, CharacterMetric* pArray, bool bVertical = false ) const;
- // get encoding vector of font, currently only for Type1 and Builtin fonts
- // returns NULL if encoding vector is empty or font is neither type1 or
- // builtin; if ppNonEncoded is set and non encoded type1 glyphs exist
+ // get encoding vector of font, currently only for Type1 fonts
+ // returns NULL if encoding vector is empty or font is not type1;
+ // if ppNonEncoded is set and non encoded type1 glyphs exist
// then *ppNonEncoded is set to the mapping for nonencoded glyphs.
// the encoding vector contains -1 for non encoded glyphs
const std::map< sal_Unicode, sal_Int32 >* getEncodingMap( fontID nFontID, const std::map< sal_Unicode, OString >** ppNonEncoded ) const;
// evaluates copyright flags for TrueType fonts for printing/viewing
// type1 fonts do not have such a feature, so return for them is true
- // returns true for builtin fonts (surprise!)
bool isFontDownloadingAllowedForPrinting( fontID nFont ) const;
// helper for type 1 fonts
diff --git a/vcl/generic/fontmanager/fontcache.cxx b/vcl/generic/fontmanager/fontcache.cxx
index 55e7a32c08b0..cbb899edeb9d 100644
--- a/vcl/generic/fontmanager/fontcache.cxx
+++ b/vcl/generic/fontmanager/fontcache.cxx
@@ -318,9 +318,7 @@ void FontCache::read()
fonttype::type eType = (fonttype::type)atoi( pLine );
if( eType != fonttype::TrueType &&
- eType != fonttype::Type1 &&
- eType != fonttype::Builtin
- )
+ eType != fonttype::Type1 )
continue;
while( *pLine && *pLine != ';' )
pLine++;
@@ -344,9 +342,6 @@ void FontCache::read()
case fonttype::Type1:
pFont = new PrintFontManager::Type1FontFile();
break;
- case fonttype::Builtin:
- pFont = new PrintFontManager::BuiltinFont();
- break;
default: break;
}
@@ -433,10 +428,6 @@ void FontCache::read()
nStyleTokenNr++;
}
break;
- case fonttype::Builtin:
- static_cast<PrintFontManager::BuiltinFont*>(pFont)->m_nDirectory = nDir;
- static_cast<PrintFontManager::BuiltinFont*>(pFont)->m_aMetricFile = aFile;
- break;
default: break;
}
if( nTokens > nStyleTokenNr )
@@ -504,10 +495,6 @@ void FontCache::copyPrintFont( const PrintFontManager::PrintFont* pFrom, PrintFo
static_cast<PrintFontManager::Type1FontFile*>(pTo)->m_aFontFile = static_cast<const PrintFontManager::Type1FontFile*>(pFrom)->m_aFontFile;
static_cast<PrintFontManager::Type1FontFile*>(pTo)->m_aMetricFile = static_cast<const PrintFontManager::Type1FontFile*>(pFrom)->m_aMetricFile;
break;
- case fonttype::Builtin:
- static_cast<PrintFontManager::BuiltinFont*>(pTo)->m_nDirectory = static_cast<const PrintFontManager::BuiltinFont*>(pFrom)->m_nDirectory;
- static_cast<PrintFontManager::BuiltinFont*>(pTo)->m_aMetricFile = static_cast<const PrintFontManager::BuiltinFont*>(pFrom)->m_aMetricFile;
- break;
default: break;
}
pTo->m_nFamilyName = pFrom->m_nFamilyName;
@@ -562,15 +549,6 @@ bool FontCache::equalsPrintFont( const PrintFontManager::PrintFont* pLeft, Print
return false;
}
break;
- case fonttype::Builtin:
- {
- const PrintFontManager::BuiltinFont* pLT = static_cast<const PrintFontManager::BuiltinFont*>(pLeft);
- const PrintFontManager::BuiltinFont* pRT = static_cast<const PrintFontManager::BuiltinFont*>(pRight);
- if( pRT->m_nDirectory != pLT->m_nDirectory ||
- pRT->m_aMetricFile != pLT->m_aMetricFile )
- return false;
- }
- break;
default: break;
}
if( pRight->m_nFamilyName != pLeft->m_nFamilyName ||
@@ -616,9 +594,6 @@ PrintFontManager::PrintFont* FontCache::clonePrintFont( const PrintFontManager::
case fonttype::Type1:
pFont = new PrintFontManager::Type1FontFile();
break;
- case fonttype::Builtin:
- pFont = new PrintFontManager::BuiltinFont();
- break;
default: break;
}
if( pFont )
@@ -669,10 +644,6 @@ void FontCache::updateFontCacheEntry( const PrintFontManager::PrintFont* pFont,
nDirID = static_cast<const PrintFontManager::Type1FontFile*>(pFont)->m_nDirectory;
aFile = static_cast<const PrintFontManager::Type1FontFile*>(pFont)->m_aFontFile;
break;
- case fonttype::Builtin:
- nDirID = static_cast<const PrintFontManager::BuiltinFont*>(pFont)->m_nDirectory;
- aFile = static_cast<const PrintFontManager::BuiltinFont*>(pFont)->m_aMetricFile;
- break;
default:
return;
}
diff --git a/vcl/generic/fontmanager/fontmanager.cxx b/vcl/generic/fontmanager/fontmanager.cxx
index 9f545cc305a0..c506a901b89c 100644
--- a/vcl/generic/fontmanager/fontmanager.cxx
+++ b/vcl/generic/fontmanager/fontmanager.cxx
@@ -76,8 +76,6 @@
#include "com/sun/star/beans/XMaterialHolder.hpp"
#include "com/sun/star/beans/NamedValue.hpp"
-#define PRINTER_METRICDIR "fontmetric"
-
using namespace vcl;
using namespace utl;
using namespace psp;
@@ -205,12 +203,6 @@ PrintFontManager::TrueTypeFontFile::~TrueTypeFontFile()
// -------------------------------------------------------------------------
-PrintFontManager::BuiltinFont::~BuiltinFont()
-{
-}
-
-// -------------------------------------------------------------------------
-
bool PrintFontManager::Type1FontFile::queryMetricPage( int /*nPage*/, MultiAtomProvider* pProvider )
{
return readAfmMetrics( pProvider, false, false );
@@ -218,13 +210,6 @@ bool PrintFontManager::Type1FontFile::queryMetricPage( int /*nPage*/, MultiAtomP
// -------------------------------------------------------------------------
-bool PrintFontManager::BuiltinFont::queryMetricPage( int /*nPage*/, MultiAtomProvider* pProvider )
-{
- return readAfmMetrics( pProvider, false, false );
-}
-
-// -------------------------------------------------------------------------
-
bool PrintFontManager::TrueTypeFontFile::queryMetricPage( int nPage, MultiAtomProvider* /*pProvider*/ )
{
bool bSuccess = false;
@@ -446,22 +431,6 @@ bool PrintFontManager::PrintFont::readAfmMetrics( MultiAtomProvider* pProvider,
#endif
}
- // hack for GB encoded builtin fonts posing as FontSpecific
- if( m_eType == fonttype::Builtin && ( nAdobeEncoding == 3 || nAdobeEncoding == 0 ) )
- {
- int nLen = aFamily.getLength();
- if( nLen > 2 &&
- aFamily.endsWith("GB") &&
- pInfo->numOfChars > 255 )
- {
- m_aEncoding = RTL_TEXTENCODING_GBK;
- m_bFontEncodingOnly = true;
-#if OSL_DEBUG_LEVEL > 1
- fprintf( stderr, "found builtin font %s with GBK encoding\n", pInfo->gfi->fontName );
-#endif
- }
- }
-
// #i37313# check if Fontspecific is not rather some character encoding
if( nAdobeEncoding == 3 && m_aEncoding == RTL_TEXTENCODING_SYMBOL )
{
@@ -793,7 +762,7 @@ std::vector<fontID> PrintFontManager::addFontFile( const OString& rFileName )
enum fontFormat
{
- UNKNOWN, TRUETYPE, CFF, TYPE1, AFM
+ UNKNOWN, TRUETYPE, CFF, TYPE1
};
bool PrintFontManager::analyzeFontFile( int nDirID, const OString& rFontFile, ::std::list< PrintFontManager::PrintFont* >& rNewFonts, const char *pFormat ) const
@@ -825,8 +794,6 @@ bool PrintFontManager::analyzeFontFile( int nDirID, const OString& rFontFile, ::
OString aExt( rFontFile.copy( rFontFile.lastIndexOf( '.' )+1 ) );
if( aExt.equalsIgnoreAsciiCase("pfb") || aExt.equalsIgnoreAsciiCase("pfa") )
eFormat = TYPE1;
- else if( aExt.equalsIgnoreAsciiCase("afm"))
- eFormat = AFM;
else if( aExt.equalsIgnoreAsciiCase("ttf")
|| aExt.equalsIgnoreAsciiCase("ttc")
|| aExt.equalsIgnoreAsciiCase("tte") ) // #i33947# for Gaiji support
@@ -881,18 +848,6 @@ bool PrintFontManager::analyzeFontFile( int nDirID, const OString& rFontFile, ::
}
}
}
- else if (eFormat == AFM)
- {
- BuiltinFont* pFont = new BuiltinFont();
- pFont->m_nDirectory = nDirID;
- pFont->m_aMetricFile = rFontFile;
- if( pFont->readAfmMetrics( m_pAtoms, false, true ) )
- {
- rNewFonts.push_back( pFont );
- }
- else
- delete pFont;
- }
else if (eFormat == TRUETYPE || eFormat == CFF)
{
// get number of ttc entries
@@ -966,21 +921,6 @@ bool PrintFontManager::analyzeFontFile( int nDirID, const OString& rFontFile, ::
// -------------------------------------------------------------------------
-fontID PrintFontManager::findFontBuiltinID( int nPSNameAtom ) const
-{
- fontID nID = 0;
- ::boost::unordered_map< fontID, PrintFont* >::const_iterator it;
- for( it = m_aFonts.begin(); nID == 0 && it != m_aFonts.end(); ++it )
- {
- if( it->second->m_eType == fonttype::Builtin &&
- it->second->m_nPSName == nPSNameAtom )
- nID = it->first;
- }
- return nID;
-}
-
-// -------------------------------------------------------------------------
-
fontID PrintFontManager::findFontFileID( int nDirID, const OString& rFontFile, int nFaceIndex ) const
{
fontID nID = 0;
@@ -1012,11 +952,6 @@ fontID PrintFontManager::findFontFileID( int nDirID, const OString& rFontFile, i
nID = it->first;
}
break;
- case fonttype::Builtin:
- if( static_cast<const BuiltinFont*>((*it).second)->m_nDirectory == nDirID &&
- static_cast<const BuiltinFont*>((*it).second)->m_aMetricFile == rFontFile )
- nID = it->first;
- break;
default:
break;
}
@@ -1056,11 +991,6 @@ std::vector<fontID> PrintFontManager::findFontFileIDs( int nDirID, const OString
aIds.push_back(it->first);
}
break;
- case fonttype::Builtin:
- if( static_cast<const BuiltinFont*>((*it).second)->m_nDirectory == nDirID &&
- static_cast<const BuiltinFont*>((*it).second)->m_aMetricFile == rFontFile )
- aIds.push_back(it->first);
- break;
default:
break;
}
@@ -1383,8 +1313,6 @@ void PrintFontManager::initialize()
CALLGRIND_ZERO_STATS();
#endif
- long aDirEntBuffer[ (sizeof(struct dirent)+PATH_MAX)+1 ];
-
if( ! m_pFontCache )
{
#if OSL_DEBUG_LEVEL > 1
@@ -1416,9 +1344,6 @@ void PrintFontManager::initialize()
clock_t aStart;
clock_t aStep1;
clock_t aStep2;
- clock_t aStep3;
- int nBuiltinFonts = 0;
- int nCached = 0;
struct tms tms;
@@ -1493,14 +1418,9 @@ void PrintFontManager::initialize()
m_aFontFileToFontID[ static_cast<Type1FontFile*>(*it)->m_aFontFile ].insert( aFont );
else if( (*it)->m_eType == fonttype::TrueType )
m_aFontFileToFontID[ static_cast<TrueTypeFontFile*>(*it)->m_aFontFile ].insert( aFont );
- else if( (*it)->m_eType == fonttype::Builtin )
- m_aFontFileToFontID[ static_cast<BuiltinFont*>(*it)->m_aMetricFile ].insert( aFont );
#if OSL_DEBUG_LEVEL > 1
else
fprintf(stderr, "Un-cached type '%d'\n", (*it)->m_eType);
- if( (*it)->m_eType == fonttype::Builtin )
- nBuiltinFonts++;
- nCached++;
#if OSL_DEBUG_LEVEL > 2
fprintf( stderr, "adding cached font %d: %s\n", aFont, getFontFileSysPath( aFont ).getStr() );
#endif
@@ -1516,95 +1436,6 @@ void PrintFontManager::initialize()
aStep1 = times( &tms );
#endif
- // part two - look for metrics for builtin printer fonts
- std::list< OUString > aMetricDirs;
- psp::getPrinterPathList( aMetricDirs, PRINTER_METRICDIR );
-
- for( std::list< OUString >::const_iterator met_dir_it = aMetricDirs.begin(); met_dir_it != aMetricDirs.end(); ++met_dir_it )
- {
- OString aDir = OUStringToOString( *met_dir_it, aEncoding );
-
- // ask the font cache whether it handles this directory
- std::list< PrintFont* > aCacheFonts;
-
- if( m_pFontCache->listDirectory( aDir, aCacheFonts ) )
- {
-#if OSL_DEBUG_LEVEL > 1
- fprintf( stderr, "adding cache directory: %s\n", aDir.getStr() );
-#endif
- for( ::std::list< PrintFont* >::iterator it = aCacheFonts.begin(); it != aCacheFonts.end(); ++it )
- {
- fontID aFont = m_nNextFontID++;
- m_aFonts[ aFont ] = *it;
- if( (*it)->m_eType == fonttype::Type1 )
- m_aFontFileToFontID[ static_cast<Type1FontFile*>(*it)->m_aFontFile ].insert( aFont );
- else if( (*it)->m_eType == fonttype::TrueType )
- m_aFontFileToFontID[ static_cast<TrueTypeFontFile*>(*it)->m_aFontFile ].insert( aFont );
- else if( (*it)->m_eType == fonttype::Builtin )
- m_aFontFileToFontID[ static_cast<BuiltinFont*>(*it)->m_aMetricFile ].insert( aFont );
-#if OSL_DEBUG_LEVEL > 1
- if( (*it)->m_eType == fonttype::Builtin )
- nBuiltinFonts++;
- nCached++;
-#if OSL_DEBUG_LEVEL > 2
- fprintf( stderr, "adding cached font %d: from %s\n", aFont,
- getFontFileSysPath( aFont ).getStr() );
-#endif
-#endif
- }
- continue;
- }
-
- DIR* pDIR = opendir( aDir.getStr() );
- if( pDIR )
- {
- struct dirent* pDirEntry = (struct dirent*)aDirEntBuffer;
- int nDirID = getDirectoryAtom( aDir, true );
- int nDirFonts = 0;
-
- while( ! readdir_r( pDIR, (struct dirent*)aDirEntBuffer, &pDirEntry ) && pDirEntry )
- {
- OStringBuffer aFile(aDir);
- aFile.append('/').append(pDirEntry->d_name);
- struct stat aStat;
- if( ! stat( aFile.getStr(), &aStat )
- && S_ISREG( aStat.st_mode )
- )
- {
- OString aFileName( pDirEntry->d_name, strlen( pDirEntry->d_name ) );
- OString aExt( aFileName.copy( aFileName.lastIndexOf( '.' )+1 ) );
- if( aExt.equalsIgnoreAsciiCase( "afm" ) )
- {
- ::std::list< PrintFont* > aNewFonts;
-
- analyzeFontFile( nDirID, aFileName, aNewFonts );
- for( ::std::list< PrintFont* >::iterator it = aNewFonts.begin(); it != aNewFonts.end(); ++it )
- {
- if( findFontBuiltinID( (*it)->m_nPSName ) == 0 )
- {
- m_aFontFileToFontID[ aFileName ].insert( m_nNextFontID );
- m_aFonts[ m_nNextFontID++ ] = *it;
- m_pFontCache->updateFontCacheEntry( *it, false );
- ++nDirFonts;
-#if OSL_DEBUG_LEVEL > 2
- nBuiltinFonts++;
-#endif
- }
- else
- delete *it;
- }
- }
- }
- }
- closedir( pDIR );
- if( ! nDirFonts )
- m_pFontCache->markEmptyDir( nDirID );
- }
- }
-
-#if OSL_DEBUG_LEVEL > 1
- aStep2 = times( &tms );
-#endif
// part three - fill in family styles
::boost::unordered_map< fontID, PrintFont* >::iterator font_it;
@@ -1621,12 +1452,11 @@ void PrintFontManager::initialize()
}
#if OSL_DEBUG_LEVEL > 1
- aStep3 = times( &tms );
- fprintf( stderr, "PrintFontManager::initialize: collected %" SAL_PRI_SIZET "u fonts (%d builtin, %d cached)\n", m_aFonts.size(), nBuiltinFonts, nCached );
+ aStep2 = times( &tms );
+ fprintf( stderr, "PrintFontManager::initialize: collected %" SAL_PRI_SIZET "u fonts\n", m_aFonts.size() );
double fTick = (double)sysconf( _SC_CLK_TCK );
fprintf( stderr, "Step 1 took %lf seconds\n", (double)(aStep1 - aStart)/fTick );
fprintf( stderr, "Step 2 took %lf seconds\n", (double)(aStep2 - aStep1)/fTick );
- fprintf( stderr, "Step 3 took %lf seconds\n", (double)(aStep3 - aStep2)/fTick );
#endif
m_pFontCache->flush();
@@ -1638,147 +1468,14 @@ void PrintFontManager::initialize()
}
// -------------------------------------------------------------------------
-inline bool
-equalPitch (FontPitch from, FontPitch to)
-{
- return from == to;
-}
-
-inline bool
-equalWeight (FontWeight from, FontWeight to)
-{
- return from > to ? (from - to) <= 3 : (to - from) <= 3;
-}
-
-inline bool
-equalItalic (FontItalic from, FontItalic to)
-{
- if ( (from == ITALIC_NORMAL) || (from == ITALIC_OBLIQUE) )
- return (to == ITALIC_NORMAL) || (to == ITALIC_OBLIQUE);
- return to == from;
-}
-inline bool
-equalEncoding (rtl_TextEncoding from, rtl_TextEncoding to)
-{
- if ((from == RTL_TEXTENCODING_ISO_8859_1) || (from == RTL_TEXTENCODING_MS_1252))
- return (to == RTL_TEXTENCODING_ISO_8859_1) || (to == RTL_TEXTENCODING_MS_1252);
- return from == to;
-}
-
-namespace {
- struct BuiltinFontIdentifier
- {
- OUString aFamily;
- FontItalic eItalic;
- FontWeight eWeight;
- FontPitch ePitch;
- rtl_TextEncoding aEncoding;
-
- BuiltinFontIdentifier( const OUString& rFam,
- FontItalic eIt,
- FontWeight eWg,
- FontPitch ePt,
- rtl_TextEncoding enc ) :
- aFamily( rFam ),
- eItalic( eIt ),
- eWeight( eWg ),
- ePitch( ePt ),
- aEncoding( enc )
- {}
-
- bool operator==( const BuiltinFontIdentifier& rRight ) const
- {
- return equalItalic( eItalic, rRight.eItalic ) &&
- equalWeight( eWeight, rRight.eWeight ) &&
- equalPitch( ePitch, rRight.ePitch ) &&
- equalEncoding( aEncoding, rRight.aEncoding ) &&
- aFamily.equalsIgnoreAsciiCase( rRight.aFamily );
- }
- };
-
- struct BuiltinFontIdentifierHash
- {
- size_t operator()( const BuiltinFontIdentifier& rFont ) const
- {
- return rFont.aFamily.hashCode() ^ rFont.eItalic ^ rFont.eWeight ^ rFont.ePitch ^ rFont.aEncoding;
- }
- };
-}
-void PrintFontManager::getFontList( ::std::list< fontID >& rFontIDs, const PPDParser* pParser )
+void PrintFontManager::getFontList( ::std::list< fontID >& rFontIDs )
{
rFontIDs.clear();
boost::unordered_map< fontID, PrintFont* >::const_iterator it;
- /*
- * Note: there are two easy steps making this faster:
- * first: insert the printer builtins first, then the not builtins,
- * if they do not match.
- * drawback: this would change the sequence of fonts; this could have
- * subtle, unknown consequences in vcl font matching
- * second: instead of comparing attributes to see whether a softfont
- * is duplicate to a builtin one could simply compare the PSName (which is
- * supposed to be unique), which at this point is just an int.
- * drawback: this could change which fonts are listed; especially TrueType
- * fonts often have a rather dubious PSName, so this could change the
- * font list not so subtle.
- * Until getFontList for a printer becomes a performance issue (which is
- * currently not the case), best stay with the current algorithm.
- */
-
- // fill sets of printer supported fonts
- if( pParser )
- {
- std::set<int> aBuiltinPSNames;
- boost::unordered_set< BuiltinFontIdentifier,
- BuiltinFontIdentifierHash
- > aBuiltinFonts;
-
- int nFonts = pParser->getFonts();
- for( int i = 0; i < nFonts; i++ )
- aBuiltinPSNames.insert( m_pAtoms->getAtom( ATOM_PSNAME, pParser->getFont( i ) ) );
- for( it = m_aFonts.begin(); it != m_aFonts.end(); ++it )
- {
- PrintFont* pFont = it->second;
- if( it->second->m_eType == fonttype::Builtin &&
- aBuiltinPSNames.find( pFont->m_nPSName ) != aBuiltinPSNames.end() )
- {
- aBuiltinFonts.insert( BuiltinFontIdentifier(
- m_pAtoms->getString( ATOM_FAMILYNAME, pFont->m_nFamilyName ),
- pFont->m_eItalic,
- pFont->m_eWeight,
- pFont->m_ePitch,
- pFont->m_aEncoding
- ) );
- }
- }
- for( it = m_aFonts.begin(); it != m_aFonts.end(); ++it )
- {
- PrintFont* pFont = it->second;
- if( it->second->m_eType == fonttype::Builtin )
- {
- if( aBuiltinPSNames.find( pFont->m_nPSName ) != aBuiltinPSNames.end() )
- {
- rFontIDs.push_back( it->first );
- }
- }
- else if( aBuiltinFonts.find( BuiltinFontIdentifier(
- m_pAtoms->getString( ATOM_FAMILYNAME, pFont->m_nFamilyName ),
- pFont->m_eItalic,
- pFont->m_eWeight,
- pFont->m_ePitch,
- pFont->m_aEncoding
- ) ) == aBuiltinFonts.end() )
- {
- rFontIDs.push_back( it->first );
- }
- }
- }
- else // no specific printer
- {
- for( it = m_aFonts.begin(); it != m_aFonts.end(); ++it )
- rFontIDs.push_back( it->first );
- }
+ for( it = m_aFonts.begin(); it != m_aFonts.end(); ++it )
+ rFontIDs.push_back( it->first );
}
// -------------------------------------------------------------------------
@@ -1830,11 +1527,11 @@ void PrintFontManager::fillPrintFontInfo( PrintFont* pFont, PrintFontInfo& rInfo
// -------------------------------------------------------------------------
-void PrintFontManager::getFontListWithFastInfo( ::std::list< FastPrintFontInfo >& rFonts, const PPDParser* pParser )
+void PrintFontManager::getFontListWithFastInfo( ::std::list< FastPrintFontInfo >& rFonts )
{
rFonts.clear();
::std::list< fontID > aFontList;
- getFontList( aFontList, pParser );
+ getFontList( aFontList );
::std::list< fontID >::iterator it;
for( it = aFontList.begin(); it != aFontList.end(); ++it )
@@ -1883,7 +1580,7 @@ bool PrintFontManager::getFontBoundingBox( fontID nFontID, int& xMin, int& yMin,
if( pFont->m_nXMin == 0 && pFont->m_nYMin == 0 && pFont->m_nXMax == 0 && pFont->m_nYMax == 0 )
{
// might be a truetype font not analyzed or type1 without metrics read
- if( pFont->m_eType == fonttype::Type1 || pFont->m_eType == fonttype::Builtin )
+ if( pFont->m_eType == fonttype::Type1 )
pFont->readAfmMetrics( m_pAtoms, false, true );
else if( pFont->m_eType == fonttype::TrueType )
analyzeTrueTypeFile( pFont );
@@ -1995,14 +1692,6 @@ OString PrintFontManager::getAfmFile( PrintFont* pFont ) const
aMetricPath += pPSFont->m_aMetricFile;
}
break;
- case fonttype::Builtin:
- {
- BuiltinFont* pBuiltinFont = static_cast< BuiltinFont* >(pFont);
- aMetricPath = getDirectory( pBuiltinFont->m_nDirectory );
- aMetricPath += "/";
- aMetricPath += pBuiltinFont->m_aMetricFile;
- }
- break;
default: break;
}
}
@@ -2058,7 +1747,7 @@ int PrintFontManager::getFontAscend( fontID nFontID ) const
// might be a truetype font not yet analyzed
if( pFont->m_eType == fonttype::TrueType )
analyzeTrueTypeFile( pFont );
- else if( pFont->m_eType == fonttype::Type1 || pFont->m_eType == fonttype::Builtin )
+ else if( pFont->m_eType == fonttype::Type1 )
pFont->readAfmMetrics( m_pAtoms, false, true );
}
return pFont->m_nAscend;
@@ -2074,7 +1763,7 @@ int PrintFontManager::getFontDescend( fontID nFontID ) const
// might be a truetype font not yet analyzed
if( pFont->m_eType == fonttype::TrueType )
analyzeTrueTypeFile( pFont );
- else if( pFont->m_eType == fonttype::Type1 || pFont->m_eType == fonttype::Builtin )
+ else if( pFont->m_eType == fonttype::Type1 )
pFont->readAfmMetrics( m_pAtoms, false, true );
}
return pFont->m_nDescend;
@@ -2160,7 +1849,7 @@ bool PrintFontManager::getMetrics( fontID nFontID, const sal_Unicode* pString, i
)
{
// might be a font not yet analyzed
- if( pFont->m_eType == fonttype::Type1 || pFont->m_eType == fonttype::Builtin )
+ if( pFont->m_eType == fonttype::Type1 )
pFont->readAfmMetrics( m_pAtoms, false, false );
else if( pFont->m_eType == fonttype::TrueType )
analyzeTrueTypeFile( pFont );
@@ -2207,7 +1896,7 @@ bool PrintFontManager::getMetrics( fontID nFontID, sal_Unicode minCharacter, sal
)
{
// might be a font not yet analyzed
- if( pFont->m_eType == fonttype::Type1 || pFont->m_eType == fonttype::Builtin )
+ if( pFont->m_eType == fonttype::Type1 )
pFont->readAfmMetrics( m_pAtoms, false, false );
else if( pFont->m_eType == fonttype::TrueType )
analyzeTrueTypeFile( pFont );
@@ -2477,9 +2166,7 @@ void PrintFontManager::getGlyphWidths( fontID nFont,
const std::map< sal_Unicode, sal_Int32 >* PrintFontManager::getEncodingMap( fontID nFont, const std::map< sal_Unicode, OString >** pNonEncoded ) const
{
PrintFont* pFont = getFont( nFont );
- if( !pFont ||
- (pFont->m_eType != fonttype::Type1 && pFont->m_eType != fonttype::Builtin)
- )
+ if( !pFont || pFont->m_eType != fonttype::Type1 )
return NULL;
if( ! pFont->m_aEncodingVector.size() )
diff --git a/vcl/generic/print/genpspgraphics.cxx b/vcl/generic/print/genpspgraphics.cxx
index f2516dfafc6c..02aecefbe56b 100644
--- a/vcl/generic/print/genpspgraphics.cxx
+++ b/vcl/generic/print/genpspgraphics.cxx
@@ -895,7 +895,7 @@ void GenPspGraphics::GetDevFontList( ImplDevFontList *pList )
{
::std::list< psp::fontID > aList;
psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
- rMgr.getFontList( aList, m_pJobData->m_pParser );
+ rMgr.getFontList( aList );
::std::list< psp::fontID >::iterator it;
psp::FastPrintFontInfo aInfo;
@@ -1104,10 +1104,6 @@ ImplDevFontAttributes GenPspGraphics::Info2DevFontAttributes( const psp::FastPri
switch( rInfo.m_eType )
{
- case psp::fonttype::Builtin:
- aDFA.mnQuality = 1024;
- aDFA.mbDevice = true;
- break;
case psp::fonttype::TrueType:
aDFA.mnQuality = 512;
aDFA.mbDevice = false;
diff --git a/vcl/generic/print/glyphset.cxx b/vcl/generic/print/glyphset.cxx
index 60fb95be771d..07ac7466776e 100644
--- a/vcl/generic/print/glyphset.cxx
+++ b/vcl/generic/print/glyphset.cxx
@@ -338,7 +338,6 @@ GlyphSet::GetCharSetName (sal_Int32 nGlyphSetID)
return aSetName.makeStringAndClear();
}
else
- /* (meBaseType == fonttype::Type1 || meBaseType == fonttype::Builtin) */
{
return maBaseName;
}
@@ -358,7 +357,6 @@ GlyphSet::GetGlyphSetName (sal_Int32 nGlyphSetID)
return aSetName.makeStringAndClear();
}
else
- /* (meBaseType == fonttype::Type1 || meBaseType == fonttype::Builtin) */
{
return maBaseName;
}
@@ -371,7 +369,6 @@ GlyphSet::GetGlyphSetEncoding (sal_Int32 nGlyphSetID)
return RTL_TEXTENCODING_DONTKNOW;
else
{
- /* (meBaseType == fonttype::Type1 || meBaseType == fonttype::Builtin) */
if (mnBaseEncoding == RTL_TEXTENCODING_SYMBOL)
return RTL_TEXTENCODING_SYMBOL;
else
@@ -411,7 +408,7 @@ void
GlyphSet::PSDefineReencodedFont (osl::File* pOutFile, sal_Int32 nGlyphSetID)
{
// only for ps fonts
- if ((meBaseType != fonttype::Builtin) && (meBaseType != fonttype::Type1))
+ if (meBaseType != fonttype::Type1)
return;
sal_Char pEncodingVector [256];
@@ -617,7 +614,7 @@ sal_Bool
GlyphSet::PSUploadEncoding(osl::File* pOutFile, PrinterGfx &rGfx)
{
// only for ps fonts
- if ((meBaseType != fonttype::Builtin) && (meBaseType != fonttype::Type1))
+ if (meBaseType != fonttype::Type1)
return sal_False;
if (mnBaseEncoding == RTL_TEXTENCODING_SYMBOL)
return sal_False;
diff --git a/vcl/generic/print/text_gfx.cxx b/vcl/generic/print/text_gfx.cxx
index 313f3b92e1e7..5dc60f1de6fd 100644
--- a/vcl/generic/print/text_gfx.cxx
+++ b/vcl/generic/print/text_gfx.cxx
@@ -718,8 +718,6 @@ PrinterGfx::writeResources( osl::File* pFile, std::list< OString >& rSuppliedFon
aIter->PSUploadFont (*pFile, *this, mbUploadPS42Fonts ? true : false, rSuppliedFonts );
}
else
- // ( aIter->GetFontType() == fonttype::Type1
- // || aIter->GetFontType() == fonttype::Builtin )
{
aIter->PSUploadEncoding (pFile, *this);
}
diff --git a/vcl/headless/svptext.cxx b/vcl/headless/svptext.cxx
index 0fde3f0afa9d..9b47c41c8621 100644
--- a/vcl/headless/svptext.cxx
+++ b/vcl/headless/svptext.cxx
@@ -269,11 +269,6 @@ void SvpSalGraphics::GetDevFontList( ImplDevFontList* pDevFontList )
if( !rMgr.getFontFastInfo( *it, aInfo ) )
continue;
- // the GlyphCache must not bother with builtin fonts because
- // it cannot access or use them anyway
- if( aInfo.m_eType == psp::fonttype::Builtin )
- continue;
-
// normalize face number to the GlyphCache
int nFaceNum = rMgr.getFontFaceNumber( aInfo.m_nID );
diff --git a/vcl/unx/generic/gdi/salgdi3.cxx b/vcl/unx/generic/gdi/salgdi3.cxx
index 9f2e88220708..27f87b0c4f58 100644
--- a/vcl/unx/generic/gdi/salgdi3.cxx
+++ b/vcl/unx/generic/gdi/salgdi3.cxx
@@ -554,11 +554,6 @@ void X11SalGraphics::GetDevFontList( ImplDevFontList *pList )
if( !rMgr.getFontFastInfo( *it, aInfo ) )
continue;
- // the GlyphCache must not bother with builtin fonts because
- // it cannot access or use them anyway
- if( aInfo.m_eType == psp::fonttype::Builtin )
- continue;
-
// normalize face number to the GlyphCache
int nFaceNum = rMgr.getFontFaceNumber( aInfo.m_nID );