diff options
-rw-r--r-- | vcl/coretext/ctfonts.cxx | 39 | ||||
-rw-r--r-- | vcl/coretext/ctfonts.hxx | 17 | ||||
-rw-r--r-- | vcl/coretext/ctlayout.cxx | 12 | ||||
-rw-r--r-- | vcl/coretext/salgdi2.cxx | 1 |
4 files changed, 46 insertions, 23 deletions
diff --git a/vcl/coretext/ctfonts.cxx b/vcl/coretext/ctfonts.cxx index 19e325652857..3dcfe4fb0d61 100644 --- a/vcl/coretext/ctfonts.cxx +++ b/vcl/coretext/ctfonts.cxx @@ -36,22 +36,6 @@ // ======================================================================= -// CoreText specific physically available font face -class CTFontData -: public ImplMacFontData -{ -public: - explicit CTFontData( const ImplDevFontAttributes&, sal_IntPtr nFontId ); - virtual ~CTFontData( void ); - virtual PhysicalFontFace* Clone( void ) const; - - virtual ImplMacTextStyle* CreateMacTextStyle( const FontSelectPattern& ) const; - virtual ImplFontEntry* CreateFontInstance( /*const*/ FontSelectPattern& ) const; - virtual int GetFontTable( const char pTagName[5], unsigned char* ) const; -}; - -// ======================================================================= - class CTFontList : public SystemFontList { @@ -337,10 +321,8 @@ int CTFontData::GetFontTable( const char pTagName[5], unsigned char* pResultBuf // ======================================================================= -static void CTFontEnumCallBack( const void* pValue, void* pContext ) +ImplDevFontAttributes DevFontFromCTFontDescriptor( CTFontDescriptorRef pFD, bool* bFontEnabled ) { - CTFontDescriptorRef pFD = static_cast<CTFontDescriptorRef>(pValue); - // all CoreText fonts are device fonts that can rotate just fine ImplDevFontAttributes rDFA; rDFA.mbOrientation = true; @@ -368,9 +350,12 @@ static void CTFontEnumCallBack( const void* pValue, void* pContext ) rDFA.SetStyleName( GetOUString( pStyleName ) ); // get font-enabled status - int bFontEnabled = FALSE; - CFNumberRef pFontEnabled = (CFNumberRef)CTFontDescriptorCopyAttribute( pFD, kCTFontEnabledAttribute ); - CFNumberGetValue( pFontEnabled, kCFNumberIntType, &bFontEnabled ); + if( bFontEnabled ) { + int bEnabled = FALSE; + CFNumberRef pEnabled = (CFNumberRef)CTFontDescriptorCopyAttribute( pFD, kCTFontEnabledAttribute ); + CFNumberGetValue( pEnabled, kCFNumberIntType, &bEnabled ); + *bFontEnabled = bEnabled; + } // get font attributes CFDictionaryRef pAttrDict = (CFDictionaryRef)CTFontDescriptorCopyAttribute( pFD, kCTFontTraitsAttribute ); @@ -429,6 +414,16 @@ static void CTFontEnumCallBack( const void* pValue, void* pContext ) // TODO? also use the HEAD table if available to get more attributes // CFDataRef CTFontCopyTable( CTFontRef, kCTFontTableHead, /*kCTFontTableOptionNoOptions*/kCTFontTableOptionExcludeSynthetic ); + return rDFA; +} + +static void CTFontEnumCallBack( const void* pValue, void* pContext ) +{ + CTFontDescriptorRef pFD = static_cast<CTFontDescriptorRef>(pValue); + + bool bFontEnabled; + ImplDevFontAttributes rDFA = DevFontFromCTFontDescriptor( pFD, &bFontEnabled ); + if( bFontEnabled) { const sal_IntPtr nFontId = (sal_IntPtr)pValue; diff --git a/vcl/coretext/ctfonts.hxx b/vcl/coretext/ctfonts.hxx index 1430c36cb9b3..605a2c10fbc2 100644 --- a/vcl/coretext/ctfonts.hxx +++ b/vcl/coretext/ctfonts.hxx @@ -46,4 +46,21 @@ private: CFMutableDictionaryRef GetStyleDict( void ) const { return mpStyleDict; } }; +// CoreText specific physically available font face +class CTFontData +: public ImplMacFontData +{ +public: + explicit CTFontData( const ImplDevFontAttributes&, sal_IntPtr nFontId ); + explicit CTFontData( CTFontDescriptorRef pFontDesc ); + virtual ~CTFontData( void ); + virtual PhysicalFontFace* Clone( void ) const; + + virtual ImplMacTextStyle* CreateMacTextStyle( const FontSelectPattern& ) const; + virtual ImplFontEntry* CreateFontInstance( /*const*/ FontSelectPattern& ) const; + virtual int GetFontTable( const char pTagName[5], unsigned char* ) const; +}; + +SystemFontList* GetCoretextFontList(void); +ImplDevFontAttributes DevFontFromCTFontDescriptor( CTFontDescriptorRef, bool* ); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/coretext/ctlayout.cxx b/vcl/coretext/ctlayout.cxx index 89ecf0933fb1..5fbcef1dbd93 100644 --- a/vcl/coretext/ctlayout.cxx +++ b/vcl/coretext/ctlayout.cxx @@ -294,6 +294,18 @@ int CTLayout::GetNextGlyphs( int nLen, sal_GlyphId* pGlyphIDs, Point& rPos, int& } const PhysicalFontFace* pFallbackFont = NULL; + if( pFallbackFonts ) { + CFDictionaryRef pRunAttributes = CTRunGetAttributes( pGlyphRun ); + CTFontRef pRunFont = (CTFontRef)CFDictionaryGetValue( pRunAttributes, kCTFontAttributeName ); + + CFDictionaryRef pAttributes = mpTextStyle->GetStyleDict(); + CTFontRef pFont = (CTFontRef)CFDictionaryGetValue( pAttributes, kCTFontAttributeName ); + if ( !CFEqual( pRunFont, pFont ) ) { + CTFontDescriptorRef pFontDesc = CTFontCopyFontDescriptor( pRunFont ); + ImplDevFontAttributes rDevFontAttr = DevFontFromCTFontDescriptor( pFontDesc, NULL ); + pFallbackFont = new CTFontData( rDevFontAttr, (sal_IntPtr)pFontDesc ); + } + } // get the details for each interesting glyph // TODO: handle nLen>1 diff --git a/vcl/coretext/salgdi2.cxx b/vcl/coretext/salgdi2.cxx index 9180c32a222d..97d18891c44b 100644 --- a/vcl/coretext/salgdi2.cxx +++ b/vcl/coretext/salgdi2.cxx @@ -399,7 +399,6 @@ void AquaSalGraphics::GetDevFontList( ImplDevFontList* pFontList ) // through it as should be all event handlers SalData* pSalData = GetSalData(); - SystemFontList* GetCoretextFontList(void); // forward declaration if( !pSalData->mpFontList ) pSalData->mpFontList = GetCoretextFontList(); |