diff options
-rw-r--r-- | src/fontdetection.cpp | 7 | ||||
-rw-r--r-- | src/os/macosx/macos.h | 2 | ||||
-rw-r--r-- | src/os/macosx/macos.mm | 12 |
3 files changed, 21 insertions, 0 deletions
diff --git a/src/fontdetection.cpp b/src/fontdetection.cpp index 51add9418..2a847933f 100644 --- a/src/fontdetection.cpp +++ b/src/fontdetection.cpp @@ -496,6 +496,8 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i if ((symbolic_traits & kCTFontClassMaskTrait) == (CTFontStylisticClass)kCTFontSymbolicClass || (symbolic_traits & kCTFontVerticalTrait)) continue; /* Skip bold fonts (especially Arial Bold, which looks worse than regular Arial). */ if (symbolic_traits & kCTFontBoldTrait) continue; + /* Select monospaced fonts if asked for. */ + if (((symbolic_traits & kCTFontMonoSpaceTrait) == kCTFontMonoSpaceTrait) != callback->Monospace()) continue; /* Get font name. */ char name[128]; @@ -530,8 +532,13 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i CFStringRef font_name; ATSFontGetName(font, kATSOptionFlagsDefault, &font_name); CFStringGetCString(font_name, name, lengthof(name), kCFStringEncodingUTF8); + + bool monospace = IsMonospaceFont(font_name); CFRelease(font_name); + /* Select monospaced fonts if asked for. */ + if (monospace != callback->Monospace()) continue; + /* We only want the base font and not bold or italic variants. */ if (strstr(name, "Italic") != NULL || strstr(name, "Bold")) continue; diff --git a/src/os/macosx/macos.h b/src/os/macosx/macos.h index 16f34a3dc..1e6729f12 100644 --- a/src/os/macosx/macos.h +++ b/src/os/macosx/macos.h @@ -36,4 +36,6 @@ static inline bool MacOSVersionIsAtLeast(long major, long minor, long bugfix) return true; } +bool IsMonospaceFont(CFStringRef name); + #endif /* MACOS_H */ diff --git a/src/os/macosx/macos.mm b/src/os/macosx/macos.mm index 38ddae8ee..1b1a1d5a7 100644 --- a/src/os/macosx/macos.mm +++ b/src/os/macosx/macos.mm @@ -193,3 +193,15 @@ uint GetCPUCoreCount() return count; } + +/** + * Check if a font is a monospace font. + * @param name Name of the font. + * @return True if the font is a monospace font. + */ +bool IsMonospaceFont(CFStringRef name) +{ + NSFont *font = [ NSFont fontWithName:(NSString *)name size:0.0f ]; + + return font != NULL ? [ font isFixedPitch ] : false; +} |