Mercurial > repos > blastem
view nuklear_ui/font_win.c @ 1524:b96f9fae757f nuklear_ui
Fix Windows build, added Windows default_font_path implementation
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 07 Feb 2018 00:07:12 -0800 |
parents | |
children | 4f6e8acd7b6a |
line wrap: on
line source
#include <windows.h> #include <shlobj.h> #include "../paths.h" #include "../util.h" char *default_font_path(void) { NONCLIENTMETRICSA metrics = { .cbSize = sizeof(metrics) }; char *pref_name = NULL; if (SystemParametersInfoA(SPI_GETNONCLIENTMETRICS, sizeof(metrics), &metrics, 0)) { pref_name = metrics.lfCaptionFont.lfFaceName; } char windows[MAX_PATH]; SHGetFolderPathA(NULL, CSIDL_WINDOWS, NULL, 0, windows); char *fonts = path_append(windows, "Fonts"); size_t num_entries; char *preferred = NULL, *tahoma = NULL, *arial = NULL; dir_entry *entries = get_dir_list(fonts, &num_entries); for (size_t i = 0; i < num_entries; i++) { if (entries[i].is_dir) { continue; } char *ext = path_extension(entries[i].name); if (!ext || strcasecmp(ext, "ttf")) { //not a truetype font, ignore free(ext); continue; } free(ext); char *base = basename_no_extension(entries[i].name); if (!strcasecmp(base, pref_name)) { preferred = entries[i].name; free(base); break; } else if (!strcasecmp(base, "tahoma")) { tahoma = entries[i].name; } else if (!strcasecmp(base, "arial")) { arial = entries[i].name; } free(base); } char *path = NULL; if (preferred) { path = path_append(fonts, preferred); } else if(tahoma) { path = path_append(fonts, tahoma); } else if(arial) { path = path_append(fonts, arial); } free(fonts); free_dir_list(entries, num_entries); return path; }