diff --git a/modules/juce_graphics/native/juce_mac_Fonts.mm b/modules/juce_graphics/native/juce_mac_Fonts.mm index 216ad69b87..7f72a8e2fd 100644 --- a/modules/juce_graphics/native/juce_mac_Fonts.mm +++ b/modules/juce_graphics/native/juce_mac_Fonts.mm @@ -33,11 +33,22 @@ namespace CoreTextTypeLayout { + static String findBestAvailableStyle (const String& typefaceName, const String& style) + { + const StringArray availableStyles (Font::findAllTypefaceStyles (typefaceName)); + + if (! availableStyles.contains (style)) + return availableStyles[0]; + + return style; + } + static CTFontRef createCTFont (const Font& font, const float fontSize, const bool applyScaleFactor) { CFStringRef cfFontFamily = font.getTypefaceName().toCFString(); - CFStringRef cfFontStyle = font.getTypefaceStyle().toCFString(); + CFStringRef cfFontStyle = findBestAvailableStyle (font.getTypefaceName(), + font.getTypefaceStyle()).toCFString(); CFStringRef keys[] = { kCTFontFamilyNameAttribute, kCTFontStyleNameAttribute }; CFTypeRef values[] = { cfFontFamily, cfFontStyle }; @@ -1070,7 +1081,6 @@ StringArray Font::findAllTypefaceStyles (const String& family) NSArray* style = [styles objectAtIndex: i]; results.add (nsStringToJuce ((NSString*) [style objectAtIndex: 1])); #endif - } return results; diff --git a/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp b/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp index 81ee555a6d..4cd18af3a1 100644 --- a/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp +++ b/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp @@ -148,14 +148,14 @@ public: uint32 fontFacesCount = 0; fontFacesCount = dwFontFamily->GetFontCount(); - for (uint32 i = 0; i < fontFacesCount; ++i) + for (int i = fontFacesCount; --i >= 0;) { hr = dwFontFamily->GetFont (i, dwFont.resetAndGetPointerAddress()); ComSmartPtr faceNames; hr = dwFont->GetFaceNames (faceNames.resetAndGetPointerAddress()); - if (font.getTypefaceStyle() == getLocalisedName (faceNames)) + if (i == 0 || font.getTypefaceStyle() == getLocalisedName (faceNames)) break; }