diff options
author | michi_cc <michi_cc@openttd.org> | 2013-08-05 20:36:06 +0000 |
---|---|---|
committer | michi_cc <michi_cc@openttd.org> | 2013-08-05 20:36:06 +0000 |
commit | 3569a4fe5a30397add710f90b2eee5ecd953cbab (patch) | |
tree | d9218f2a7e4820807a61e021003646752de78f2a | |
parent | 313cdb579ea3271a7d32f9413b83807df68f0971 (diff) | |
download | openttd-3569a4fe5a30397add710f90b2eee5ecd953cbab.tar.xz |
(svn r25663) -Fix [FS#4857]: [OSX] Monospace font detection.
-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; +} |