vcl/inc/sft.hxx | 10 ---------- vcl/source/font/PhysicalFontFace.cxx | 11 +---------- vcl/source/fontsubset/sft.cxx | 24 +++++++++++++++++++----- 3 files changed, 20 insertions(+), 25 deletions(-)
New commits: commit 1d5a02d12eacadb708c18e70db747e80ab8817a9 Author: Khaled Hosny <kha...@aliftype.com> AuthorDate: Mon Dec 5 22:07:29 2022 +0200 Commit: خالد حسني <kha...@aliftype.com> CommitDate: Tue Dec 6 04:24:42 2022 +0000 Simplify PhysicalFontFace::CreateFontSubset() a bit Hide the logic inside fontsubset and don’t leak it to the caller. Change-Id: Ibc845e0051eaeb64e8de42f80d4d404fd6a3880e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143686 Tested-by: Jenkins Reviewed-by: خالد حسني <kha...@aliftype.com> diff --git a/vcl/inc/sft.hxx b/vcl/inc/sft.hxx index 52d9c3db014d..b5fc71b44530 100644 --- a/vcl/inc/sft.hxx +++ b/vcl/inc/sft.hxx @@ -608,20 +608,10 @@ class TrueTypeFont; int nGlyphs); VCL_DLLPUBLIC bool CreateTTFfontSubset(AbstractTrueTypeFont& aTTF, - std::vector<sal_uInt8>& rOutBuffer, - const sal_GlyphId* pGlyphIds, - const sal_uInt8* pEncoding, - int nGlyphCount); - - VCL_DLLPUBLIC bool CreateCFFfontSubset(const unsigned char* pFontBytes, - int nByteLength, std::vector<sal_uInt8>& rOutBuffer, const sal_GlyphId* pGlyphIds, const sal_uInt8* pEncoding, int nGlyphCount, FontSubsetInfo& rInfo); - - VCL_DLLPUBLIC void FillFontSubsetInfo(AbstractTrueTypeFont *ttf, - FontSubsetInfo& rInfo); /** * Generates a new PostScript Type42 font and dumps it to <b>outf</b> file. * This function substitutes glyph 0 for all glyphIDs that are not found in the font. diff --git a/vcl/source/font/PhysicalFontFace.cxx b/vcl/source/font/PhysicalFontFace.cxx index 72c0a86802c8..aa9a9327f708 100644 --- a/vcl/source/font/PhysicalFontFace.cxx +++ b/vcl/source/font/PhysicalFontFace.cxx @@ -363,17 +363,8 @@ bool PhysicalFontFace::CreateFontSubset(std::vector<sal_uInt8>& rOutBuffer, if (aSftFont.initialize() != SFErrCodes::Ok) return false; - // Get details about the subset font. - FillFontSubsetInfo(&aSftFont, rInfo); - - // Shortcut for CFF-subsetting. - auto aData = GetRawFontData(T_CFF); - if (!aData.empty()) - return CreateCFFfontSubset(aData.data(), aData.size(), rOutBuffer, pGlyphIds, pEncoding, - nGlyphCount, rInfo); - // write subset into destination file - return CreateTTFfontSubset(aSftFont, rOutBuffer, pGlyphIds, pEncoding, nGlyphCount); + return CreateTTFfontSubset(aSftFont, rOutBuffer, pGlyphIds, pEncoding, nGlyphCount, rInfo); } bool PhysicalFontFace::HasColorLayers() const diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx index 205be4f8ce26..ee2e0de65dbc 100644 --- a/vcl/source/fontsubset/sft.cxx +++ b/vcl/source/fontsubset/sft.cxx @@ -1809,10 +1809,24 @@ SFErrCodes CreateTTFromTTGlyphs(AbstractTrueTypeFont *ttf, return res; } +static void FillFontSubsetInfo(AbstractTrueTypeFont*, FontSubsetInfo&); +static bool CreateCFFfontSubset(const unsigned char*, int, std::vector<sal_uInt8>&, + const sal_GlyphId*, const sal_uInt8*, int, FontSubsetInfo&); + bool CreateTTFfontSubset(vcl::AbstractTrueTypeFont& rTTF, std::vector<sal_uInt8>& rOutBuffer, const sal_GlyphId* pGlyphIds, const sal_uInt8* pEncoding, - const int nOrigGlyphCount) + const int nOrigGlyphCount, FontSubsetInfo& rInfo) { + // Get details about the subset font. + FillFontSubsetInfo(&rTTF, rInfo); + + // Shortcut for CFF-subsetting. + sal_uInt32 nCFF; + const sal_uInt8* pCFF = rTTF.table(O_CFF, nCFF); + if (nCFF) + return CreateCFFfontSubset(pCFF, nCFF, rOutBuffer, pGlyphIds, pEncoding, + nOrigGlyphCount, rInfo); + // Multiple questions: // - Why is there a glyph limit? // MacOS used to handle 257 glyphs... @@ -1867,9 +1881,9 @@ bool CreateTTFfontSubset(vcl::AbstractTrueTypeFont& rTTF, std::vector<sal_uInt8> == vcl::SFErrCodes::Ok); } -bool CreateCFFfontSubset(const unsigned char* pFontBytes, int nByteLength, - std::vector<sal_uInt8>& rOutBuffer, const sal_GlyphId* pGlyphIds, - const sal_uInt8* pEncoding, int nGlyphCount, FontSubsetInfo& rInfo) +static bool CreateCFFfontSubset(const unsigned char* pFontBytes, int nByteLength, + std::vector<sal_uInt8>& rOutBuffer, const sal_GlyphId* pGlyphIds, + const sal_uInt8* pEncoding, int nGlyphCount, FontSubsetInfo& rInfo) { utl::TempFileFast aTempFile; SvStream* pStream = aTempFile.GetStream(StreamMode::READWRITE); @@ -2245,7 +2259,7 @@ void GetTTGlobalFontInfo(AbstractTrueTypeFont *ttf, TTGlobalFontInfo *info) } } -void FillFontSubsetInfo(AbstractTrueTypeFont *ttf, FontSubsetInfo& rInfo) +static void FillFontSubsetInfo(AbstractTrueTypeFont *ttf, FontSubsetInfo& rInfo) { TTGlobalFontInfo aTTInfo; GetTTGlobalFontInfo(ttf, &aTTInfo);