summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorKhaled Hosny <khaled@aliftype.com>2022-10-29 12:33:41 +0200
committerخالد حسني <khaled@aliftype.com>2022-10-29 16:15:19 +0200
commit26bac421905b53580154c9cf3d567a5f13786c67 (patch)
treedd8d7781510dea204721d5f0b280b2d21e08df6c /vcl
parent8ca507a619313ead970ad03a71416dcebea91405 (diff)
vcl: fold CoreTextFontFace::GetFonTtable into its only user
Change-Id: I3201add2e10d9cf01fc48b8d934822fc7b1941d9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142012 Tested-by: Jenkins Reviewed-by: خالد حسني <khaled@aliftype.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/quartz/salgdi.h2
-rw-r--r--vcl/quartz/ctfonts.cxx48
2 files changed, 15 insertions, 35 deletions
diff --git a/vcl/inc/quartz/salgdi.h b/vcl/inc/quartz/salgdi.h
index a0e00c6c2af2..b621e715ef54 100644
--- a/vcl/inc/quartz/salgdi.h
+++ b/vcl/inc/quartz/salgdi.h
@@ -68,8 +68,6 @@ public:
CTFontDescriptorRef GetFontDescriptorRef() const { return mxFontDescriptor; }
- int GetFontTable( uint32_t nTagCode, unsigned char* ) const;
-
rtl::Reference<LogicalFontInstance> CreateFontInstance(const vcl::font::FontSelectPattern&) const override;
virtual hb_blob_t* GetHbTable(hb_tag_t nTag) const override;
diff --git a/vcl/quartz/ctfonts.cxx b/vcl/quartz/ctfonts.cxx
index 81ab7a6ad2dc..861c57fa1ba9 100644
--- a/vcl/quartz/ctfonts.cxx
+++ b/vcl/quartz/ctfonts.cxx
@@ -218,13 +218,13 @@ bool CoreTextFont::GetGlyphOutline(sal_GlyphId nId, basegfx::B2DPolyPolygon& rRe
hb_blob_t* CoreTextFontFace::GetHbTable(hb_tag_t nTag) const
{
hb_blob_t* pBlob = nullptr;
+ CTFontDescriptorRef pFontDesc = reinterpret_cast<CTFontDescriptorRef>(GetFontId());
if (!nTag)
{
// If nTag is 0, the whole font data is requested. CoreText does not
// give us that, so we will construct an HarfBuzz face from CoreText
// table data and return the blob of that face.
- auto pFontDesc = reinterpret_cast<CTFontDescriptorRef>(GetFontId());
auto rCTFont = CTFontCreateWithFontDescriptor(pFontDesc, 0.0, nullptr);
auto pTags = CTFontCopyAvailableTables(rCTFont, kCTFontTableOptionNoOptions);
@@ -252,18 +252,24 @@ hb_blob_t* CoreTextFontFace::GetHbTable(hb_tag_t nTag) const
return pBlob;
}
- sal_uLong nLength = 0;
- unsigned char* pBuffer = nullptr;
- nLength = GetFontTable(nTag, nullptr);
+ CTFontRef pFont = CTFontCreateWithFontDescriptor(pFontDesc, 0.0, nullptr);
+ CFDataRef pData = CTFontCopyTable(pFont, nTag, kCTFontTableOptionNoOptions);
+
+ const CFIndex nLength = pData ? CFDataGetLength(pData) : 0;
if (nLength > 0)
{
- pBuffer = new unsigned char[nLength];
- GetFontTable(nTag, pBuffer);
+ auto pBuffer = new UInt8[nLength];
+ const CFRange aRange = CFRangeMake(0, nLength);
+ CFDataGetBytes(pData, aRange, pBuffer);
+
+ pBlob = hb_blob_create(reinterpret_cast<const char*>(pBuffer), nLength,
+ HB_MEMORY_MODE_READONLY, pBuffer,
+ [](void* data) { delete[] static_cast<UInt8*>(data); });
}
+ if (pData)
+ CFRelease(pData);
+ CFRelease(pFont);
- if (pBuffer != nullptr)
- pBlob = hb_blob_create(reinterpret_cast<const char*>(pBuffer), nLength, HB_MEMORY_MODE_READONLY,
- pBuffer, [](void* data){ delete[] static_cast<unsigned char*>(data); });
return pBlob;
}
@@ -317,30 +323,6 @@ rtl::Reference<LogicalFontInstance> CoreTextFontFace::CreateFontInstance(const v
return new CoreTextFont(*this, rFSD);
}
-int CoreTextFontFace::GetFontTable(uint32_t nTagCode, unsigned char* pResultBuf ) const
-{
- // get the raw table length
- CTFontDescriptorRef pFontDesc = reinterpret_cast<CTFontDescriptorRef>( GetFontId());
- CTFontRef rCTFont = CTFontCreateWithFontDescriptor( pFontDesc, 0.0, nullptr);
- CFDataRef pDataRef = CTFontCopyTable(rCTFont, nTagCode, kCTFontTableOptionNoOptions);
- CFRelease( rCTFont);
- if( !pDataRef)
- return 0;
-
- const CFIndex nByteLength = CFDataGetLength( pDataRef);
-
- // get the raw table data if requested
- if( pResultBuf && (nByteLength > 0))
- {
- const CFRange aFullRange = CFRangeMake( 0, nByteLength);
- CFDataGetBytes( pDataRef, aFullRange, reinterpret_cast<UInt8*>(pResultBuf));
- }
-
- CFRelease( pDataRef);
-
- return static_cast<int>(nByteLength);
-}
-
FontAttributes DevFontFromCTFontDescriptor( CTFontDescriptorRef pFD, bool* bFontEnabled )
{
// all CoreText fonts are device fonts that can rotate just fine