summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2018-04-05 00:06:19 -0700
committerMichael Pavone <pavone@retrodev.com>2018-04-05 00:06:19 -0700
commitb8208b3ca4e0a2382e1854a330cbc9568fe51804 (patch)
treedba4bf1ee52df9aabd3e59fdf67ed3477fe69e4e
parentb3aa7c607b5e4e369bbb908b9130523d4a47fcb4 (diff)
Added code to fallback to Yosemite or pre-Yosemite system font in case current system font can't be found or is in an unusable format. San Francisco font used on current OS X versions is in a .otf file whih presumably means it has CFF outlines that stb_truetype can't use.
-rw-r--r--nuklear_ui/font_mac.m34
1 files changed, 24 insertions, 10 deletions
diff --git a/nuklear_ui/font_mac.m b/nuklear_ui/font_mac.m
index fefd7bc..9af938f 100644
--- a/nuklear_ui/font_mac.m
+++ b/nuklear_ui/font_mac.m
@@ -4,7 +4,7 @@
#include "../util.h"
#include "sfnt.h"
-sfnt_table *find_font_in_dir(char *path, char *prefix, const char *ps_name)
+static sfnt_table *find_font_in_dir(char *path, char *prefix, const char *ps_name)
{
size_t num_entries;
dir_entry *entries = get_dir_list(path, &num_entries);
@@ -56,11 +56,8 @@ sfnt_table *find_font_in_dir(char *path, char *prefix, const char *ps_name)
return selected;
}
-uint8_t *default_font(uint32_t *size_out)
+static sfnt_table *find_font_by_ps_name(const char*ps_name, uint8_t exhaustive)
{
- NSFont *sys = [NSFont systemFontOfSize:0];
- NSString *name = [sys fontName];
- const char *ps_name = [name UTF8String];
const unsigned char *prefix_start = (const unsigned char *)ps_name;
while(*prefix_start && (
*prefix_start < '0' ||
@@ -88,17 +85,34 @@ uint8_t *default_font(uint32_t *size_out)
if (!selected) {
selected = find_font_in_dir("/System/Library/Fonts", (char *)prefix, ps_name);
}
+ if (exhaustive) {
+ if (!selected) {
+ puts("Check using prefix failed, exhaustively checking fonts");
+ selected = find_font_in_dir("/Library/Fonts", NULL, ps_name);
+ }
+ if (!selected) {
+ selected = find_font_in_dir("/System/Library/Fonts", NULL, ps_name);
+ }
+ }
+ free(prefix);
+ return selected;
+}
+
+uint8_t *default_font(uint32_t *size_out)
+{
+ NSFont *sys = [NSFont systemFontOfSize:0];
+ NSString *name = [sys fontName];
+ sfnt_table *selected = find_font_by_ps_name([name UTF8String], 1);
if (!selected) {
- puts("Check using prefix failed, exhaustively checking fonts");
- selected = find_font_in_dir("/Library/Fonts", NULL, ps_name);
+ selected = find_font_by_ps_name(".HelveticaNeueDeskInterface-Regular", 0);
}
if (!selected) {
- selected = find_font_in_dir("/System/Library/Fonts", NULL, ps_name);
+ selected = find_font_by_ps_name(".LucidaGrandeUI", 0);
}
+
if (!selected) {
- fatal_error("Failed to find system font %s using prefix %s\n", ps_name, prefix);
+ fatal_error("Failed to find system font %s\n", [name UTF8String]);
}
- free(prefix);
return sfnt_flatten(selected, size_out);
}