[Libreoffice-commits] core.git: include/vcl vcl/generic vcl/headless vcl/inc vcl/unx

Khaled Hosny khaledhosny at eglug.org
Mon Oct 21 00:20:58 PDT 2013


 include/vcl/fontmanager.hxx             |   17 -
 vcl/generic/fontmanager/fontmanager.cxx |  291 -------------------------------
 vcl/generic/glyphs/gcach_ftyp.cxx       |  298 --------------------------------
 vcl/generic/glyphs/gcach_ftyp.hxx       |   11 -
 vcl/generic/glyphs/gcach_layout.cxx     |    6 
 vcl/generic/glyphs/glyphcache.cxx       |   35 ---
 vcl/generic/print/genpspgraphics.cxx    |   44 ----
 vcl/generic/print/text_gfx.cxx          |   22 --
 vcl/headless/svptext.cxx                |   54 -----
 vcl/inc/generic/glyphcache.hxx          |   35 ---
 vcl/inc/generic/printergfx.hxx          |    3 
 vcl/unx/generic/gdi/salgdi3.cxx         |   53 -----
 12 files changed, 19 insertions(+), 850 deletions(-)

New commits:
commit 70d74e2ab1b08b3f21cbaff5e60c091694863b59
Author: Khaled Hosny <khaledhosny at eglug.org>
Date:   Thu May 16 19:06:26 2013 +0200

    Removed unused kerning stuff
    
    Kerning is just another font feature and is already handled by the
    layout engine, there is nothing special about it.
    
    Non of this seems to be used anywhere, anyway.
    
    Change-Id: Ia40c66ec186d11ab46d5d5256b09307a319318c0
    Reviewed-on: https://gerrit.libreoffice.org/6259
    Reviewed-by: Tor Lillqvist <tml at collabora.com>
    Tested-by: Tor Lillqvist <tml at collabora.com>

diff --git a/include/vcl/fontmanager.hxx b/include/vcl/fontmanager.hxx
index 2cc0ac9..a0196d1 100644
--- a/include/vcl/fontmanager.hxx
+++ b/include/vcl/fontmanager.hxx
@@ -129,14 +129,6 @@ struct CharacterMetric
     { return rOther.width != width || rOther.height != height; }
 };
 
-struct KernPair
-{
-    sal_Unicode first, second;
-    short int kern_x, kern_y;
-
-    KernPair() : first( 0 ), second( 0 ), kern_x( 0 ), kern_y( 0 ) {}
-};
-
 class FontCache;
 
 // a class to manage printable fonts
@@ -175,12 +167,9 @@ class VCL_PLUGIN_PUBLIC PrintFontManager
         // a single pass, then all bits should be set
         char                                        m_aPages[32];
 
-        bool                                        m_bKernPairsQueried;
-        std::list< KernPair >                     m_aXKernPairs;
-        std::list< KernPair >                     m_aYKernPairs;
         boost::unordered_map< sal_Unicode, bool >       m_bVerticalSubstitutions;
 
-        PrintFontMetrics() : m_bKernPairsQueried( false ) {}
+        PrintFontMetrics() {}
 
         bool isEmpty() const { return m_aMetrics.empty(); }
     };
@@ -471,10 +460,6 @@ public:
     // 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;
 
-    // to get font substitution transparently use the
-    // getKernPairs method of PrinterGfx
-    const std::list< KernPair >& getKernPairs( fontID nFontID, bool bVertical = false ) 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!)
diff --git a/vcl/generic/fontmanager/fontmanager.cxx b/vcl/generic/fontmanager/fontmanager.cxx
index 6d47ed5..7d2710f 100644
--- a/vcl/generic/fontmanager/fontmanager.cxx
+++ b/vcl/generic/fontmanager/fontmanager.cxx
@@ -225,7 +225,7 @@ bool PrintFontManager::BuiltinFont::queryMetricPage( int /*nPage*/, MultiAtomPro
 
 // -------------------------------------------------------------------------
 
-bool PrintFontManager::TrueTypeFontFile::queryMetricPage( int nPage, MultiAtomProvider* pProvider )
+bool PrintFontManager::TrueTypeFontFile::queryMetricPage( int nPage, MultiAtomProvider* /*pProvider*/ )
 {
     bool bSuccess = false;
 
@@ -284,236 +284,6 @@ bool PrintFontManager::TrueTypeFontFile::queryMetricPage( int nPage, MultiAtomPr
             }
             free( pMetrics );
         }
-
-        if( ! m_pMetrics->m_bKernPairsQueried )
-        {
-            m_pMetrics->m_bKernPairsQueried = true;
-            // this is really a hack
-            // in future MapString/KernGlyphs should be used
-            // but vcl is not in a state where that could be used
-            // so currently we get kernpairs by accessing the raw data
-            struct _TrueTypeFont* pImplTTFont = (struct _TrueTypeFont*)pTTFont;
-
-            //-----------------------------------------------------------------
-            // Kerning:  KT_MICROSOFT
-            //-----------------------------------------------------------------
-            if( pImplTTFont->nkern && pImplTTFont->kerntype == KT_MICROSOFT )
-            {
-                // create a glyph -> character mapping
-                ::boost::unordered_map< sal_uInt16, sal_Unicode > aGlyphMap;
-                ::boost::unordered_map< sal_uInt16, sal_Unicode >::iterator left, right;
-                for( i = 21; i < 0xfffd; i++ )
-                {
-                    sal_uInt16 nGlyph = MapChar( pTTFont, (sal_Unicode)i, 0 ); // kerning for horz only
-                    if( nGlyph != 0 )
-                        aGlyphMap[ nGlyph ] = (sal_Unicode)i;
-                }
-
-
-                KernPair aPair;
-                for( i = 0; i < (int)pImplTTFont->nkern; i++ )
-                {
-                    const sal_uInt8* pTable = pImplTTFont->kerntables[i];
-
-                    /*sal_uInt16 nVersion     =*/ getUInt16BE( pTable );
-                    /*sal_uInt16 nLength      =*/ getUInt16BE( pTable );
-                    sal_uInt16 nCoverage    = getUInt16BE( pTable );
-
-                    aPair.kern_x    = 0;
-                    aPair.kern_y    = 0;
-                    switch( nCoverage >> 8 )
-                    {
-                        case 0:
-                        {
-                            sal_uInt16 nPairs = getUInt16BE( pTable );
-                            pTable += 6;
-                            for( int n = 0; n < nPairs; n++ )
-                            {
-                                sal_uInt16 nLeftGlyph   = getUInt16BE( pTable );
-                                sal_uInt16 nRightGlyph  = getUInt16BE( pTable );
-                                sal_Int16 nKern         = (sal_Int16)getUInt16BE( pTable );
-
-                                left = aGlyphMap.find( nLeftGlyph );
-                                right = aGlyphMap.find( nRightGlyph );
-                                if( left != aGlyphMap.end() && right != aGlyphMap.end() )
-                                {
-                                    aPair.first     = left->second;
-                                    aPair.second    = right->second;
-                                    switch( nCoverage & 1 )
-                                    {
-                                        case 1:
-                                            aPair.kern_x = (int)nKern * 1000 / pImplTTFont->unitsPerEm;
-                                            m_pMetrics->m_aXKernPairs.push_back( aPair );
-                                            break;
-                                        case 0:
-                                            aPair.kern_y = (int)nKern * 1000 / pImplTTFont->unitsPerEm;
-                                            m_pMetrics->m_aYKernPairs.push_back( aPair );
-                                            break;
-                                    }
-                                }
-                            }
-                        }
-                        break;
-
-                        case 2:
-                        {
-                            const sal_uInt8* pSubTable = pTable;
-                            /*sal_uInt16 nRowWidth    =*/ getUInt16BE( pTable );
-                            sal_uInt16 nOfLeft      = getUInt16BE( pTable );
-                            sal_uInt16 nOfRight     = getUInt16BE( pTable );
-                            /*sal_uInt16 nOfArray     =*/ getUInt16BE( pTable );
-                            const sal_uInt8* pTmp = pSubTable + nOfLeft;
-                            sal_uInt16 nFirstLeft   = getUInt16BE( pTmp );
-                            sal_uInt16 nLastLeft    = getUInt16BE( pTmp ) + nFirstLeft - 1;
-                            pTmp = pSubTable + nOfRight;
-                            sal_uInt16 nFirstRight  = getUInt16BE( pTmp );
-                            sal_uInt16 nLastRight   = getUInt16BE( pTmp ) + nFirstRight -1;
-
-                            // int nPairs = (int)(nLastLeft-nFirstLeft+1)*(int)(nLastRight-nFirstRight+1);
-                            for( aPair.first = nFirstLeft; aPair.first < nLastLeft; aPair.first++ )
-                            {
-                                for( aPair.second = 0; aPair.second < nLastRight; aPair.second++ )
-                                {
-                                    sal_Int16 nKern = (sal_Int16)getUInt16BE( pTmp );
-                                    switch( nCoverage & 1 )
-                                    {
-                                        case 1:
-                                            aPair.kern_x = (int)nKern * 1000 / pImplTTFont->unitsPerEm;
-                                            m_pMetrics->m_aXKernPairs.push_back( aPair );
-                                            break;
-                                        case 0:
-                                            aPair.kern_y = (int)nKern * 1000 / pImplTTFont->unitsPerEm;
-                                            m_pMetrics->m_aYKernPairs.push_back( aPair );
-                                            break;
-                                    }
-                                }
-                            }
-                        }
-                        break;
-                    }
-                }
-            }
-
-            //-----------------------------------------------------------------
-            // Kerning:  KT_APPLE_NEW
-            //-----------------------------------------------------------------
-            if( pImplTTFont->nkern && pImplTTFont->kerntype == KT_APPLE_NEW )
-            {
-                // create a glyph -> character mapping
-                ::boost::unordered_map< sal_uInt16, sal_Unicode > aGlyphMap;
-                ::boost::unordered_map< sal_uInt16, sal_Unicode >::iterator left, right;
-                for( i = 21; i < 0xfffd; i++ )
-                {
-                    sal_uInt16 nGlyph = MapChar( pTTFont, (sal_Unicode)i, 0 ); // kerning for horz only
-                    if( nGlyph != 0 )
-                        aGlyphMap[ nGlyph ] = (sal_Unicode)i;
-                }
-
-                // Loop through each of the 'kern' subtables
-                KernPair aPair;
-                for( i = 0; (unsigned int)i < pImplTTFont->nkern; i++ )
-                {
-                    const sal_uInt8* pTable = pImplTTFont->kerntables[i];
-
-                    /*sal_uInt32 nLength      =*/ getUInt32BE( pTable );
-                    sal_uInt16 nCoverage    = getUInt16BE( pTable );
-                    /*sal_uInt16 nTupleIndex  =*/ getUInt16BE( pTable );
-
-                    // Get kerning type
-                    // sal_Bool bKernVertical     = nCoverage & 0x8000;
-                    // sal_Bool bKernCrossStream  = nCoverage & 0x4000;
-                    // sal_Bool bKernVariation    = nCoverage & 0x2000;
-
-                    // Kerning sub-table format, 0 through 3
-                    sal_uInt8 nSubTableFormat  = nCoverage & 0x00FF;
-
-                    aPair.kern_x    = 0;
-                    aPair.kern_y    = 0;
-                    switch( nSubTableFormat )
-                    {
-                        case 0:
-                        {
-                            // Grab the # of kern pairs but skip over the:
-                            //   searchRange
-                            //   entrySelector
-                            //   rangeShift
-                            sal_uInt16 nPairs = getUInt16BE( pTable );
-                            pTable += 6;
-
-                            for( int n = 0; n < nPairs; n++ )
-                            {
-                                sal_uInt16 nLeftGlyph   = getUInt16BE( pTable );
-                                sal_uInt16 nRightGlyph  = getUInt16BE( pTable );
-                                sal_Int16  nKern         = (sal_Int16)getUInt16BE( pTable );
-
-                                left = aGlyphMap.find( nLeftGlyph );
-                                right = aGlyphMap.find( nRightGlyph );
-                                if( left != aGlyphMap.end() && right != aGlyphMap.end() )
-                                {
-                                    aPair.first     = left->second;
-                                    aPair.second    = right->second;
-
-                                    // Only support horizontal kerning for now
-                                    aPair.kern_x = (int)nKern * 1000 / pImplTTFont->unitsPerEm;
-                                    aPair.kern_y = 0;
-                                    m_pMetrics->m_aXKernPairs.push_back( aPair );
-                                }
-                            }
-                        }
-                        break;
-
-                        case 2:
-                        {
-                            const sal_uInt8* pSubTable = pTable;
-                            /*sal_uInt16 nRowWidth    =*/ getUInt16BE( pTable );
-                            sal_uInt16 nOfLeft      = getUInt16BE( pTable );
-                            sal_uInt16 nOfRight     = getUInt16BE( pTable );
-                            /*sal_uInt16 nOfArray     =*/ getUInt16BE( pTable );
-                            const sal_uInt8* pTmp = pSubTable + nOfLeft;
-                            sal_uInt16 nFirstLeft   = getUInt16BE( pTmp );
-                            sal_uInt16 nLastLeft    = getUInt16BE( pTmp ) + nFirstLeft - 1;
-                            pTmp = pSubTable + nOfRight;
-                            sal_uInt16 nFirstRight  = getUInt16BE( pTmp );
-                            sal_uInt16 nLastRight   = getUInt16BE( pTmp ) + nFirstRight -1;
-
-                            for( aPair.first = nFirstLeft; aPair.first < nLastLeft; aPair.first++ )
-                            {
-                                for( aPair.second = 0; aPair.second < nLastRight; aPair.second++ )
-                                {
-                                    sal_Int16 nKern = (sal_Int16)getUInt16BE( pTmp );
-                                    switch( nCoverage & 1 )
-                                    {
-                                        case 1:
-                                            aPair.kern_x = (int)nKern * 1000 / pImplTTFont->unitsPerEm;
-                                            m_pMetrics->m_aXKernPairs.push_back( aPair );
-                                            break;
-                                        case 0:
-                                            aPair.kern_y = (int)nKern * 1000 / pImplTTFont->unitsPerEm;
-                                            m_pMetrics->m_aYKernPairs.push_back( aPair );
-                                            break;
-                                    }
-                                }
-                            }
-                        }
-                        break;
-
-                        default:
-                            fprintf( stderr, "Found unsupported Apple-style kern subtable type %d.\n", nSubTableFormat );
-                            break;
-                    }
-                }
-            }
-
-#if OSL_DEBUG_LEVEL > 1
-            fprintf( stderr, "found %" SAL_PRI_SIZET "u/%" SAL_PRI_SIZET "u kern pairs for %s\n",
-                     m_pMetrics->m_aXKernPairs.size(),
-                     m_pMetrics->m_aYKernPairs.size(),
-                     OUStringToOString( pProvider->getString( ATOM_FAMILYNAME, m_nFamilyName ), RTL_TEXTENCODING_MS_1252 ).getStr() );
-#else
-            (void) pProvider; /* avoid warnings */
-#endif
-        }
-
         CloseTTFont( pTTFont );
         bSuccess = true;
     }
@@ -905,48 +675,6 @@ bool PrintFontManager::PrintFont::readAfmMetrics( MultiAtomProvider* pProvider,
                 }
             }
         }
-
-        m_pMetrics->m_aXKernPairs.clear();
-        m_pMetrics->m_aYKernPairs.clear();
-
-        // now fill in the kern pairs
-        // parseAFM.cxx effectively only supports direction 0 (horizontal)
-        PairKernData* pKern = pInfo->pkd;
-        KernPair aPair;
-        for( i = 0; i < pInfo->numOfPairs; i++, pKern++ )
-        {
-            // #i37703# broken kern table
-            if( ! pKern->name1 || ! pKern->name2 )
-                continue;
-
-            aPair.first = 0;
-            aPair.second = 0;
-            // currently we have to find the adobe character names
-            // in the already parsed character metrics to find
-            // the corresponding UCS2 code which is a bit dangerous
-            // since the character names are not required
-            // in the metric descriptions
-            pChar = pInfo->cmi;
-            for( int j = 0;
-                 j < pInfo->numOfChars && ( aPair.first == 0 || aPair.second == 0 );
-                 j++, pChar++ )
-            {
-                if( pChar->code != -1 )
-                {
-                    if( ! strcmp( pKern->name1, pChar->name ? pChar->name : "" ) )
-                        aPair.first = pUnicodes[ j ];
-                    if( ! strcmp( pKern->name2, pChar->name ? pChar->name : "" ) )
-                        aPair.second = pUnicodes[ j ];
-                }
-            }
-            if( aPair.first && aPair.second )
-            {
-                aPair.kern_x = pKern->xamt;
-                aPair.kern_y = pKern->yamt;
-                m_pMetrics->m_aXKernPairs.push_back( aPair );
-            }
-        }
-        m_pMetrics->m_bKernPairsQueried = true;
     }
 
     freeFontInfo( pInfo );
@@ -2390,23 +2118,6 @@ void PrintFontManager::hasVerticalSubstitutions( fontID nFontID,
 
 // -------------------------------------------------------------------------
 
-const ::std::list< KernPair >& PrintFontManager::getKernPairs( fontID nFontID, bool bVertical ) const
-{
-    static ::std::list< KernPair > aEmpty;
-
-    PrintFont* pFont = getFont( nFontID );
-    if( ! pFont )
-        return aEmpty;
-
-    if( ! pFont->m_pMetrics || ! pFont->m_pMetrics->m_bKernPairsQueried )
-        pFont->queryMetricPage( 0, m_pAtoms );
-    if( ! pFont->m_pMetrics || ! pFont->m_pMetrics->m_bKernPairsQueried )
-        return aEmpty;
-    return bVertical ? pFont->m_pMetrics->m_aYKernPairs : pFont->m_pMetrics->m_aXKernPairs;
-}
-
-// -------------------------------------------------------------------------
-
 bool PrintFontManager::isFontDownloadingAllowedForPrinting( fontID nFont ) const
 {
     static const char* pEnable = getenv( "PSPRINT_ENABLE_TTF_COPYRIGHTAWARENESS" );
diff --git a/vcl/generic/glyphs/gcach_ftyp.cxx b/vcl/generic/glyphs/gcach_ftyp.cxx
index c1f2640..384de84 100644
--- a/vcl/generic/glyphs/gcach_ftyp.cxx
+++ b/vcl/generic/glyphs/gcach_ftyp.cxx
@@ -65,14 +65,6 @@ typedef const FT_Vector* FT_Vector_CPtr;
 #include <sys/mman.h>
 #include "vcl/fontmanager.hxx"
 
-typedef const unsigned char* CPU8;
-inline sal_uInt16 NEXT_U16( CPU8& p ) { p+=2; return (p[-2]<<8)|p[-1]; }
-inline sal_Int16  NEXT_S16( CPU8& p ) { return (sal_Int16)NEXT_U16(p); }
-inline sal_uInt32 NEXT_U32( CPU8& p ) { p+=4; return (p[-4]<<24)|(p[-3]<<16)|(p[-2]<<8)|p[-1]; }
-//inline sal_Int32 NEXT_S32( U8*& p ) { return (sal_Int32)NEXT_U32(p); }
-
-// -----------------------------------------------------------------------
-
 // the gamma table makes artificial bold look better for CJK glyphs
 static unsigned char aGammaTable[257];
 
@@ -232,8 +224,7 @@ const void * graphiteFontTable(const void* appFaceHandle, unsigned int name, siz
 // =======================================================================
 
 FtFontInfo::FtFontInfo( const ImplDevFontAttributes& rDevFontAttributes,
-    const OString& rNativeFileName, int nFaceNum, sal_IntPtr nFontId, int nSynthetic,
-    const ExtraKernInfo* pExtraKernInfo )
+    const OString& rNativeFileName, int nFaceNum, sal_IntPtr nFontId, int nSynthetic)
 :
     maFaceFT( NULL ),
     mpFontFile( FtFontFile::FindFontFile( rNativeFileName ) ),
@@ -248,16 +239,12 @@ FtFontInfo::FtFontInfo( const ImplDevFontAttributes& rDevFontAttributes,
     maDevFontAttributes( rDevFontAttributes ),
     mpFontCharMap( NULL ),
     mpChar2Glyph( NULL ),
-    mpGlyph2Char( NULL ),
-    mpExtraKernInfo( pExtraKernInfo )
+    mpGlyph2Char( NULL )
 {
     // prefer font with low ID
     maDevFontAttributes.mnQuality += 10000 - nFontId;
     // prefer font with matching file names
     maDevFontAttributes.mnQuality += mpFontFile->GetLangBoost();
-    // prefer font with more external info
-    if( pExtraKernInfo )
-        maDevFontAttributes.mnQuality += 100;
 }
 
 // -----------------------------------------------------------------------
@@ -266,7 +253,6 @@ FtFontInfo::~FtFontInfo()
 {
     if( mpFontCharMap )
         mpFontCharMap->DeReference();
-    delete mpExtraKernInfo;
     delete mpChar2Glyph;
     delete mpGlyph2Char;
 #if ENABLE_GRAPHITE
@@ -335,27 +321,6 @@ void FtFontInfo::ReleaseFaceFT()
 
 // -----------------------------------------------------------------------
 
-bool FtFontInfo::HasExtraKerning() const
-{
-    if( !mpExtraKernInfo )
-        return false;
-    // TODO: how to enable the line below without getting #i29881# back?
-    // on the other hand being too optimistic doesn't cause problems
-    // return mpExtraKernInfo->HasKernPairs();
-    return true;
-}
-
-// -----------------------------------------------------------------------
-
-int FtFontInfo::GetExtraKernPairs( ImplKernPairData** ppKernPairs ) const
-{
-    if( !mpExtraKernInfo )
-        return 0;
-    return mpExtraKernInfo->GetUnscaledKernPairs( ppKernPairs );
-}
-
-// -----------------------------------------------------------------------
-
 static unsigned GetUInt( const unsigned char* p ) { return((p[0]<<24)+(p[1]<<16)+(p[2]<<8)+p[3]);}
 static unsigned GetUShort( const unsigned char* p ){ return((p[0]<<8)+p[1]);}
 //static signed GetSShort( const unsigned char* p ){ return((short)((p[0]<<8)+p[1]));}
@@ -454,8 +419,7 @@ FreetypeManager::~FreetypeManager()
 // -----------------------------------------------------------------------
 
 void FreetypeManager::AddFontFile( const OString& rNormalizedName,
-    int nFaceNum, sal_IntPtr nFontId, const ImplDevFontAttributes& rDevFontAttr,
-    const ExtraKernInfo* pExtraKernInfo )
+    int nFaceNum, sal_IntPtr nFontId, const ImplDevFontAttributes& rDevFontAttr)
 {
     if( rNormalizedName.isEmpty() )
         return;
@@ -464,7 +428,7 @@ void FreetypeManager::AddFontFile( const OString& rNormalizedName,
         return;
 
     FtFontInfo* pFontInfo = new FtFontInfo( rDevFontAttr,
-        rNormalizedName, nFaceNum, nFontId, 0, pExtraKernInfo );
+        rNormalizedName, nFaceNum, nFontId, 0);
     maFontList[ nFontId ] = pFontInfo;
     if( mnMaxFontId < nFontId )
         mnMaxFontId = nFontId;
@@ -727,7 +691,7 @@ void ServerFont::FetchFontMetric( ImplFontMetricData& rTo, long& rFactor ) const
 
     rTo.mbScalableFont  = true;
     rTo.mbDevice        = true;
-    rTo.mbKernableFont  = (FT_HAS_KERNING( maFaceFT ) != 0) || mpFontInfo->HasExtraKerning();
+    rTo.mbKernableFont  = FT_HAS_KERNING( maFaceFT ) != 0;
     rTo.mnOrientation = GetFontSelData().mnOrientation;
 
     //Always consider [star]symbol as symbol fonts
@@ -1475,258 +1439,6 @@ bool ServerFont::GetFontCapabilities(vcl::FontCapabilities &rFontCapabilities) c
 }
 
 // -----------------------------------------------------------------------
-
-sal_uLong ServerFont::GetKernPairs( ImplKernPairData** ppKernPairs ) const
-{
-    // if no kerning info is available in the font file
-    *ppKernPairs = NULL;
-    if( !FT_HAS_KERNING( maFaceFT ) || !FT_IS_SFNT( maFaceFT ) )
-    {
-        // then we have may have extra kerning info from e.g. psprint
-        int nCount = mpFontInfo->GetExtraKernPairs( ppKernPairs );
-        // scale the kern values to match the font size
-        const FontSelectPattern& rFSD = GetFontSelData();
-        int nFontWidth = rFSD.mnWidth ? rFSD.mnWidth : rFSD.mnHeight;
-        ImplKernPairData* pKernPair = *ppKernPairs;
-        for( int i = nCount; --i >= 0; ++pKernPair )
-        {
-            long& rVal = pKernPair->mnKern;
-            rVal = ((rVal * nFontWidth) + 500) / 1000;
-        }
-        return nCount;
-    }
-
-    // when font faces of different sizes share the same maFaceFT
-    // then we have to make sure that it uses the correct maSizeFT
-    FT_Activate_Size( maSizeFT );
-
-    // first figure out which glyph pairs are involved in kerning
-    sal_uLong nKernLength = 0;
-    const FT_Byte* const pKern = mpFontInfo->GetTable( "kern", &nKernLength );
-    if( !pKern )
-        return 0;
-
-    // combine TTF/OTF tables from the font file to build a vector of
-    // unicode kerning pairs using Freetype's glyph kerning calculation
-    // for the kerning value
-
-    // TODO: is it worth to share the glyph->unicode mapping between
-    // different instances of the same font face?
-
-    typedef std::vector<ImplKernPairData> KernVector;
-    KernVector aKernGlyphVector;
-    ImplKernPairData aKernPair;
-    aKernPair.mnKern = 0; // To prevent "is used uninitialized" warning...
-
-    const FT_Byte* pBuffer = pKern;
-    sal_uLong nVersion = GetUShort( pBuffer+0 );
-    sal_uInt16 nTableCnt = GetUShort( pBuffer+2 );
-
-    // Microsoft/Old TrueType style kern table
-    if ( nVersion == 0 )
-    {
-        pBuffer += 4;
-
-        for( sal_uInt16 nTableIdx = 0; nTableIdx < nTableCnt; ++nTableIdx )
-        {
-            // sal_uInt16 nSubVersion  = GetUShort( pBuffer+0 );
-            // sal_uInt16 nSubLength   = GetUShort( pBuffer+2 );
-            sal_uInt16 nSubCoverage = GetUShort( pBuffer+4 );
-            pBuffer += 6;
-            if( (nSubCoverage&0x03) != 0x01 )   // no interest in minimum info here
-                continue;
-            switch( nSubCoverage >> 8 )
-            {
-                case 0: // version 0, kerning format 0
-                {
-                    sal_uInt16 nPairs = GetUShort( pBuffer );
-                    pBuffer += 8;   // skip search hints
-                    aKernGlyphVector.reserve( aKernGlyphVector.size() + nPairs );
-                    for( int i = 0; i < nPairs; ++i )
-                    {
-                        aKernPair.mnChar1 = GetUShort( pBuffer+0 );
-                        aKernPair.mnChar2 = GetUShort( pBuffer+2 );
-                        //long nUnscaledKern= GetSShort( pBuffer );
-                        pBuffer += 6;
-                        aKernGlyphVector.push_back( aKernPair );
-                    }
-                }
-                break;
-
-                case 2: // version 0, kerning format 2
-                {
-                    const FT_Byte* pSubTable = pBuffer;
-                    //sal_uInt16 nRowWidth  = GetUShort( pBuffer+0 );
-                    sal_uInt16 nOfsLeft     = GetUShort( pBuffer+2 );
-                    sal_uInt16 nOfsRight    = GetUShort( pBuffer+4 );
-                    sal_uInt16 nOfsArray    = GetUShort( pBuffer+6 );
-                    pBuffer += 8;
-
-                    const FT_Byte* pTmp = pSubTable + nOfsLeft;
-                    sal_uInt16 nFirstLeft   = GetUShort( pTmp+0 );
-                    sal_uInt16 nLastLeft    = GetUShort( pTmp+2 ) + nFirstLeft - 1;
-
-                    pTmp = pSubTable + nOfsRight;
-                    sal_uInt16 nFirstRight  = GetUShort( pTmp+0 );
-                    sal_uInt16 nLastRight   = GetUShort( pTmp+2 ) + nFirstRight - 1;
-
-                    sal_uLong nPairs = (sal_uLong)(nLastLeft - nFirstLeft + 1) * (nLastRight - nFirstRight + 1);
-                    aKernGlyphVector.reserve( aKernGlyphVector.size() + nPairs );
-
-                    pTmp = pSubTable + nOfsArray;
-                    for( int nLeft = nFirstLeft; nLeft < nLastLeft; ++nLeft )
-                    {
-                        aKernPair.mnChar1 = nLeft;
-                        for( int nRight = 0; nRight < nLastRight; ++nRight )
-                        {
-                            if( GetUShort( pTmp ) != 0 )
-                            {
-                                aKernPair.mnChar2 = nRight;
-                                aKernGlyphVector.push_back( aKernPair );
-                            }
-                            pTmp += 2;
-                        }
-                    }
-                }
-                break;
-            }
-        }
-    }
-
-    // Apple New style kern table
-    pBuffer = pKern;
-    nVersion = NEXT_U32( pBuffer );
-    nTableCnt = NEXT_U32( pBuffer );
-    if ( nVersion == 0x00010000 )
-    {
-        for( sal_uInt16 nTableIdx = 0; nTableIdx < nTableCnt; ++nTableIdx )
-        {
-            /*sal_uLong  nLength  =*/ NEXT_U32( pBuffer );
-            sal_uInt16 nCoverage   = NEXT_U16( pBuffer );
-            /*sal_uInt16 nTupleIndex =*/ NEXT_U16( pBuffer );
-
-            // Kerning sub-table format, 0 through 3
-            sal_uInt8 nSubTableFormat  = nCoverage & 0x00FF;
-
-            switch( nSubTableFormat )
-            {
-                case 0: // version 0, kerning format 0
-                {
-                    sal_uInt16 nPairs = NEXT_U16( pBuffer );
-                    pBuffer += 6;   // skip search hints
-                    aKernGlyphVector.reserve( aKernGlyphVector.size() + nPairs );
-                    for( int i = 0; i < nPairs; ++i )
-                    {
-                        aKernPair.mnChar1 = NEXT_U16( pBuffer );
-                        aKernPair.mnChar2 = NEXT_U16( pBuffer );
-                        /*long nUnscaledKern=*/ NEXT_S16( pBuffer );
-                        aKernGlyphVector.push_back( aKernPair );
-                    }
-                }
-                break;
-
-                case 2: // version 0, kerning format 2
-                {
-                    const FT_Byte* pSubTable = pBuffer;
-                    /*sal_uInt16 nRowWidth  =*/ NEXT_U16( pBuffer );
-                    sal_uInt16 nOfsLeft     = NEXT_U16( pBuffer );
-                    sal_uInt16 nOfsRight    = NEXT_U16( pBuffer );
-                    sal_uInt16 nOfsArray    = NEXT_U16( pBuffer );
-
-                    const FT_Byte* pTmp = pSubTable + nOfsLeft;
-                    sal_uInt16 nFirstLeft   = NEXT_U16( pTmp );
-                    sal_uInt16 nLastLeft    = NEXT_U16( pTmp ) + nFirstLeft - 1;
-
-                    pTmp = pSubTable + nOfsRight;
-                    sal_uInt16 nFirstRight  = NEXT_U16( pTmp );
-                    sal_uInt16 nLastRight   = NEXT_U16( pTmp ) + nFirstRight - 1;
-
-                    sal_uLong nPairs = (sal_uLong)(nLastLeft - nFirstLeft + 1) * (nLastRight - nFirstRight + 1);
-                    aKernGlyphVector.reserve( aKernGlyphVector.size() + nPairs );
-
-                    pTmp = pSubTable + nOfsArray;
-                    for( int nLeft = nFirstLeft; nLeft < nLastLeft; ++nLeft )
-                    {
-                        aKernPair.mnChar1 = nLeft;
-                        for( int nRight = 0; nRight < nLastRight; ++nRight )
-                        {
-                            if( NEXT_S16( pTmp ) != 0 )
-                            {
-                                aKernPair.mnChar2 = nRight;
-                                aKernGlyphVector.push_back( aKernPair );
-                            }
-                        }
-                    }
-                }
-                break;
-
-                default:
-                    fprintf( stderr, "gcach_ftyp.cxx:  Found unsupported Apple-style kern subtable type %d.\n", nSubTableFormat );
-                    break;
-            }
-        }
-    }
-
-    // now create VCL's ImplKernPairData[] format for all glyph pairs
-    sal_uLong nKernCount = aKernGlyphVector.size();
-    if( nKernCount )
-    {
-        // prepare glyphindex to character mapping
-        // TODO: this is needed to support VCL's existing kerning infrastructure,
-        // eliminate it up by redesigning kerning infrastructure to work with glyph indices
-        typedef boost::unordered_multimap<sal_uInt16,sal_Unicode> Cmap;
-        Cmap aCmap;
-        for( sal_Unicode aChar = 0x0020; aChar < 0xFFFE; ++aChar )
-        {
-            sal_uInt16 nGlyphIndex = GetGlyphIndex( aChar );
-            if( nGlyphIndex )
-                aCmap.insert( Cmap::value_type( nGlyphIndex, aChar ) );
-        }
-
-        // translate both glyph indices in kerning pairs to characters
-        // problem is that these are 1:n mappings...
-        KernVector aKernCharVector;
-        aKernCharVector.reserve( nKernCount );
-        KernVector::iterator it;
-        for( it = aKernGlyphVector.begin(); it != aKernGlyphVector.end(); ++it )
-        {
-            FT_Vector aKernVal;
-            FT_Error rcFT = FT_Get_Kerning( maFaceFT, it->mnChar1, it->mnChar2,
-                FT_KERNING_DEFAULT, &aKernVal );
-            aKernPair.mnKern = aKernVal.x >> 6;
-            if( (aKernPair.mnKern == 0) || (rcFT != FT_Err_Ok) )
-                continue;
-
-            typedef std::pair<Cmap::iterator,Cmap::iterator> CPair;
-            const CPair p1 = aCmap.equal_range( it->mnChar1 );
-            const CPair p2 = aCmap.equal_range( it->mnChar2 );
-            for( Cmap::const_iterator i1 = p1.first; i1 != p1.second; ++i1 )
-            {
-                aKernPair.mnChar1 = (*i1).second;
-                for( Cmap::const_iterator i2 = p2.first; i2 != p2.second; ++i2 )
-                {
-                    aKernPair.mnChar2 = (*i2).second;
-                    aKernCharVector.push_back( aKernPair );
-                }
-            }
-        }
-
-        // now move the resulting vector into VCL's ImplKernPairData[] format
-        nKernCount = aKernCharVector.size();
-        ImplKernPairData* pTo = new ImplKernPairData[ nKernCount ];
-        *ppKernPairs = pTo;
-        for( it = aKernCharVector.begin(); it != aKernCharVector.end(); ++it, ++pTo )
-        {
-            pTo->mnChar1 = it->mnChar1;
-            pTo->mnChar2 = it->mnChar2;
-            pTo->mnKern = it->mnKern;
-        }
-    }
-
-    return nKernCount;
-}
-
-// -----------------------------------------------------------------------
 // outline stuff
 // -----------------------------------------------------------------------
 
diff --git a/vcl/generic/glyphs/gcach_ftyp.hxx b/vcl/generic/glyphs/gcach_ftyp.hxx
index 83cec61..e2527b3 100644
--- a/vcl/generic/glyphs/gcach_ftyp.hxx
+++ b/vcl/generic/glyphs/gcach_ftyp.hxx
@@ -63,8 +63,7 @@ class FtFontInfo
 public:
                            FtFontInfo( const ImplDevFontAttributes&,
                                const OString& rNativeFileName,
-                               int nFaceNum, sal_IntPtr nFontId, int nSynthetic,
-                                const ExtraKernInfo* );
+                               int nFaceNum, sal_IntPtr nFontId, int nSynthetic);
                           ~FtFontInfo();
 
     const unsigned char*  GetTable( const char*, sal_uLong* pLength=0 ) const;
@@ -90,9 +89,6 @@ public:
     bool                  GetFontCodeRanges( CmapResult& ) const;
     const ImplFontCharMap* GetImplFontCharMap( void );
 
-    bool                  HasExtraKerning() const;
-    int                   GetExtraKernPairs( ImplKernPairData** ) const;
-
 private:
     FT_FaceRec_*    maFaceFT;
     FtFontFile*     mpFontFile;
@@ -114,8 +110,6 @@ private:
     mutable Int2IntMap* mpChar2Glyph;
     mutable Int2IntMap* mpGlyph2Char;
     void InitHashes() const;
-
-    const ExtraKernInfo* mpExtraKernInfo;
 };
 
 // these two inlines are very important for performance
@@ -147,8 +141,7 @@ public:
                         ~FreetypeManager();
 
     void                AddFontFile( const OString& rNormalizedName,
-                            int nFaceNum, sal_IntPtr nFontId, const ImplDevFontAttributes&,
-                            const ExtraKernInfo* );
+                            int nFaceNum, sal_IntPtr nFontId, const ImplDevFontAttributes&);
     void                AnnounceFonts( ImplDevFontList* ) const;
     void                ClearFontList();
 
diff --git a/vcl/generic/glyphs/gcach_layout.cxx b/vcl/generic/glyphs/gcach_layout.cxx
index 01d0904..e207c5e 100644
--- a/vcl/generic/glyphs/gcach_layout.cxx
+++ b/vcl/generic/glyphs/gcach_layout.cxx
@@ -214,12 +214,6 @@ static hb_position_t getGlyphKerningH(hb_font_t* /*font*/, void* pFontData,
 {
     // This callback is for old style 'kern' table, GPOS kerning is handled by HarfBuzz directly
 
-    // XXX: there is ServerFont::GetKernPairs() but it does many "smart" things
-    // that I'm not sure about, so I'm using FreeType directly
-    // P.S. if we decided not to use ServerFont::GetKernPairs() then it and all
-    // other implementattions should be removed, don't seem to be used
-    // anywhere.
-
     ServerFont* pFont = (ServerFont*) pFontData;
     FT_Face aFace = pFont->GetFtFace();
 
diff --git a/vcl/generic/glyphs/glyphcache.cxx b/vcl/generic/glyphs/glyphcache.cxx
index f9a2ee3..39cccd3 100644
--- a/vcl/generic/glyphs/glyphcache.cxx
+++ b/vcl/generic/glyphs/glyphcache.cxx
@@ -154,10 +154,10 @@ GlyphCache& GlyphCache::GetInstance()
 
 
 void GlyphCache::AddFontFile( const OString& rNormalizedName, int nFaceNum,
-    sal_IntPtr nFontId, const ImplDevFontAttributes& rDFA, const ExtraKernInfo* pExtraKern )
+    sal_IntPtr nFontId, const ImplDevFontAttributes& rDFA)
 {
     if( mpFtManager )
-        mpFtManager->AddFontFile( rNormalizedName, nFaceNum, nFontId, rDFA, pExtraKern );
+        mpFtManager->AddFontFile( rNormalizedName, nFaceNum, nFontId, rDFA);
 }
 
 
@@ -402,35 +402,4 @@ ImplServerFontEntry::~ImplServerFontEntry()
     if (mpServerFont)
         mpServerFont->Release();
 }
-
-
-ExtraKernInfo::ExtraKernInfo( sal_IntPtr nFontId )
-:   mbInitialized( false ),
-    mnFontId( nFontId ),
-    maUnicodeKernPairs( 0 )
-{}
-
-
-int ExtraKernInfo::GetUnscaledKernPairs( ImplKernPairData** ppKernPairs ) const
-{
-    if( !mbInitialized )
-        Initialize();
-
-    // return early if no kerning available
-    if( maUnicodeKernPairs.empty() )
-        return 0;
-
-    // allocate kern pair table
-    int nKernCount = maUnicodeKernPairs.size();
-    *ppKernPairs = new ImplKernPairData[ nKernCount ];
-
-    // fill in unicode kern pairs with the kern value scaled to the font width
-    ImplKernPairData* pKernData = *ppKernPairs;
-    UnicodeKernPairs::const_iterator it = maUnicodeKernPairs.begin();
-    for(; it != maUnicodeKernPairs.end(); ++it )
-        *(pKernData++) = *it;
-
-    return nKernCount;
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/generic/print/genpspgraphics.cxx b/vcl/generic/print/genpspgraphics.cxx
index c0e24e5..d6e6bd6 100644
--- a/vcl/generic/print/genpspgraphics.cxx
+++ b/vcl/generic/print/genpspgraphics.cxx
@@ -660,29 +660,6 @@ bool PspFontLayout::LayoutText( ImplLayoutArgs& rArgs )
         if( aMetric.width == -1 && aMetric.height == -1 )
             rArgs.NeedFallback( nCharPos, bRightToLeft );
 
-        // apply pair kerning to prev glyph if requested
-        if( SAL_LAYOUT_KERNING_PAIRS & rArgs.mnFlags )
-        {
-            if( nOldGlyphId > 0 )
-            {
-                const std::list< KernPair >& rKernPairs = mrPrinterGfx.getKernPairs(mbVertical);
-                for( std::list< KernPair >::const_iterator it = rKernPairs.begin();
-                     it != rKernPairs.end(); ++it )
-                {
-                    if( it->first == nOldGlyphId && it->second == nGlyphIndex )
-                    {
-                        int nTextScale = mrPrinterGfx.GetFontWidth();
-                        if( ! nTextScale )
-                            nTextScale = mrPrinterGfx.GetFontHeight();
-                        int nKern = (mbVertical ? it->kern_y : it->kern_x) * nTextScale;
-                        nGlyphWidth += nKern;
-                        aPrevItem.mnNewWidth = nGlyphWidth;
-                        break;
-                    }
-                }
-            }
-        }
-
         // finish previous glyph
         if( nOldGlyphId >= 0 )
             AppendGlyph( aPrevItem );
@@ -973,26 +950,9 @@ void GenPspGraphics::GetFontMetric( ImplFontMetricData *pMetric, int )
     }
 }
 
-sal_uLong GenPspGraphics::GetKernPairs( sal_uLong nPairs, ImplKernPairData *pKernPairs )
+sal_uLong GenPspGraphics::GetKernPairs( sal_uLong, ImplKernPairData* )
 {
-    const ::std::list< ::psp::KernPair >& rPairs( m_pPrinterGfx->getKernPairs() );
-    sal_uLong nHavePairs = rPairs.size();
-    if( pKernPairs && nPairs )
-    {
-        ::std::list< ::psp::KernPair >::const_iterator it;
-        unsigned int i;
-        int nTextScale = m_pPrinterGfx->GetFontWidth();
-        if( ! nTextScale )
-            nTextScale = m_pPrinterGfx->GetFontHeight();
-        for( i = 0, it = rPairs.begin(); i < nPairs && i < nHavePairs; i++, ++it )
-        {
-            pKernPairs[i].mnChar1   = it->first;
-            pKernPairs[i].mnChar2   = it->second;
-            pKernPairs[i].mnKern    = it->kern_x * nTextScale / 1000;
-        }
-
-    }
-    return nHavePairs;
+    return 0;
 }
 
 sal_Bool GenPspGraphics::GetGlyphBoundRect( sal_GlyphId nGlyphIndex, Rectangle& rRect )
diff --git a/vcl/generic/print/text_gfx.cxx b/vcl/generic/print/text_gfx.cxx
index 841a9db..751936b 100644
--- a/vcl/generic/print/text_gfx.cxx
+++ b/vcl/generic/print/text_gfx.cxx
@@ -664,28 +664,6 @@ PrinterGfx::GetCharWidth (sal_Unicode nFrom, sal_Unicode nTo, long *pWidthArray)
     return 1000;
 }
 
-const ::std::list< KernPair >& PrinterGfx::getKernPairs( bool bVertical ) const
-{
-    /*
-     *  Note: this is only a 80% solution: if a font is only
-     *  partially substituted in a string due to missing glyphs
-     *  the results may not be perfect; the more so the more the
-     *  substitution differs from the original metricwise. But
-     *  vcl only asks for KernPairs for each font once and NOT
-     *  in a string context this is the best we can do.
-     *  In future the kerning should be done on a per string basis.
-     */
-    fontID nFont = mnFontID;
-    if( mpFontSubstitutes )
-    {
-        ::boost::unordered_map< fontID, fontID >::const_iterator it =
-              mpFontSubstitutes->find( mnFontID );
-        if( it != mpFontSubstitutes->end() )
-            nFont = it->second;
-    }
-    return mrFontMgr.getKernPairs( nFont, bVertical );
-}
-
 /*
  * spool the converted truetype fonts to the page header after the page body is
  * complete
diff --git a/vcl/headless/svptext.cxx b/vcl/headless/svptext.cxx
index ff31603..ce90850 100644
--- a/vcl/headless/svptext.cxx
+++ b/vcl/headless/svptext.cxx
@@ -189,37 +189,6 @@ void SvpGlyphPeer::RemovingGlyph( GlyphData& rGlyphData )
     delete pGcpHelper;
 }
 
-
-// PspKernInfo allows on-demand-querying of psprint provided kerning info (#i29881#)
-class PspKernInfo : public ExtraKernInfo
-{
-public:
-    PspKernInfo( int nFontId ) : ExtraKernInfo(nFontId) {}
-protected:
-    virtual void Initialize() const;
-};
-
-
-void PspKernInfo::Initialize() const
-{
-    mbInitialized = true;
-
-    // get the kerning pairs from psprint
-    const psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
-    typedef std::list< psp::KernPair > PspKernPairs;
-    const PspKernPairs& rKernPairs = rMgr.getKernPairs( mnFontId );
-    if( rKernPairs.empty() )
-        return;
-
-    PspKernPairs::const_iterator it = rKernPairs.begin();
-    for(; it != rKernPairs.end(); ++it )
-    {
-        ImplKernPairData aKernPair = { it->first, it->second, it->kern_x };
-        maUnicodeKernPairs.insert( aKernPair );
-    }
-}
-
-
 sal_uInt16 SvpSalGraphics::SetFont( FontSelectPattern* pIFSD, int nFallbackLevel )
 {
     // release all no longer needed font resources
@@ -268,20 +237,9 @@ void SvpSalGraphics::GetFontMetric( ImplFontMetricData* pMetric, int nFallbackLe
 }
 
 
-sal_uLong SvpSalGraphics::GetKernPairs( sal_uLong nPairs, ImplKernPairData* pKernPairs )
+sal_uLong SvpSalGraphics::GetKernPairs( sal_uLong, ImplKernPairData* )
 {
-    sal_uLong nGotPairs = 0;
-
-    if( m_pServerFont[0] != NULL )
-    {
-        ImplKernPairData* pTmpKernPairs = NULL;
-        nGotPairs = m_pServerFont[0]->GetKernPairs( &pTmpKernPairs );
-        for( sal_uLong i = 0; i < nPairs && i < nGotPairs; ++i )
-            pKernPairs[ i ] = pTmpKernPairs[ i ];
-        delete[] pTmpKernPairs;
-    }
-
-    return nGotPairs;
+    return 0;
 }
 
 
@@ -325,17 +283,11 @@ void SvpSalGraphics::GetDevFontList( ImplDevFontList* pDevFontList )
         // normalize face number to the GlyphCache
         int nFaceNum = rMgr.getFontFaceNumber( aInfo.m_nID );
 
-        // for fonts where extra kerning info can be provided on demand
-        // an ExtraKernInfo object is supplied
-        const ExtraKernInfo* pExtraKernInfo = NULL;
-        if( aInfo.m_eType == psp::fonttype::Type1 )
-            pExtraKernInfo = new PspKernInfo( *it );
-
         // inform GlyphCache about this font provided by the PsPrint subsystem
         ImplDevFontAttributes aDFA = GenPspGraphics::Info2DevFontAttributes( aInfo );
         aDFA.mnQuality += 4096;
         const OString& rFileName = rMgr.getFontFileSysPath( aInfo.m_nID );
-        rGC.AddFontFile( rFileName, nFaceNum, aInfo.m_nID, aDFA, pExtraKernInfo );
+        rGC.AddFontFile( rFileName, nFaceNum, aInfo.m_nID, aDFA );
    }
 
     // announce glyphcache fonts
diff --git a/vcl/inc/generic/glyphcache.hxx b/vcl/inc/generic/glyphcache.hxx
index 2c227fc..179c2b2 100644
--- a/vcl/inc/generic/glyphcache.hxx
+++ b/vcl/inc/generic/glyphcache.hxx
@@ -29,7 +29,6 @@ class ServerFont;
 class GlyphCachePeer;
 class ServerFontLayoutEngine;
 class ServerFontLayout;
-class ExtraKernInfo;
 struct ImplKernPairData;
 class ImplFontOptions;
 
@@ -75,8 +74,7 @@ public:
     static GlyphCache&      GetInstance();
 
     void                        AddFontFile( const OString& rNormalizedName,
-                                    int nFaceNum, sal_IntPtr nFontId, const ImplDevFontAttributes&,
-                                    const ExtraKernInfo* = NULL );
+                                    int nFaceNum, sal_IntPtr nFontId, const ImplDevFontAttributes&);
     void                        AnnounceFonts( ImplDevFontList* ) const;
 
     ServerFont*                 CacheFont( const FontSelectPattern& );
@@ -200,7 +198,6 @@ public:
     const FontSelectPattern&   GetFontSelData() const      { return maFontSelData; }
 
     void                FetchFontMetric( ImplFontMetricData&, long& rFactor ) const;
-    sal_uLong           GetKernPairs( ImplKernPairData** ) const;
     const unsigned char* GetTable( const char* pName, sal_uLong* pLength );
     int                 GetEmUnits() const;
     const FT_Size_Metrics& GetMetricsFT() const { return maSizeFT->metrics; }
@@ -372,36 +369,6 @@ public:
     int             mnYOffset;
 };
 
-// =======================================================================
-
-// ExtraKernInfo allows an on-demand query of extra kerning info #i29881#
-// The kerning values have to be scaled to match the font size before use
-class VCL_DLLPUBLIC ExtraKernInfo
-{
-public:
-    ExtraKernInfo( sal_IntPtr nFontId );
-    virtual ~ExtraKernInfo() {}
-
-    int     GetUnscaledKernPairs( ImplKernPairData** ) const;
-
-protected:
-    mutable bool mbInitialized;
-    virtual void Initialize() const = 0;
-
-protected:
-    sal_IntPtr     mnFontId;
-
-    // container to map a unicode pair to an unscaled kerning value
-    struct PairEqual{ int operator()(const ImplKernPairData& rA, const ImplKernPairData& rB) const
-                          { return (rA.mnChar1 == rB.mnChar1) && (rA.mnChar2 == rB.mnChar2); } };
-    struct PairHash{ int operator()(const ImplKernPairData& rA) const
-                         { return (rA.mnChar1) * 256 ^ rA.mnChar2; } };
-    typedef boost::unordered_set< ImplKernPairData, PairHash, PairEqual > UnicodeKernPairs;
-    mutable UnicodeKernPairs maUnicodeKernPairs;
-};
-
-// =======================================================================
-
 #endif // _SV_GLYPHCACHE_HXX
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/generic/printergfx.hxx b/vcl/inc/generic/printergfx.hxx
index 68a1069..94848cb 100644
--- a/vcl/inc/generic/printergfx.hxx
+++ b/vcl/inc/generic/printergfx.hxx
@@ -121,7 +121,6 @@ class Font3;
 class GlyphSet;
 class PrinterJob;
 class PrintFontManager;
-struct KernPair;
 struct CharacterMetric;
 
 /*
@@ -401,8 +400,6 @@ public:
     { maTextColor = rTextColor; }
     sal_Int32       GetCharWidth (sal_uInt16 nFrom, sal_uInt16 nTo,
                                   long *pWidthArray);
-    const ::std::list< KernPair >& getKernPairs( bool bVertical = false ) const;
-
     // for CTL
     void            DrawGlyphs( const Point& rPoint,
                                 sal_GlyphId* pGlyphIds,
diff --git a/vcl/unx/generic/gdi/salgdi3.cxx b/vcl/unx/generic/gdi/salgdi3.cxx
index ba6628a..4a5f84f 100644
--- a/vcl/unx/generic/gdi/salgdi3.cxx
+++ b/vcl/unx/generic/gdi/salgdi3.cxx
@@ -88,37 +88,6 @@ struct _XRegion
     BOX *rects;
     BOX extents;
 };
-// ===========================================================================
-
-// PspKernInfo allows on-demand-querying of psprint provided kerning info (#i29881#)
-class PspKernInfo : public ExtraKernInfo
-{
-public:
-    PspKernInfo( int nFontId ) : ExtraKernInfo(nFontId) {}
-protected:
-    virtual void Initialize() const;
-};
-
-//--------------------------------------------------------------------------
-
-void PspKernInfo::Initialize() const
-{
-    mbInitialized = true;
-
-    // get the kerning pairs from psprint
-    const psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
-    typedef std::list< psp::KernPair > PspKernPairs;
-    const PspKernPairs& rKernPairs = rMgr.getKernPairs( mnFontId );
-    if( rKernPairs.empty() )
-        return;
-
-    PspKernPairs::const_iterator it = rKernPairs.begin();
-    for(; it != rKernPairs.end(); ++it )
-    {
-        ImplKernPairData aKernPair = { it->first, it->second, it->kern_x };
-        maUnicodeKernPairs.insert( aKernPair );
-    }
-}
 
 // ----------------------------------------------------------------------------
 //
@@ -593,17 +562,11 @@ void X11SalGraphics::GetDevFontList( ImplDevFontList *pList )
         // normalize face number to the GlyphCache
         int nFaceNum = rMgr.getFontFaceNumber( aInfo.m_nID );
 
-        // for fonts where extra kerning info can be provided on demand
-        // an ExtraKernInfo object is supplied
-        const ExtraKernInfo* pExtraKernInfo = NULL;
-        if( aInfo.m_eType == psp::fonttype::Type1 )
-            pExtraKernInfo = new PspKernInfo( *it );
-
         // inform GlyphCache about this font provided by the PsPrint subsystem
         ImplDevFontAttributes aDFA = GenPspGraphics::Info2DevFontAttributes( aInfo );
         aDFA.mnQuality += 4096;
         const OString& rFileName = rMgr.getFontFileSysPath( aInfo.m_nID );
-        rGC.AddFontFile( rFileName, nFaceNum, aInfo.m_nID, aDFA, pExtraKernInfo );
+        rGC.AddFontFile( rFileName, nFaceNum, aInfo.m_nID, aDFA );
    }
 
     // announce glyphcache fonts
@@ -665,20 +628,8 @@ X11SalGraphics::GetFontMetric( ImplFontMetricData *pMetric, int nFallbackLevel )
 // ---------------------------------------------------------------------------
 
 sal_uLong
-X11SalGraphics::GetKernPairs( sal_uLong nPairs, ImplKernPairData *pKernPairs )
+X11SalGraphics::GetKernPairs( sal_uLong, ImplKernPairData* )
 {
-    if( ! bPrinter_ )
-    {
-        if( mpServerFont[0] != NULL )
-        {
-            ImplKernPairData* pTmpKernPairs;
-            sal_uLong nGotPairs = mpServerFont[0]->GetKernPairs( &pTmpKernPairs );
-            for( unsigned int i = 0; i < nPairs && i < nGotPairs; ++i )
-                pKernPairs[ i ] = pTmpKernPairs[ i ];
-            delete[] pTmpKernPairs;
-            return nGotPairs;
-        }
-    }
     return 0;
 }
 


More information about the Libreoffice-commits mailing list