diff options
author | Tor Lillqvist <tml@collabora.com> | 2013-12-11 10:13:15 +0200 |
---|---|---|
committer | Tor Lillqvist <tml@collabora.com> | 2013-12-11 10:30:02 +0200 |
commit | a0e8a1b69106dd55dd52fc6966ecf2b19d461fa9 (patch) | |
tree | 2d1e71e021e03e5a3491425d44208c6ba019988b /vcl | |
parent | displayconnectiondispatch.hxx is private to vcl (diff) | |
download | core-a0e8a1b69106dd55dd52fc6966ecf2b19d461fa9.tar.gz core-a0e8a1b69106dd55dd52fc6966ecf2b19d461fa9.zip |
fontmanager.hxx is private to vcl
Change-Id: Iec1d1539db0b44d2ddc420cf500585098d4793fc
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/generic/fontmanager/fontconfig.cxx | 2 | ||||
-rw-r--r-- | vcl/generic/fontmanager/fontmanager.cxx | 2 | ||||
-rw-r--r-- | vcl/generic/glyphs/gcach_ftyp.cxx | 2 | ||||
-rw-r--r-- | vcl/generic/print/common_gfx.cxx | 2 | ||||
-rw-r--r-- | vcl/generic/print/glyphset.cxx | 2 | ||||
-rw-r--r-- | vcl/generic/print/glyphset.hxx | 2 | ||||
-rw-r--r-- | vcl/generic/print/text_gfx.cxx | 2 | ||||
-rw-r--r-- | vcl/inc/fontcache.hxx | 3 | ||||
-rw-r--r-- | vcl/inc/fontmanager.hxx | 537 | ||||
-rw-r--r-- | vcl/inc/generic/genpspgraphics.h | 2 | ||||
-rw-r--r-- | vcl/unx/generic/gdi/salgdi3.cxx | 2 | ||||
-rw-r--r-- | vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx | 2 | ||||
-rw-r--r-- | vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx | 2 | ||||
-rw-r--r-- | vcl/unx/kde/salnativewidgets-kde.cxx | 2 | ||||
-rw-r--r-- | vcl/unx/kde4/KDESalFrame.cxx | 3 |
15 files changed, 553 insertions, 14 deletions
diff --git a/vcl/generic/fontmanager/fontconfig.cxx b/vcl/generic/fontmanager/fontconfig.cxx index e88745cbb007..828daee2e0d7 100644 --- a/vcl/generic/fontmanager/fontconfig.cxx +++ b/vcl/generic/fontmanager/fontconfig.cxx @@ -20,7 +20,7 @@ #include "fontcache.hxx" #include "impfont.hxx" -#include <vcl/fontmanager.hxx> +#include "fontmanager.hxx" #include <vcl/svapp.hxx> #include <vcl/sysdata.hxx> #include <vcl/vclenum.hxx> diff --git a/vcl/generic/fontmanager/fontmanager.cxx b/vcl/generic/fontmanager/fontmanager.cxx index c506a901b89c..56b724069f43 100644 --- a/vcl/generic/fontmanager/fontmanager.cxx +++ b/vcl/generic/fontmanager/fontmanager.cxx @@ -30,7 +30,7 @@ #include "impfont.hxx" #include "svdata.hxx" #include "generic/geninst.h" -#include "vcl/fontmanager.hxx" +#include "fontmanager.hxx" #include "vcl/strhelper.hxx" #include "vcl/ppdparser.hxx" #include <vcl/embeddedfontshelper.hxx> diff --git a/vcl/generic/glyphs/gcach_ftyp.cxx b/vcl/generic/glyphs/gcach_ftyp.cxx index abfa77578086..b153e5cf2112 100644 --- a/vcl/generic/glyphs/gcach_ftyp.cxx +++ b/vcl/generic/glyphs/gcach_ftyp.cxx @@ -63,7 +63,7 @@ typedef const FT_Vector* FT_Vector_CPtr; #include <fcntl.h> #include <sys/stat.h> #include <sys/mman.h> -#include "vcl/fontmanager.hxx" +#include "fontmanager.hxx" // the gamma table makes artificial bold look better for CJK glyphs static unsigned char aGammaTable[257]; diff --git a/vcl/generic/print/common_gfx.cxx b/vcl/generic/print/common_gfx.cxx index 851739a55898..84d3afcef575 100644 --- a/vcl/generic/print/common_gfx.cxx +++ b/vcl/generic/print/common_gfx.cxx @@ -23,7 +23,7 @@ #include "generic/printergfx.hxx" #include "generic/printerjob.hxx" -#include "vcl/fontmanager.hxx" +#include "fontmanager.hxx" #include "vcl/strhelper.hxx" #include "vcl/printerinfomanager.hxx" diff --git a/vcl/generic/print/glyphset.cxx b/vcl/generic/print/glyphset.cxx index 07ac7466776e..118a0e2cfb3b 100644 --- a/vcl/generic/print/glyphset.cxx +++ b/vcl/generic/print/glyphset.cxx @@ -25,7 +25,7 @@ #include "generic/printergfx.hxx" #include "fontsubset.hxx" -#include "vcl/fontmanager.hxx" +#include "fontmanager.hxx" #include <tools/gen.hxx> diff --git a/vcl/generic/print/glyphset.hxx b/vcl/generic/print/glyphset.hxx index 7a65b64610f7..009f2ce40b76 100644 --- a/vcl/generic/print/glyphset.hxx +++ b/vcl/generic/print/glyphset.hxx @@ -20,7 +20,7 @@ #ifndef INCLUDED_VCL_GENERIC_PRINT_GLYPHSET_HXX #define INCLUDED_VCL_GENERIC_PRINT_GLYPHSET_HXX -#include "vcl/fontmanager.hxx" +#include "fontmanager.hxx" #include "osl/file.hxx" diff --git a/vcl/generic/print/text_gfx.cxx b/vcl/generic/print/text_gfx.cxx index 5dc60f1de6fd..b8b9439c4a58 100644 --- a/vcl/generic/print/text_gfx.cxx +++ b/vcl/generic/print/text_gfx.cxx @@ -24,7 +24,7 @@ #include "glyphset.hxx" #include "generic/printergfx.hxx" -#include "vcl/fontmanager.hxx" +#include "fontmanager.hxx" #include "vcl/helper.hxx" #include "osl/thread.h" diff --git a/vcl/inc/fontcache.hxx b/vcl/inc/fontcache.hxx index d70b641695dd..abce7432fb15 100644 --- a/vcl/inc/fontcache.hxx +++ b/vcl/inc/fontcache.hxx @@ -22,9 +22,10 @@ #include <rtl/ustring.hxx> #include <vcl/dllapi.h> -#include <vcl/fontmanager.hxx> #include <boost/unordered_map.hpp> +#include "fontmanager.hxx" + namespace psp { diff --git a/vcl/inc/fontmanager.hxx b/vcl/inc/fontmanager.hxx new file mode 100644 index 000000000000..a727b84a58c5 --- /dev/null +++ b/vcl/inc/fontmanager.hxx @@ -0,0 +1,537 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_VCL_INC_FONTMANAGER_HXX +#define INCLUDED_VCL_INC_FONTMANAGER_HXX + +#include <boost/unordered_map.hpp> +#include <map> +#include <list> +#include <set> + +#include <vcl/dllapi.h> +#include <vcl/helper.hxx> +#include <vcl/timer.hxx> +#include <vcl/vclenum.hxx> +#include <com/sun/star/lang/Locale.hpp> + +#include <vector> + +#define ATOM_FAMILYNAME 2 +#define ATOM_PSNAME 3 + +/* + * some words on metrics: every length returned by PrintFontManager and + * friends are PostScript afm style, that is they are 1/1000 font height + */ + +// forward declarations +namespace utl { class MultiAtomProvider; } // see unotools/atom.hxx +class FontSubsetInfo; +class ImplFontOptions; +class FontSelectPattern; + +namespace psp { +class PPDParser; // see ppdparser.hxx + +namespace fonttype +{ +enum type { + Unknown = 0, + Type1 = 1, + TrueType = 2, +}; +} + +/* + * the difference between FastPrintFontInfo and PrintFontInfo + * is that the information in FastPrintFontInfo can usually + * be gathered without openening either the font file or + * an afm metric file. they are gathered from fonts.dir alone. + * if only FastPrintFontInfo is gathered and PrintFontInfo + * on demand and for less fonts, then performance in startup + * increases considerably + */ + +struct FastPrintFontInfo +{ + fontID m_nID; // FontID + fonttype::type m_eType; + + // font attributes + OUString m_aFamilyName; + OUString m_aStyleName; + std::list< OUString > m_aAliases; + FontFamily m_eFamilyStyle; + FontItalic m_eItalic; + FontWidth m_eWidth; + FontWeight m_eWeight; + FontPitch m_ePitch; + rtl_TextEncoding m_aEncoding; + bool m_bSubsettable; + bool m_bEmbeddable; + + FastPrintFontInfo() : + m_nID( 0 ), + m_eType( fonttype::Unknown ), + m_eFamilyStyle( FAMILY_DONTKNOW ), + m_eItalic( ITALIC_DONTKNOW ), + m_eWidth( WIDTH_DONTKNOW ), + m_eWeight( WEIGHT_DONTKNOW ), + m_ePitch( PITCH_DONTKNOW ), + m_aEncoding( RTL_TEXTENCODING_DONTKNOW ) + {} +}; + +struct PrintFontInfo : public FastPrintFontInfo +{ + int m_nAscend; + int m_nDescend; + int m_nLeading; + int m_nWidth; + + PrintFontInfo() : + FastPrintFontInfo(), + m_nAscend( 0 ), + m_nDescend( 0 ), + m_nLeading( 0 ), + m_nWidth( 0 ) + {} +}; + +// the values are per thousand of the font size +// note: width, height contain advances, not bounding box +struct CharacterMetric +{ + short int width, height; + + CharacterMetric() : width( 0 ), height( 0 ) {} + bool operator==( const CharacterMetric& rOther ) const + { return rOther.width == width && rOther.height == height; } + bool operator!=( const CharacterMetric& rOther ) const + { return rOther.width != width || rOther.height != height; } +}; + +class FontCache; + +// a class to manage printable fonts +// aims are type1 and truetype fonts + +class FontCache; + +class VCL_PLUGIN_PUBLIC PrintFontManager +{ + struct PrintFont; + struct TrueTypeFontFile; + struct Type1FontFile; + friend struct PrintFont; + friend struct TrueTypeFontFile; + friend struct Type1FontFile; + friend class FontCache; + + struct PrintFontMetrics + { + // character metrics are stored by the following keys: + // lower two bytes contain a sal_Unicode (a UCS2 character) + // upper byte contains: 0 for horizontal metric + // 1 for vertical metric + // highest byte: 0 for now + boost::unordered_map< int, CharacterMetric > m_aMetrics; + // contains the unicode blocks for which metrics were queried + // this implies that metrics should be queried in terms of + // unicode blocks. here a unicode block is identified + // by the upper byte of the UCS2 encoding. + // note that the corresponding bit should be set even + // if the font does not support a single character of that page + // this map shows, which pages were queried already + // if (like in AFM metrics) all metrics are queried in + // a single pass, then all bits should be set + char m_aPages[32]; + + boost::unordered_map< sal_Unicode, bool > m_bVerticalSubstitutions; + + PrintFontMetrics() {} + + bool isEmpty() const { return m_aMetrics.empty(); } + }; + + struct PrintFont + { + fonttype::type m_eType; + + // font attributes + int m_nFamilyName; // atom + std::list< int > m_aAliases; + int m_nPSName; // atom + OUString m_aStyleName; + FontItalic m_eItalic; + FontWidth m_eWidth; + FontWeight m_eWeight; + FontPitch m_ePitch; + rtl_TextEncoding m_aEncoding; + bool m_bFontEncodingOnly; // set if font should be only accessed by builtin encoding + CharacterMetric m_aGlobalMetricX; + CharacterMetric m_aGlobalMetricY; + PrintFontMetrics* m_pMetrics; + int m_nAscend; + int m_nDescend; + int m_nLeading; + int m_nXMin; // font bounding box + int m_nYMin; + int m_nXMax; + int m_nYMax; + bool m_bHaveVerticalSubstitutedGlyphs; + bool m_bUserOverride; + + std::map< sal_Unicode, sal_Int32 > m_aEncodingVector; + std::map< sal_Unicode, OString > m_aNonEncoded; + + explicit PrintFont( fonttype::type eType ); + virtual ~PrintFont(); + virtual bool queryMetricPage( int nPage, utl::MultiAtomProvider* pProvider ) = 0; + + bool readAfmMetrics( utl::MultiAtomProvider* pProvider, bool bFillEncodingvector, bool bOnlyGlobalAttributes ); + }; + + struct Type1FontFile : public PrintFont + { + int m_nDirectory; // atom containing system dependent path + OString m_aFontFile; // relative to directory + OString m_aMetricFile; // dito + + /* note: m_aFontFile and Metric file are not atoms + because they should be fairly unique */ + + Type1FontFile() : PrintFont( fonttype::Type1 ), m_nDirectory( 0 ) {} + virtual ~Type1FontFile(); + virtual bool queryMetricPage( int nPage, utl::MultiAtomProvider* pProvider ); + }; + + struct TrueTypeFontFile : public PrintFont + { + int m_nDirectory; // atom containing system dependent path + OString m_aFontFile; // relative to directory + int m_nCollectionEntry; // 0 for regular fonts, 0 to ... for fonts stemming from collections + unsigned int m_nTypeFlags; // copyright bits and PS-OpenType flag + + TrueTypeFontFile(); + virtual ~TrueTypeFontFile(); + 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; + std::list< OUString > m_aPrinterDrivers; + std::list< OString > m_aFontDirectories; + std::list< int > m_aPrivateFontDirectories; + utl::MultiAtomProvider* m_pAtoms; + // for speeding up findFontFileID + boost::unordered_map< OString, std::set< fontID >, OStringHash > + m_aFontFileToFontID; + + boost::unordered_map< OString, int, OStringHash > + m_aDirToAtom; + boost::unordered_map< int, OString > m_aAtomToDir; + int m_nNextDirAtom; + + boost::unordered_multimap< OString, sal_Unicode, OStringHash > + m_aAdobenameToUnicode; + boost::unordered_multimap< sal_Unicode, OString > + m_aUnicodeToAdobename; + boost::unordered_multimap< sal_Unicode, sal_uInt8 > m_aUnicodeToAdobecode; + boost::unordered_multimap< sal_uInt8, sal_Unicode > m_aAdobecodeToUnicode; + + mutable FontCache* m_pFontCache; + + OString getAfmFile( PrintFont* pFont ) const; + OString getFontFile( PrintFont* pFont ) const; + + bool analyzeFontFile( int nDirID, const OString& rFileName, std::list< PrintFont* >& rNewFonts, const char *pFormat=NULL ) const; + OUString convertTrueTypeName( void* pNameRecord ) const; // actually a NameRecord* formt font subsetting code + void analyzeTrueTypeFamilyName( void* pTTFont, std::list< OUString >& rnames ) const; // actually a TrueTypeFont* from font subsetting code + bool analyzeTrueTypeFile( PrintFont* pFont ) const; + // finds the font id for the nFaceIndex face in this font file + // There may be multiple font ids for TrueType collections + fontID findFontFileID( int nDirID, const OString& rFile, int nFaceIndex ) const; + + // There may be multiple font ids for TrueType collections + std::vector<fontID> findFontFileIDs( int nDirID, const OString& rFile ) const; + + bool knownFontFile( int nDirID, const OString& rFile ) const + { + return findFontFileID(nDirID, rFile, 0) != 0; + } + + FontFamily matchFamilyName( const OUString& rFamily ) const; + + PrintFont* getFont( fontID nID ) const + { + boost::unordered_map< fontID, PrintFont* >::const_iterator it; + it = m_aFonts.find( nID ); + return it == m_aFonts.end() ? NULL : it->second; + } + void fillPrintFontInfo( PrintFont* pFont, FastPrintFontInfo& rInfo ) const; + void fillPrintFontInfo( PrintFont* pFont, PrintFontInfo& rInfo ) const; + + OString getDirectory( int nAtom ) const; + int getDirectoryAtom( const OString& rDirectory, bool bCreate = false ); + + /* try to initialize fonts from libfontconfig + + called from <code>initialize()</code> + */ + void initFontconfig(); + void countFontconfigFonts( boost::unordered_map<OString, int, OStringHash>& o_rVisitedPaths ); + /* deinitialize fontconfig + */ + void deinitFontconfig(); + + /* register an application specific font directory for libfontconfig + + since fontconfig is asked for font substitutes before OOo will check for font availability + and fontconfig will happily substitute fonts it doesn't know (e.g. "Arial Narrow" -> "DejaVu Sans Book"!) + it becomes necessary to tell the library about all the hidden font treasures + + @returns + true if libfontconfig accepted the directory + false else (e.g. no libfontconfig found) + */ + bool addFontconfigDir(const OString& rDirectory); + + std::set<OString> m_aPreviousLangSupportRequests; + std::vector<OString> m_aCurrentRequests; + Timer m_aFontInstallerTimer; + + DECL_LINK( autoInstallFontLangSupport, void* ); + + PrintFontManager(); + ~PrintFontManager(); +public: + static PrintFontManager& get(); // one instance only + + // There may be multiple font ids for TrueType collections + std::vector<fontID> addFontFile( const OString& rFileName ); + + void initialize(); + + // returns the number of managed fonts + int getFontCount() const { return m_aFonts.size(); } + + // 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; + // get fast font info for a specific font + bool getFontFastInfo( fontID nFontID, FastPrintFontInfo& rInfo ) const; + + // routines to get font info in small pieces + + // get a specific fonts PSName name + const OUString& getPSName( fontID nFontID ) const; + + // get a specific fonts family name aliases + void getFontFamilyAliases( fontID nFontID ) const; + + // get a specific fonts type + fonttype::type getFontType( fontID nFontID ) const + { + PrintFont* pFont = getFont( nFontID ); + return pFont ? pFont->m_eType : fonttype::Unknown; + } + + // get a specific fonts italic type + FontItalic getFontItalic( fontID nFontID ) const + { + PrintFont* pFont = getFont( nFontID ); + return pFont ? pFont->m_eItalic : ITALIC_DONTKNOW; + } + + // get a specific fonts width type + FontWidth getFontWidth( fontID nFontID ) const + { + PrintFont* pFont = getFont( nFontID ); + return pFont ? pFont->m_eWidth : WIDTH_DONTKNOW; + } + + // get a specific fonts weight type + FontWeight getFontWeight( fontID nFontID ) const + { + PrintFont* pFont = getFont( nFontID ); + return pFont ? pFont->m_eWeight : WEIGHT_DONTKNOW; + } + + // get a specific fonts pitch type + FontPitch getFontPitch( fontID nFontID ) const + { + PrintFont* pFont = getFont( nFontID ); + return pFont ? pFont->m_ePitch : PITCH_DONTKNOW; + } + + // get a specific fonts encoding + rtl_TextEncoding getFontEncoding( fontID nFontID ) const + { + PrintFont* pFont = getFont( nFontID ); + return pFont ? pFont->m_aEncoding : RTL_TEXTENCODING_DONTKNOW; + } + + // should i only use font's builtin encoding ? + bool getUseOnlyFontEncoding( fontID nFontID ) const + { + PrintFont* pFont = getFont( nFontID ); + return pFont ? pFont->m_bFontEncodingOnly : false; + } + + // get a specific fonts system dependent filename + OString getFontFileSysPath( fontID nFontID ) const + { + return getFontFile( getFont( nFontID ) ); + } + + // get the ttc face number + int getFontFaceNumber( fontID nFontID ) const; + + // get a specific fonts ascend + int getFontAscend( fontID nFontID ) const; + + // get a specific fonts descent + int getFontDescend( fontID nFontID ) const; + + // get a fonts glyph bounding box + bool getFontBoundingBox( fontID nFont, int& xMin, int& yMin, int& xMax, int& yMax ); + + // info whether an array of glyphs has vertical substitutions + void hasVerticalSubstitutions( fontID nFontID, const sal_Unicode* pCharacters, + int nCharacters, bool* pHasSubst ) const; + + // get a specific fonts metrics + + // get metrics for a sal_Unicode range + // the user is responsible to allocate pArray large enough + bool getMetrics( fontID nFontID, sal_Unicode minCharacter, sal_Unicode maxCharacter, CharacterMetric* pArray, bool bVertical = false ) const; + // get metrics for an array of sal_Unicode characters + // 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 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 + bool isFontDownloadingAllowedForPrinting( fontID nFont ) const; + + // helper for type 1 fonts + std::list< OString > getAdobeNameFromUnicode( sal_Unicode aChar ) const; + + std::pair< boost::unordered_multimap< sal_Unicode, sal_uInt8 >::const_iterator, + boost::unordered_multimap< sal_Unicode, sal_uInt8 >::const_iterator > + getAdobeCodeFromUnicode( sal_Unicode aChar ) const + { + return m_aUnicodeToAdobecode.equal_range( aChar ); + } + std::list< sal_Unicode > getUnicodeFromAdobeName( const OString& rName ) const; + std::pair< boost::unordered_multimap< sal_uInt8, sal_Unicode >::const_iterator, + boost::unordered_multimap< sal_uInt8, sal_Unicode >::const_iterator > + getUnicodeFromAdobeCode( sal_uInt8 aChar ) const + { + return m_aAdobecodeToUnicode.equal_range( aChar ); + } + + // creates a new font subset of an existing TrueType font + // returns true in case of success, else false + // nFont: the font to be subsetted + // rOutFile: the file to put the new subset into; + // must be a valid osl file URL + // pGlyphIDs: input array of glyph ids for new font + // pNewEncoding: the corresponding encoding in the new font + // pWidths: output array of widths of requested glyphs + // nGlyphs: number of glyphs in arrays + // pCapHeight:: capital height of the produced font + // pXMin, pYMin, pXMax, pYMax: outgoing font bounding box + // TODO: callers of this method should use its FontSubsetInfo counterpart directly + bool createFontSubset( FontSubsetInfo&, + fontID nFont, + const OUString& rOutFile, + sal_Int32* pGlyphIDs, + sal_uInt8* pNewEncoding, + sal_Int32* pWidths, + int nGlyphs, + bool bVertical = false + ); + void getGlyphWidths( fontID nFont, + bool bVertical, + std::vector< sal_Int32 >& rWidths, + std::map< sal_Unicode, sal_uInt32 >& rUnicodeEnc ); + + + // font administration functions + + /* system dependendent font matching + + <p> + <code>matchFont</code> matches a pattern of font characteristics + and returns the closest match if possibe. If a match was found + the <code>FastPrintFontInfo</code> passed in as parameter + will be update to the found matching font. + </p> + <p> + implementation note: currently the function is only implemented + for fontconfig. + </p> + + @param rInfo + out of the FastPrintFontInfo structure the following + fields will be used for the match: + <ul> + <li>family name</li> + <li>italic</li> + <li>width</li> + <li>weight</li> + <li>pitch</li> + </ul> + + @param rLocale + if <code>rLocal</code> contains non empty strings the corresponding + locale will be used for font matching also; e.g. "Sans" can result + in different fonts in e.g. english and japanese + + @returns + true if a match was found + false else + */ + bool matchFont( FastPrintFontInfo& rInfo, const com::sun::star::lang::Locale& rLocale ); + ImplFontOptions* getFontOptions( const FastPrintFontInfo&, int nSize, void (*subcallback)(void*)) const; + + bool Substitute( FontSelectPattern &rPattern, OUString& rMissingCodes ); + + int FreeTypeCharIndex( void *pFace, sal_uInt32 aChar ); +}; + +} // namespace + +#endif // INCLUDED_VCL_INC_FONTMANAGER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/inc/generic/genpspgraphics.h b/vcl/inc/generic/genpspgraphics.h index 17912bcc023e..a80f75cfddf1 100644 --- a/vcl/inc/generic/genpspgraphics.h +++ b/vcl/inc/generic/genpspgraphics.h @@ -21,7 +21,7 @@ #define INCLUDED_VCL_INC_GENERIC_GENPSPGRAPHICS_H -#include "vcl/fontmanager.hxx" +#include "fontmanager.hxx" #include "vclpluginapi.h" #include "salgdi.hxx" diff --git a/vcl/unx/generic/gdi/salgdi3.cxx b/vcl/unx/generic/gdi/salgdi3.cxx index 27f87b0c4f58..8362c883fc7d 100644 --- a/vcl/unx/generic/gdi/salgdi3.cxx +++ b/vcl/unx/generic/gdi/salgdi3.cxx @@ -48,7 +48,7 @@ #include <vcl/sysdata.hxx> #include "generic/printergfx.hxx" -#include "vcl/fontmanager.hxx" +#include "fontmanager.hxx" #include "vcl/jobdata.hxx" #include "vcl/printerinfomanager.hxx" #include "vcl/svapp.hxx" diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx index 67ab5a4df76b..14f6d7adad87 100644 --- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx +++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx @@ -36,7 +36,7 @@ #include <boost/unordered_map.hpp> #include "vcl/vclenum.hxx" -#include "vcl/fontmanager.hxx" +#include "fontmanager.hxx" #include <vcl/decoview.hxx> typedef struct _cairo_font_options cairo_font_options_t; diff --git a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx index 98da94498021..c1929378f28d 100644 --- a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx +++ b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx @@ -14,7 +14,7 @@ #include <unx/gtk/gtkdata.hxx> #include <unx/gtk/gtkinst.hxx> #include <unx/gtk/gtkgdi.hxx> -#include <vcl/fontmanager.hxx> +#include "fontmanager.hxx" GtkStyleContext* GtkSalGraphics::mpButtonStyle = NULL; GtkStyleContext* GtkSalGraphics::mpEntryStyle = NULL; diff --git a/vcl/unx/kde/salnativewidgets-kde.cxx b/vcl/unx/kde/salnativewidgets-kde.cxx index dfbdb4293afb..97473130374a 100644 --- a/vcl/unx/kde/salnativewidgets-kde.cxx +++ b/vcl/unx/kde/salnativewidgets-kde.cxx @@ -28,7 +28,7 @@ #include <unx/kde/kdedata.hxx> #include <vcl/settings.hxx> -#include <vcl/fontmanager.hxx> +#include "fontmanager.hxx" #include <vcl/vclenum.hxx> #include <rtl/ustrbuf.hxx> diff --git a/vcl/unx/kde4/KDESalFrame.cxx b/vcl/unx/kde4/KDESalFrame.cxx index 71f9c56c5c0a..a32291247d22 100644 --- a/vcl/unx/kde4/KDESalFrame.cxx +++ b/vcl/unx/kde4/KDESalFrame.cxx @@ -42,7 +42,8 @@ #include <vcl/font.hxx> #include <vcl/settings.hxx> -#include <vcl/fontmanager.hxx> + +#include "fontmanager.hxx" #include <svdata.hxx> |