Mercurial > repos > blastem
annotate 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 |
rev | line source |
---|---|
1524
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #include <windows.h> |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 #include <shlobj.h> |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 #include "../paths.h" |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 #include "../util.h" |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 char *default_font_path(void) |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 { |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 NONCLIENTMETRICSA metrics = { |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 .cbSize = sizeof(metrics) |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 }; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 char *pref_name = NULL; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 if (SystemParametersInfoA(SPI_GETNONCLIENTMETRICS, sizeof(metrics), &metrics, 0)) { |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 pref_name = metrics.lfCaptionFont.lfFaceName; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 } |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 char windows[MAX_PATH]; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 SHGetFolderPathA(NULL, CSIDL_WINDOWS, NULL, 0, windows); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 char *fonts = path_append(windows, "Fonts"); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 size_t num_entries; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 char *preferred = NULL, *tahoma = NULL, *arial = NULL; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 dir_entry *entries = get_dir_list(fonts, &num_entries); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 for (size_t i = 0; i < num_entries; i++) |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 { |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 if (entries[i].is_dir) { |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 continue; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 } |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 char *ext = path_extension(entries[i].name); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 if (!ext || strcasecmp(ext, "ttf")) { |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 //not a truetype font, ignore |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 free(ext); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 continue; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 } |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 free(ext); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 char *base = basename_no_extension(entries[i].name); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 if (!strcasecmp(base, pref_name)) { |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 preferred = entries[i].name; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 free(base); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 break; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 } else if (!strcasecmp(base, "tahoma")) { |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 tahoma = entries[i].name; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 } else if (!strcasecmp(base, "arial")) { |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 arial = entries[i].name; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 } |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 free(base); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 } |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 char *path = NULL; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 if (preferred) { |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 path = path_append(fonts, preferred); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 } else if(tahoma) { |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 path = path_append(fonts, tahoma); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 } else if(arial) { |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 path = path_append(fonts, arial); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 } |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 free(fonts); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 free_dir_list(entries, num_entries); |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 return path; |
b96f9fae757f
Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 } |