summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fontdetection.cpp7
-rw-r--r--src/os/macosx/macos.h2
-rw-r--r--src/os/macosx/macos.mm12
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;
+}