vcl/inc/quartz/salgdi.h |    2 --
 vcl/quartz/ctfonts.cxx  |   48 +++++++++++++++---------------------------------
 2 files changed, 15 insertions(+), 35 deletions(-)

New commits:
commit 26bac421905b53580154c9cf3d567a5f13786c67
Author:     Khaled Hosny <kha...@aliftype.com>
AuthorDate: Sat Oct 29 12:33:41 2022 +0200
Commit:     خالد حسني <kha...@aliftype.com>
CommitDate: Sat Oct 29 16:15:19 2022 +0200

    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: خالد حسني <kha...@aliftype.com>

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

Reply via email to