diff options
author | Michael Pavone <pavone@retrodev.com> | 2018-04-04 00:01:17 -0700 |
---|---|---|
committer | Michael Pavone <pavone@retrodev.com> | 2018-04-04 00:01:17 -0700 |
commit | b3aa7c607b5e4e369bbb908b9130523d4a47fcb4 (patch) | |
tree | d93f84bfd370b7fb8db9ed7cfa978a02caff8568 | |
parent | 780febbc0e17960dbea563a9a1b610829ec2ae0b (diff) |
Fix silly bug in handling of Mac Roman font names. Make Mac font search more exhaustive if the faster prefix check fails. Added a bunch of debug printfs in case those aren't sufficient to get things working on other machines
-rw-r--r-- | nuklear_ui/font_mac.m | 15 | ||||
-rw-r--r-- | nuklear_ui/sfnt.c | 4 |
2 files changed, 15 insertions, 4 deletions
diff --git a/nuklear_ui/font_mac.m b/nuklear_ui/font_mac.m index b086a9c..fefd7bc 100644 --- a/nuklear_ui/font_mac.m +++ b/nuklear_ui/font_mac.m @@ -8,18 +8,19 @@ 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); - size_t prefix_len = strlen(prefix); + size_t prefix_len = prefix ? strlen(prefix) : 0; sfnt_table *selected = NULL; for (size_t i = 0; i < num_entries && !selected; i++) { char *ext = path_extension(entries[i].name); if (!ext || (strcasecmp(ext, "ttf") && strcasecmp(ext, "ttc") && strcasecmp(ext, "dfont"))) { //not a truetype font, ignore + printf("Skipping %s because of its extension\n", entries[i].name); free(ext); continue; } free(ext); - if (!strncasecmp(entries[i].name, prefix, prefix_len)) { + if (!prefix || !strncasecmp(entries[i].name, prefix, prefix_len)) { char *full_path = path_append(path, entries[i].name); FILE *f = fopen(full_path, "rb"); if (f) @@ -30,15 +31,18 @@ sfnt_table *find_font_in_dir(char *path, char *prefix, const char *ps_name) { sfnt_container *sfnt = load_sfnt(blob, font_size); if (sfnt) { + printf("Examining font file %s\n", entries[i].name); for (uint8_t j = 0; j < sfnt->num_fonts && !selected; j++) { char *cur_ps = sfnt_name(sfnt->tables + j, SFNT_POSTSCRIPT); + printf("\t%s\n", cur_ps); if (!strcmp(cur_ps, ps_name)) { selected = sfnt->tables + j; } free(cur_ps); } } else { + printf("Failed to load %s as sfnt containern\n", entries[i].name); free(blob); } } else { @@ -85,6 +89,13 @@ uint8_t *default_font(uint32_t *size_out) selected = find_font_in_dir("/System/Library/Fonts", (char *)prefix, ps_name); } 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); + } + if (!selected) { fatal_error("Failed to find system font %s using prefix %s\n", ps_name, prefix); } free(prefix); diff --git a/nuklear_ui/sfnt.c b/nuklear_ui/sfnt.c index 7c69a90..1636af5 100644 --- a/nuklear_ui/sfnt.c +++ b/nuklear_ui/sfnt.c @@ -200,9 +200,9 @@ char *sfnt_name(sfnt_table *sfnt, uint16_t name_type) } if (entry == macroman_entry) { //TODO: convert these properly to UTF-8 - char *ret = malloc(name_size + 1); + char *ret = malloc(name_length + 1); memcpy(ret, name_table + full_off, name_length); - ret[name_size] = 0; + ret[name_length] = 0; return ret; } else { return utf16be_to_utf8(name_table + full_off, name_length/2); |