diff options
Diffstat (limited to 'vcl/coretext')
-rw-r--r-- | vcl/coretext/ctfonts.cxx | 39 | ||||
-rw-r--r-- | vcl/coretext/ctfonts.hxx | 19 | ||||
-rw-r--r-- | vcl/coretext/ctlayout.cxx | 12 | ||||
-rw-r--r-- | vcl/coretext/salgdi2.cxx | 1 |
4 files changed, 47 insertions, 24 deletions
diff --git a/vcl/coretext/ctfonts.cxx b/vcl/coretext/ctfonts.cxx index 9c58891c0b7c..ab738d9ae88e 100644 --- a/vcl/coretext/ctfonts.cxx +++ b/vcl/coretext/ctfonts.cxx @@ -33,22 +33,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 { @@ -327,10 +311,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; @@ -358,9 +340,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 ); @@ -419,6 +404,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 d80a5660bd7c..f4a2147cf26e 100644 --- a/vcl/coretext/ctfonts.hxx +++ b/vcl/coretext/ctfonts.hxx @@ -46,5 +46,22 @@ 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* ); + +// ======================================================================= diff --git a/vcl/coretext/ctlayout.cxx b/vcl/coretext/ctlayout.cxx index 0334cffe8a4b..18df73e55a82 100644 --- a/vcl/coretext/ctlayout.cxx +++ b/vcl/coretext/ctlayout.cxx @@ -293,6 +293,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 2f7da5bab0e0..8e98f847d98c 100644 --- a/vcl/coretext/salgdi2.cxx +++ b/vcl/coretext/salgdi2.cxx @@ -422,7 +422,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(); |