vcl/inc/fontsubset.hxx | 34 ++++++++++++++------------ vcl/quartz/salgdicommon.cxx | 6 ++-- vcl/source/fontsubset/cff.cxx | 4 +-- vcl/source/fontsubset/fontsubset.cxx | 36 ++++++++++++++-------------- vcl/source/gdi/pdfwriter_impl.cxx | 18 +++++++------- vcl/unx/generic/fontmanager/fontmanager.cxx | 6 ++-- vcl/unx/generic/print/glyphset.cxx | 4 +-- vcl/win/gdi/salfont.cxx | 6 ++-- 8 files changed, 59 insertions(+), 55 deletions(-)
New commits: commit eecf39c6e44e25a5a78aa7b435d07a9c53c628c4 Author: Noel Grandin <noel.gran...@collabora.co.uk> Date: Wed Feb 8 13:32:40 2017 +0200 convert FontType to scoped enum Change-Id: Ieb8f90be8effde5f25bc872784c3ea2177b14bf9 Reviewed-on: https://gerrit.libreoffice.org/34056 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/vcl/inc/fontsubset.hxx b/vcl/inc/fontsubset.hxx index 11f5810..58cdb1e 100644 --- a/vcl/inc/fontsubset.hxx +++ b/vcl/inc/fontsubset.hxx @@ -22,35 +22,39 @@ #include <rtl/ustring.hxx> #include <tools/gen.hxx> +#include <o3tl/typed_flags_set.hxx> #include "salglyphid.hxx" namespace vcl { struct TrueTypeFont; } ///< SFT's idea of a TTF font +enum class FontType { + NO_FONT = 0, + SFNT_TTF = 1<<1, ///< SFNT container with TrueType glyphs + SFNT_CFF = 1<<2, ///< SFNT container with CFF-container + TYPE1_PFA = 1<<3, ///< PSType1 Postscript Font Ascii + TYPE1_PFB = 1<<4, ///< PSType1 Postscript Font Binary + CFF_FONT = 1<<5, ///< CFF-container with PSType2 glyphs + TYPE3_FONT = 1<<6, ///< PSType3 Postscript font + TYPE42_FONT = 1<<7, ///< PSType42 wrapper for an SFNT_TTF + ANY_SFNT = SFNT_TTF | SFNT_CFF, + ANY_TYPE1 = TYPE1_PFA | TYPE1_PFB +}; +namespace o3tl { + template<> struct typed_flags<FontType> : is_typed_flags<FontType, (1<<8)-1> {}; +} + class FontSubsetInfo final { public: explicit FontSubsetInfo(); ~FontSubsetInfo(); - enum FontType { - NO_FONT = 0, - SFNT_TTF = 1<<1, ///< SFNT container with TrueType glyphs - SFNT_CFF = 1<<2, ///< SFNT container with CFF-container - TYPE1_PFA = 1<<3, ///< PSType1 Postscript Font Ascii - TYPE1_PFB = 1<<4, ///< PSType1 Postscript Font Binary - CFF_FONT = 1<<5, ///< CFF-container with PSType2 glyphs - TYPE3_FONT = 1<<6, ///< PSType3 Postscript font - TYPE42_FONT = 1<<7, ///< PSType42 wrapper for an SFNT_TTF - ANY_SFNT = SFNT_TTF | SFNT_CFF, - ANY_TYPE1 = TYPE1_PFA | TYPE1_PFB - }; - bool LoadFont( FontType eInFontType, const unsigned char* pFontBytes, int nByteLength ); bool LoadFont( vcl::TrueTypeFont* pSftTrueTypeFont ); - bool CreateFontSubset( int nOutFontTypeMask, + bool CreateFontSubset( FontType nOutFontTypeMask, FILE* pOutFile, const char* pOutFontName, const sal_GlyphId* pGlyphIds, const sal_uInt8* pEncodedIds, int nReqGlyphCount, sal_Int32* pOutGlyphWidths = nullptr ); @@ -72,7 +76,7 @@ private: vcl::TrueTypeFont* mpSftTTFont; // subset-request details - int mnReqFontTypeMask; ///< allowed subset-target font types + FontType mnReqFontTypeMask; ///< allowed subset-target font types FILE* mpOutFile; const char* mpReqFontName; const sal_GlyphId* mpReqGlyphIds; diff --git a/vcl/quartz/salgdicommon.cxx b/vcl/quartz/salgdicommon.cxx index db14e36..b472a49 100644 --- a/vcl/quartz/salgdicommon.cxx +++ b/vcl/quartz/salgdicommon.cxx @@ -208,13 +208,13 @@ bool AquaSalGraphics::CreateFontSubset( const OUString& rToFile, { // provide the raw-CFF data to the subsetter ByteCount nCffLen = aBuffer.size(); - rInfo.LoadFont( FontSubsetInfo::CFF_FONT, &aBuffer[0], nCffLen ); + rInfo.LoadFont( FontType::CFF_FONT, &aBuffer[0], nCffLen ); // NOTE: assuming that all glyphids requested on Aqua are fully translated // make the subsetter provide the requested subset FILE* pOutFile = fopen( aToFile.getStr(), "wb" ); - bool bRC = rInfo.CreateFontSubset( FontSubsetInfo::TYPE1_PFB, pOutFile, nullptr, + bool bRC = rInfo.CreateFontSubset( FontType::TYPE1_PFB, pOutFile, nullptr, pGlyphIds, pEncoding, nGlyphCount, pGlyphWidths ); fclose( pOutFile ); return bRC; @@ -234,7 +234,7 @@ bool AquaSalGraphics::CreateFontSubset( const OUString& rToFile, // get details about the subsetted font TTGlobalFontInfo aTTInfo; ::GetTTGlobalFontInfo( pSftFont, &aTTInfo ); - rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; + rInfo.m_nFontType = FontType::SFNT_TTF; rInfo.m_aPSName = OUString( aTTInfo.psname, std::strlen(aTTInfo.psname), RTL_TEXTENCODING_UTF8 ); rInfo.m_aFontBBox = Rectangle( Point( aTTInfo.xMin, aTTInfo.yMin ), diff --git a/vcl/source/fontsubset/cff.cxx b/vcl/source/fontsubset/cff.cxx index 184f29e..9da87efe 100644 --- a/vcl/source/fontsubset/cff.cxx +++ b/vcl/source/fontsubset/cff.cxx @@ -2135,7 +2135,7 @@ bool CffSubsetterContext::emitAsType1( Type1Emitter& rEmitter, rFSInfo.m_nDescent = -rFSInfo.m_aFontBBox.Top(); // for all letters rFSInfo.m_nCapHeight = rFSInfo.m_nAscent; // for top-flat capital letters - rFSInfo.m_nFontType = rEmitter.mbPfbSubset ? FontSubsetInfo::TYPE1_PFB : FontSubsetInfo::TYPE1_PFA; + rFSInfo.m_nFontType = rEmitter.mbPfbSubset ? FontType::TYPE1_PFB : FontType::TYPE1_PFA; rFSInfo.m_aPSName = OUString( rEmitter.maSubsetName, strlen(rEmitter.maSubsetName), RTL_TEXTENCODING_UTF8 ); return true; @@ -2150,7 +2150,7 @@ bool FontSubsetInfo::CreateFontSubsetFromCff( GlyphWidth* pOutGlyphWidths ) // emit Type1 subset from the CFF input // TODO: also support CFF->CFF subsetting (when PDF-export and PS-printing need it) - const bool bPfbSubset = (0 != (mnReqFontTypeMask & FontSubsetInfo::TYPE1_PFB)); + const bool bPfbSubset(mnReqFontTypeMask & FontType::TYPE1_PFB); Type1Emitter aType1Emitter( mpOutFile, bPfbSubset); aType1Emitter.setSubsetName( mpReqFontName); bRC = aCff.emitAsType1( aType1Emitter, diff --git a/vcl/source/fontsubset/fontsubset.cxx b/vcl/source/fontsubset/fontsubset.cxx index 3e496b1..cc18c4d 100644 --- a/vcl/source/fontsubset/fontsubset.cxx +++ b/vcl/source/fontsubset/fontsubset.cxx @@ -28,12 +28,12 @@ FontSubsetInfo::FontSubsetInfo() : m_nAscent( 0) , m_nDescent( 0) , m_nCapHeight( 0) - , m_nFontType( FontSubsetInfo::NO_FONT) + , m_nFontType( FontType::NO_FONT) , mpInFontBytes( nullptr) , mnInByteLength( 0) - , meInFontType( FontSubsetInfo::NO_FONT) + , meInFontType( FontType::NO_FONT) , mpSftTTFont( nullptr) - , mnReqFontTypeMask(0) + , mnReqFontTypeMask( FontType::NO_FONT ) , mpOutFile(nullptr) , mpReqFontName(nullptr) , mpReqGlyphIds(nullptr) @@ -48,7 +48,7 @@ FontSubsetInfo::~FontSubsetInfo() // prepare subsetting for fonts where the input font file is mapped bool FontSubsetInfo::LoadFont( - FontSubsetInfo::FontType eInFontType, + FontType eInFontType, const unsigned char* pInFontBytes, int nInByteLength) { SAL_WARN_IF( (mpSftTTFont != nullptr), "vcl", "Subset from SFT and from mapped font-file requested"); @@ -63,12 +63,12 @@ bool FontSubsetInfo::LoadFont( vcl::TrueTypeFont* pSftTTFont ) { SAL_WARN_IF( (mpInFontBytes != nullptr), "vcl", "Subset from SFT and from mapped font-file requested"); mpSftTTFont = pSftTTFont; - meInFontType = ANY_SFNT; + meInFontType = FontType::ANY_SFNT; return (mpSftTTFont == nullptr); } bool FontSubsetInfo::CreateFontSubset( - int nReqFontTypeMask, + FontType nReqFontTypeMask, FILE* pOutFile, const char* pReqFontName, const sal_GlyphId* pReqGlyphIds, const sal_uInt8* pReqEncodedIds, int nReqGlyphCount, sal_Int32* pOutGlyphWidths) @@ -88,21 +88,21 @@ bool FontSubsetInfo::CreateFontSubset( // TODO: better match available input-type to possible subset-types switch( meInFontType) { - case SFNT_TTF: - case SFNT_CFF: - case ANY_SFNT: + case FontType::SFNT_TTF: + case FontType::SFNT_CFF: + case FontType::ANY_SFNT: bOK = CreateFontSubsetFromSfnt( pOutGlyphWidths); break; - case CFF_FONT: + case FontType::CFF_FONT: bOK = CreateFontSubsetFromCff( pOutGlyphWidths); break; - case TYPE1_PFA: - case TYPE1_PFB: - case ANY_TYPE1: + case FontType::TYPE1_PFA: + case FontType::TYPE1_PFB: + case FontType::ANY_TYPE1: bOK = CreateFontSubsetFromType1( pOutGlyphWidths); break; // fall through - case NO_FONT: + case FontType::NO_FONT: // fall through default: OSL_FAIL( "unhandled type in CreateFontSubset()"); @@ -120,7 +120,7 @@ bool FontSubsetInfo::CreateFontSubsetFromSfnt( sal_Int32* pOutGlyphWidths ) const sal_uInt8* pCffBytes = nullptr; if( GetSfntTable( mpSftTTFont, O_CFF, &pCffBytes, &nCffLength)) { - LoadFont( CFF_FONT, pCffBytes, nCffLength); + LoadFont( FontType::CFF_FONT, pCffBytes, nCffLength); const bool bOK = CreateFontSubsetFromCff( pOutGlyphWidths); return bOK; } @@ -136,18 +136,18 @@ bool FontSubsetInfo::CreateFontSubsetFromSfnt( sal_Int32* pOutGlyphWidths ) sal_uInt8* pEncArray = const_cast<sal_uInt8*>( mpReqEncodedIds ); #endif int nSFTErr = vcl::SF_BADARG; - if( (mnReqFontTypeMask & TYPE42_FONT) != 0 ) + if( mnReqFontTypeMask & FontType::TYPE42_FONT ) { nSFTErr = CreateT42FromTTGlyphs( mpSftTTFont, mpOutFile, mpReqFontName, aShortGlyphIds.data(), pEncArray, mnReqGlyphCount ); } - else if( (mnReqFontTypeMask & TYPE3_FONT) != 0 ) + else if( mnReqFontTypeMask & FontType::TYPE3_FONT ) { nSFTErr = CreateT3FromTTGlyphs( mpSftTTFont, mpOutFile, mpReqFontName, aShortGlyphIds.data(), pEncArray, mnReqGlyphCount, 0 /* 0 = horizontal, 1 = vertical */ ); } - else if( (mnReqFontTypeMask & SFNT_TTF) != 0 ) + else if( mnReqFontTypeMask & FontType::SFNT_TTF ) { // TODO: use CreateTTFromTTGlyphs() // TODO: move functionality from callers here diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index b3e0e38..73aa7f2 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -3228,12 +3228,12 @@ sal_Int32 PDFWriterImpl::emitFontDescriptor( const PhysicalFontFace* pFont, Font aLine.append( "/FontFile" ); switch( rInfo.m_nFontType ) { - case FontSubsetInfo::SFNT_TTF: + case FontType::SFNT_TTF: aLine.append( '2' ); break; - case FontSubsetInfo::TYPE1_PFA: - case FontSubsetInfo::TYPE1_PFB: - case FontSubsetInfo::ANY_TYPE1: + case FontType::TYPE1_PFA: + case FontType::TYPE1_PFB: + case FontType::ANY_TYPE1: break; default: OSL_FAIL( "unknown fonttype in PDF font descriptor" ); @@ -3348,7 +3348,7 @@ bool PDFWriterImpl::emitFonts() "/Length1 " ); sal_uInt64 nStartPos = 0; - if( aSubsetInfo.m_nFontType == FontSubsetInfo::SFNT_TTF ) + if( aSubsetInfo.m_nFontType == FontType::SFNT_TTF ) { aLine.append( (sal_Int32)nLength1 ); @@ -3370,12 +3370,12 @@ bool PDFWriterImpl::emitFonts() if ( osl::File::E_None != aFontFile.isEndOfFile(&bEOF) ) return false; } while( ! bEOF ); } - else if( (aSubsetInfo.m_nFontType & FontSubsetInfo::CFF_FONT) != 0 ) + else if( aSubsetInfo.m_nFontType & FontType::CFF_FONT) { // TODO: implement OSL_FAIL( "PDFWriterImpl does not support CFF-font subsets yet!" ); } - else if( (aSubsetInfo.m_nFontType & FontSubsetInfo::TYPE1_PFB) != 0 ) // TODO: also support PFA? + else if( aSubsetInfo.m_nFontType & FontType::TYPE1_PFB) // TODO: also support PFA? { std::unique_ptr<unsigned char[]> xBuffer(new unsigned char[nLength1]); @@ -3408,7 +3408,7 @@ bool PDFWriterImpl::emitFonts() } else { - SAL_INFO("vcl.pdfwriter", "PDF: CreateFontSubset result in not yet supported format=" << aSubsetInfo.m_nFontType); + SAL_INFO("vcl.pdfwriter", "PDF: CreateFontSubset result in not yet supported format=" << (int)aSubsetInfo.m_nFontType); aLine.append( "0 >>\nstream\n" ); } @@ -3445,7 +3445,7 @@ bool PDFWriterImpl::emitFonts() aLine.append( nFontObject ); aLine.append( " 0 obj\n" ); - aLine.append( ((aSubsetInfo.m_nFontType & FontSubsetInfo::ANY_TYPE1) != 0) ? + aLine.append( (aSubsetInfo.m_nFontType & FontType::ANY_TYPE1) ? "<</Type/Font/Subtype/Type1/BaseFont/" : "<</Type/Font/Subtype/TrueType/BaseFont/" ); appendSubsetName( lit->m_nFontID, aSubsetInfo.m_aPSName, aLine ); diff --git a/vcl/unx/generic/fontmanager/fontmanager.cxx b/vcl/unx/generic/fontmanager/fontmanager.cxx index f34960f..9a0193d 100644 --- a/vcl/unx/generic/fontmanager/fontmanager.cxx +++ b/vcl/unx/generic/fontmanager/fontmanager.cxx @@ -1006,7 +1006,7 @@ bool PrintFontManager::createFontSubset( if( !pFont ) return false; - rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; + rInfo.m_nFontType = FontType::SFNT_TTF; // reshuffle array of requested glyphs to make sure glyph0==notdef sal_uInt8 pEnc[256]; @@ -1057,7 +1057,7 @@ bool PrintFontManager::createFontSubset( const sal_uInt8* pCffBytes = nullptr; if( GetSfntTable( pTTFont, O_CFF, &pCffBytes, &nCffLength ) ) { - rInfo.LoadFont( FontSubsetInfo::CFF_FONT, pCffBytes, nCffLength ); + rInfo.LoadFont( FontType::CFF_FONT, pCffBytes, nCffLength ); #if 1 // TODO: remove 16bit->long conversion when related methods handle non-16bit glyphids sal_GlyphId aRequestedGlyphIds[256]; for( int i = 0; i < nGlyphs; ++i ) @@ -1073,7 +1073,7 @@ bool PrintFontManager::createFontSubset( // create font subset const char* const pGlyphSetName = nullptr; // TODO: better name? const bool bOK = rInfo.CreateFontSubset( - FontSubsetInfo::TYPE1_PFB, + FontType::TYPE1_PFB, pOutFile, pGlyphSetName, aRequestedGlyphIds, pEnc, nGlyphs, pWidths ); fclose( pOutFile ); diff --git a/vcl/unx/generic/print/glyphset.cxx b/vcl/unx/generic/print/glyphset.cxx index 3641fe1..531af28 100644 --- a/vcl/unx/generic/print/glyphset.cxx +++ b/vcl/unx/generic/print/glyphset.cxx @@ -217,9 +217,9 @@ static void CreatePSUploadableFont( TrueTypeFont* pSrcFont, FILE* pTmpFile, { // match the font-subset to the printer capabilities // TODO: allow CFF for capable printers - int nTargetMask = FontSubsetInfo::TYPE1_PFA | FontSubsetInfo::TYPE3_FONT; + FontType nTargetMask = FontType::TYPE1_PFA | FontType::TYPE3_FONT; if( bAllowType42 ) - nTargetMask |= FontSubsetInfo::TYPE42_FONT; + nTargetMask |= FontType::TYPE42_FONT; std::vector< EncEntry > aSorted( nGlyphCount, EncEntry() ); for( int i = 0; i < nGlyphCount; i++ ) diff --git a/vcl/win/gdi/salfont.cxx b/vcl/win/gdi/salfont.cxx index b6b4915..e9bc239 100644 --- a/vcl/win/gdi/salfont.cxx +++ b/vcl/win/gdi/salfont.cxx @@ -1658,8 +1658,8 @@ bool WinSalGraphics::CreateFontSubset( const OUString& rToFile, // provide a font subset from the CFF-table FILE* pOutFile = fopen( aToFile.getStr(), "wb" ); - rInfo.LoadFont( FontSubsetInfo::CFF_FONT, aRawCffData.get(), aRawCffData.size() ); - bool bRC = rInfo.CreateFontSubset( FontSubsetInfo::TYPE1_PFB, pOutFile, nullptr, + rInfo.LoadFont( FontType::CFF_FONT, aRawCffData.get(), aRawCffData.size() ); + bool bRC = rInfo.CreateFontSubset( FontType::TYPE1_PFB, pOutFile, nullptr, pGlyphIds, pEncoding, nGlyphCount, pGlyphWidths ); fclose( pOutFile ); return bRC; @@ -1682,7 +1682,7 @@ bool WinSalGraphics::CreateFontSubset( const OUString& rToFile, TTGlobalFontInfo aTTInfo; ::GetTTGlobalFontInfo( aSftTTF.get(), &aTTInfo ); - rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; + rInfo.m_nFontType = FontType::SFNT_TTF; rInfo.m_aPSName = ImplSalGetUniString( aTTInfo.psname ); rInfo.m_nAscent = aTTInfo.winAscent; rInfo.m_nDescent = aTTInfo.winDescent; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits