diff --git a/modules/juce_graphics/fonts/juce_Typeface.cpp b/modules/juce_graphics/fonts/juce_Typeface.cpp index e6025b801c..8a41c85d7a 100644 --- a/modules/juce_graphics/fonts/juce_Typeface.cpp +++ b/modules/juce_graphics/fonts/juce_Typeface.cpp @@ -57,6 +57,14 @@ namespace FontStyleHelpers const Font f (family, Font::getDefaultStyle(), 15.0f); return Font::getDefaultTypefaceForFont (f)->getName(); } + + static String getConcreteFamilyName (const Font& font) + { + const String& family = font.getTypefaceName(); + + return isPlaceholderFamilyName (family) ? getConcreteFamilyNameFromPlaceholder (family) + : family; + } } //============================================================================== diff --git a/modules/juce_graphics/native/juce_mac_Fonts.mm b/modules/juce_graphics/native/juce_mac_Fonts.mm index 7f72a8e2fd..cffb50f325 100644 --- a/modules/juce_graphics/native/juce_mac_Fonts.mm +++ b/modules/juce_graphics/native/juce_mac_Fonts.mm @@ -46,7 +46,7 @@ namespace CoreTextTypeLayout static CTFontRef createCTFont (const Font& font, const float fontSize, const bool applyScaleFactor) { - CFStringRef cfFontFamily = font.getTypefaceName().toCFString(); + CFStringRef cfFontFamily = FontStyleHelpers::getConcreteFamilyName (font).toCFString(); CFStringRef cfFontStyle = findBestAvailableStyle (font.getTypefaceName(), font.getTypefaceStyle()).toCFString(); CFStringRef keys[] = { kCTFontFamilyNameAttribute, kCTFontStyleNameAttribute }; @@ -312,10 +312,9 @@ namespace CoreTextTypeLayout CTFontRef ctRunFont; if (CFDictionaryGetValueIfPresent (runAttributes, kCTFontAttributeName, (const void **) &ctRunFont)) { - CTFontDescriptorRef ctFontDescRef = CTFontCopyFontDescriptor (ctRunFont); - CFDictionaryRef fontDescAttributes = CTFontDescriptorCopyAttributes (ctFontDescRef); - CTFontRef ctFontRef = CTFontCreateWithFontDescriptor (ctFontDescRef, 1024, nullptr); - CFRelease (ctFontDescRef); + CFStringRef cfsFontName = CTFontCopyPostScriptName (ctRunFont); + CTFontRef ctFontRef = CTFontCreateWithName (cfsFontName, 1024, nullptr); + CFRelease (cfsFontName); CGFontRef cgFontRef = CTFontCopyGraphicsFont (ctFontRef, nullptr); CFRelease (ctFontRef); @@ -323,13 +322,15 @@ namespace CoreTextTypeLayout const float fontHeightToCGSizeFactor = CGFontGetUnitsPerEm (cgFontRef) / (float) totalHeight; CGFontRelease (cgFontRef); - CFStringRef cfsFontFamily = (CFStringRef) CFDictionaryGetValue (fontDescAttributes, kCTFontFamilyNameAttribute); - CFStringRef cfsFontStyle = (CFStringRef) CFDictionaryGetValue (fontDescAttributes, kCTFontStyleNameAttribute); + CFStringRef cfsFontFamily = (CFStringRef) CTFontCopyAttribute (ctRunFont, kCTFontFamilyNameAttribute); + CFStringRef cfsFontStyle = (CFStringRef) CTFontCopyAttribute (ctRunFont, kCTFontStyleNameAttribute); glyphRun->font = Font (String::fromCFString (cfsFontFamily), String::fromCFString (cfsFontStyle), CTFontGetSize (ctRunFont) / fontHeightToCGSizeFactor); - CFRelease (fontDescAttributes); + + CFRelease (cfsFontStyle); + CFRelease (cfsFontFamily); } CGColorRef cgRunColor; diff --git a/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp b/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp index e18f26f8ac..f1afe9bfa8 100644 --- a/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp +++ b/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp @@ -220,7 +220,8 @@ namespace DirectWriteTypeLayout { BOOL fontFound = false; uint32 fontIndex; - fontCollection->FindFamilyName (font->getTypefaceName().toWideCharPointer(), &fontIndex, &fontFound); + fontCollection->FindFamilyName (FontStyleHelpers::getConcreteFamilyName (*font).toWideCharPointer(), + &fontIndex, &fontFound); if (! fontFound) fontIndex = 0; @@ -236,7 +237,7 @@ namespace DirectWriteTypeLayout { hr = fontFamily->GetFont (i, dwFont.resetAndGetPointerAddress()); - if (attr.getFont()->getTypefaceStyle() == getFontFaceName (dwFont)) + if (font->getTypefaceStyle() == getFontFaceName (dwFont)) break; }