vcl/source/fontsubset/sft.cxx | 111 ++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 56 deletions(-)
New commits: commit d3f9b3029a1b5f6b389978509fdf8de7e128a4b3 Author: Khaled Hosny <kha...@aliftype.com> AuthorDate: Mon Dec 5 22:11:09 2022 +0200 Commit: خالد حسني <kha...@aliftype.com> CommitDate: Tue Dec 6 04:25:17 2022 +0000 Shuffle code around Change-Id: I3b3a88c91634fb19a39d21cdd0095d34badea1e0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143687 Tested-by: Jenkins Reviewed-by: خالد حسني <kha...@aliftype.com> diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx index ee2e0de65dbc..6250a1ee6f06 100644 --- a/vcl/source/fontsubset/sft.cxx +++ b/vcl/source/fontsubset/sft.cxx @@ -1809,9 +1809,61 @@ 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&); +namespace +{ +void FillFontSubsetInfo(AbstractTrueTypeFont* ttf, FontSubsetInfo& rInfo) +{ + TTGlobalFontInfo aTTInfo; + GetTTGlobalFontInfo(ttf, &aTTInfo); + + rInfo.m_aPSName = OUString::fromUtf8(aTTInfo.psname); + rInfo.m_nFontType = FontType::SFNT_TTF; + rInfo.m_aFontBBox + = tools::Rectangle(Point(aTTInfo.xMin, aTTInfo.yMin), Point(aTTInfo.xMax, aTTInfo.yMax)); + rInfo.m_nCapHeight = aTTInfo.yMax; // Well ... + rInfo.m_nAscent = aTTInfo.winAscent; + rInfo.m_nDescent = aTTInfo.winDescent; + + // mac fonts usually do not have an OS2-table + // => get valid ascent/descent values from other tables + if (!rInfo.m_nAscent) + rInfo.m_nAscent = +aTTInfo.typoAscender; + if (!rInfo.m_nAscent) + rInfo.m_nAscent = +aTTInfo.ascender; + if (!rInfo.m_nDescent) + rInfo.m_nDescent = +aTTInfo.typoDescender; + if (!rInfo.m_nDescent) + rInfo.m_nDescent = -aTTInfo.descender; + + rInfo.m_bFilled = true; +} + +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); + + rInfo.LoadFont(FontType::CFF_FONT, pFontBytes, nByteLength); + bool bRet = rInfo.CreateFontSubset(FontType::TYPE1_PFB, pStream, nullptr, pGlyphIds, pEncoding, + nGlyphCount); + + if (bRet) + { + rOutBuffer.resize(pStream->TellEnd()); + pStream->Seek(0); + auto nRead = pStream->ReadBytes(rOutBuffer.data(), rOutBuffer.size()); + if (nRead != rOutBuffer.size()) + { + rOutBuffer.clear(); + return false; + } + } + + return bRet; +} +} bool CreateTTFfontSubset(vcl::AbstractTrueTypeFont& rTTF, std::vector<sal_uInt8>& rOutBuffer, const sal_GlyphId* pGlyphIds, const sal_uInt8* pEncoding, @@ -1881,32 +1933,6 @@ bool CreateTTFfontSubset(vcl::AbstractTrueTypeFont& rTTF, std::vector<sal_uInt8> == vcl::SFErrCodes::Ok); } -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); - - rInfo.LoadFont(FontType::CFF_FONT, pFontBytes, nByteLength); - bool bRet = rInfo.CreateFontSubset(FontType::TYPE1_PFB, pStream, nullptr, pGlyphIds, pEncoding, - nGlyphCount); - - if (bRet) - { - rOutBuffer.resize(pStream->TellEnd()); - pStream->Seek(0); - auto nRead = pStream->ReadBytes(rOutBuffer.data(), rOutBuffer.size()); - if (nRead != rOutBuffer.size()) - { - rOutBuffer.clear(); - return false; - } - } - - return bRet; -} - GlyphOffsets::GlyphOffsets(sal_uInt8 *sfntP, sal_uInt32 sfntLen) { sal_uInt8 *loca = nullptr; @@ -2259,33 +2285,6 @@ void GetTTGlobalFontInfo(AbstractTrueTypeFont *ttf, TTGlobalFontInfo *info) } } -static void FillFontSubsetInfo(AbstractTrueTypeFont *ttf, FontSubsetInfo& rInfo) -{ - TTGlobalFontInfo aTTInfo; - GetTTGlobalFontInfo(ttf, &aTTInfo); - - rInfo.m_aPSName = OUString::fromUtf8(aTTInfo.psname); - rInfo.m_nFontType = FontType::SFNT_TTF; - rInfo.m_aFontBBox - = tools::Rectangle(Point(aTTInfo.xMin, aTTInfo.yMin), Point(aTTInfo.xMax, aTTInfo.yMax)); - rInfo.m_nCapHeight = aTTInfo.yMax; // Well ... - rInfo.m_nAscent = aTTInfo.winAscent; - rInfo.m_nDescent = aTTInfo.winDescent; - - // mac fonts usually do not have an OS2-table - // => get valid ascent/descent values from other tables - if (!rInfo.m_nAscent) - rInfo.m_nAscent = +aTTInfo.typoAscender; - if (!rInfo.m_nAscent) - rInfo.m_nAscent = +aTTInfo.ascender; - if (!rInfo.m_nDescent) - rInfo.m_nDescent = +aTTInfo.typoDescender; - if (!rInfo.m_nDescent) - rInfo.m_nDescent = -aTTInfo.descender; - - rInfo.m_bFilled = true; -} - std::unique_ptr<GlyphData> GetTTRawGlyphData(AbstractTrueTypeFont *ttf, sal_uInt32 glyphID) { if (glyphID >= ttf->glyphCount())