Mercurial > repos > blastem
annotate nuklear_ui/blastem_nuklear.c @ 1499:756f8616d1bf nuklear_ui
Refactor basic settings dropdowns
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 08 Dec 2017 23:24:21 -0800 |
parents | 050a5b032bc5 |
children | 39a199dca772 |
rev | line source |
---|---|
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #define NK_IMPLEMENTATION |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 #define NK_SDL_GLES2_IMPLEMENTATION |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 #include <stdlib.h> |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 #include "blastem_nuklear.h" |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 #include "font.h" |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 #include "../render.h" |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 #include "../render_sdl.h" |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 #include "../util.h" |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 #include "../paths.h" |
1478
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
11 #include "../saves.h" |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 #include "../blastem.h" |
1485
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
13 #include "../config.h" |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 static struct nk_context *context; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 typedef void (*view_fun)(struct nk_context *); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 static view_fun current_view; |
1491
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
19 static view_fun *previous_views; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
20 static uint32_t view_storage; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
21 static uint32_t num_prev; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
22 |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
23 static void push_view(view_fun new_view) |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
24 { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
25 if (num_prev == view_storage) { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
26 view_storage = view_storage ? 2*view_storage : 2; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
27 previous_views = realloc(previous_views, view_storage*sizeof(view_fun)); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
28 } |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
29 previous_views[num_prev++] = current_view; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
30 current_view = new_view; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
31 } |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
32 |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
33 static void pop_view() |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
34 { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
35 if (num_prev) { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
36 current_view = previous_views[--num_prev]; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
37 } |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
38 } |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
39 |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
40 static void clear_view_stack() |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
41 { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
42 num_prev = 0; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
43 } |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 void view_play(struct nk_context *context) |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 |
1487
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
50 void view_file_browser(struct nk_context *context, uint8_t normal_open) |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 static char *current_path; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 static dir_entry *entries; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 static size_t num_entries; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 static uint32_t selected_entry; |
1485
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
56 static char **ext_list; |
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
57 static uint32_t num_exts; |
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
58 static uint8_t got_ext_list; |
1481
77a401044935
Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1478
diff
changeset
|
59 if (!current_path) { |
77a401044935
Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1478
diff
changeset
|
60 get_initial_browse_path(¤t_path); |
77a401044935
Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1478
diff
changeset
|
61 } |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 if (!entries) { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 entries = get_dir_list(current_path, &num_entries); |
1484
d82af64c94d2
Sort directory listing in Nuklear UI file browser
Michael Pavone <pavone@retrodev.com>
parents:
1483
diff
changeset
|
64 if (entries) { |
d82af64c94d2
Sort directory listing in Nuklear UI file browser
Michael Pavone <pavone@retrodev.com>
parents:
1483
diff
changeset
|
65 sort_dir_list(entries, num_entries); |
d82af64c94d2
Sort directory listing in Nuklear UI file browser
Michael Pavone <pavone@retrodev.com>
parents:
1483
diff
changeset
|
66 } |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 } |
1485
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
68 if (!got_ext_list) { |
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
69 ext_list = get_extension_list(config, &num_exts); |
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
70 got_ext_list = 1; |
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
71 } |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 uint32_t width = render_width(); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 uint32_t height = render_height(); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 if (nk_begin(context, "Load ROM", nk_rect(0, 0, width, height), 0)) { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 nk_layout_row_static(context, height - 100, width - 60, 1); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 if (nk_group_begin(context, "Select ROM", NK_WINDOW_BORDER | NK_WINDOW_TITLE)) { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 nk_layout_row_static(context, 28, width-100, 1); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 for (uint32_t i = 0; i < num_entries; i++) |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 { |
1485
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
80 if (entries[i].name[0] == '.' && entries[i].name[1] != '.') { |
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
81 continue; |
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
82 } |
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
83 if (num_exts && !entries[i].is_dir && !path_matches_extensions(entries[i].name, ext_list, num_exts)) { |
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
84 continue; |
369da70ee2c2
Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1484
diff
changeset
|
85 } |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
86 int selected = i == selected_entry; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
87 nk_selectable_label(context, entries[i].name, NK_TEXT_ALIGN_LEFT, &selected); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
88 if (selected) { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
89 selected_entry = i; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
90 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
91 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
92 nk_group_end(context); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
93 } |
1476
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
94 nk_layout_row_static(context, 52, width > 600 ? 300 : width / 2, 2); |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
95 if (nk_button_label(context, "Back")) { |
1491
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
96 pop_view(); |
1476
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
97 } |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 if (nk_button_label(context, "Open")) { |
1481
77a401044935
Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1478
diff
changeset
|
99 char *full_path = path_append(current_path, entries[selected_entry].name); |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
100 if (entries[selected_entry].is_dir) { |
1481
77a401044935
Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1478
diff
changeset
|
101 free(current_path); |
77a401044935
Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1478
diff
changeset
|
102 current_path = full_path; |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
103 free_dir_list(entries, num_entries); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
104 entries = NULL; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
105 } else { |
1487
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
106 if(normal_open) { |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
107 if (current_system) { |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
108 current_system->next_rom = full_path; |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
109 current_system->request_exit(current_system); |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
110 } else { |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
111 init_system_with_media(full_path, SYSTEM_UNKNOWN); |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
112 free(full_path); |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
113 } |
1483
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
114 } else { |
1487
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
115 lockon_media(full_path); |
1483
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
116 free(full_path); |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
117 } |
1491
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
118 clear_view_stack(); |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
119 current_view = view_play; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
120 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
121 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
122 nk_end(context); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
123 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
124 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
125 |
1487
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
126 void view_load(struct nk_context *context) |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
127 { |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
128 view_file_browser(context, 1); |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
129 } |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
130 |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
131 void view_lock_on(struct nk_context *context) |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
132 { |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
133 view_file_browser(context, 0); |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
134 } |
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
135 |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
136 void view_about(struct nk_context *context) |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
137 { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
138 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
139 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
140 typedef struct { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
141 const char *title; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
142 view_fun next_view; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
143 } menu_item; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
144 |
1478
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
145 static save_slot_info *slots; |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
146 static uint32_t num_slots, selected_slot; |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
147 |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
148 void view_choose_state(struct nk_context *context, uint8_t is_load) |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
149 { |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
150 uint32_t width = render_width(); |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
151 uint32_t height = render_height(); |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
152 if (nk_begin(context, "Slot Picker", nk_rect(0, 0, width, height), 0)) { |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
153 nk_layout_row_static(context, height - 100, width - 60, 1); |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
154 if (nk_group_begin(context, "Select Save Slot", NK_WINDOW_BORDER | NK_WINDOW_TITLE)) { |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
155 nk_layout_row_static(context, 28, width-100, 1); |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
156 if (!slots) { |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
157 slots = get_slot_info(current_system, &num_slots); |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
158 } |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
159 for (uint32_t i = 0; i < num_slots; i++) |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
160 { |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
161 int selected = i == selected_slot; |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
162 nk_selectable_label(context, slots[i].desc, NK_TEXT_ALIGN_LEFT, &selected); |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
163 if (selected && (slots[i].modification_time || !is_load)) { |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
164 selected_slot = i; |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
165 } |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
166 } |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
167 nk_group_end(context); |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
168 } |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
169 nk_layout_row_static(context, 52, width > 600 ? 300 : width / 2, 2); |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
170 if (nk_button_label(context, "Back")) { |
1491
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
171 pop_view(); |
1478
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
172 } |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
173 if (is_load) { |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
174 if (nk_button_label(context, "Load")) { |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
175 current_system->load_state(current_system, selected_slot); |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
176 current_view = view_play; |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
177 } |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
178 } else { |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
179 if (nk_button_label(context, "Save")) { |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
180 current_system->save_state = selected_slot + 1; |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
181 current_view = view_play; |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
182 } |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
183 } |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
184 nk_end(context); |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
185 } |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
186 } |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
187 |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
188 void view_save_state(struct nk_context *context) |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
189 { |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
190 view_choose_state(context, 0); |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
191 } |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
192 |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
193 void view_load_state(struct nk_context *context) |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
194 { |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
195 view_choose_state(context, 1); |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
196 } |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
197 |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
198 static void menu(struct nk_context *context, uint32_t num_entries, const menu_item *items) |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
199 { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
200 const uint32_t button_height = 52; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
201 const uint32_t ideal_button_width = 300; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
202 const uint32_t button_space = 6; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
203 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
204 uint32_t width = render_width(); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
205 uint32_t height = render_height(); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
206 uint32_t top = height/2 - (button_height * num_entries)/2; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
207 uint32_t button_width = width > ideal_button_width ? ideal_button_width : width; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
208 uint32_t left = width/2 - button_width/2; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
209 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
210 nk_layout_space_begin(context, NK_STATIC, top + button_height * num_entries, num_entries); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
211 for (uint32_t i = 0; i < num_entries; i++) |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
212 { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
213 nk_layout_space_push(context, nk_rect(left, top + i * button_height, button_width, button_height-button_space)); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
214 if (nk_button_label(context, items[i].title)) { |
1491
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
215 push_view(items[i].next_view); |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
216 if (!current_view) { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
217 exit(0); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
218 } |
1478
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
219 if (current_view == view_save_state || current_view == view_load_state) { |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
220 free_slot_info(slots); |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
221 slots = NULL; |
da1dce39e846
Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents:
1477
diff
changeset
|
222 } |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
223 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
224 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
225 nk_layout_space_end(context); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
226 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
227 |
1490
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
228 void view_key_bindings(struct nk_context *context) |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
229 { |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
230 |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
231 } |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
232 void view_controllers(struct nk_context *context) |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
233 { |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
234 |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
235 } |
1491
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
236 |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
237 void settings_toggle(struct nk_context *context, char *label, char *path, uint8_t def) |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
238 { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
239 uint8_t curval = !strcmp("on", tern_find_path_default(config, path, (tern_val){.ptrval = def ? "on": "off"}, TVAL_PTR).ptrval); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
240 nk_label(context, label, NK_TEXT_LEFT); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
241 uint8_t newval = nk_check_label(context, "", curval); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
242 if (newval != curval) { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
243 config = tern_insert_path(config, path, (tern_val){.ptrval = strdup(newval ? "on" : "off")}, TVAL_PTR); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
244 } |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
245 } |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
246 |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
247 void settings_int_input(struct nk_context *context, char *label, char *path, char *def) |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
248 { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
249 char buffer[12]; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
250 nk_label(context, label, NK_TEXT_LEFT); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
251 uint32_t curval; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
252 char *curstr = tern_find_path_default(config, path, (tern_val){.ptrval = def}, TVAL_PTR).ptrval; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
253 uint32_t len = strlen(curstr); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
254 if (len > 11) { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
255 len = 11; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
256 } |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
257 memcpy(buffer, curstr, len); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
258 nk_edit_string(context, NK_EDIT_SIMPLE, buffer, &len, sizeof(buffer)-1, nk_filter_decimal); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
259 buffer[len] = 0; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
260 if (strcmp(buffer, curstr)) { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
261 config = tern_insert_path(config, path, (tern_val){.ptrval = strdup(buffer)}, TVAL_PTR); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
262 } |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
263 } |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
264 |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
265 void settings_int_property(struct nk_context *context, char *label, char *name, char *path, int def, int min, int max) |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
266 { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
267 char *curstr = tern_find_path(config, path, TVAL_PTR).ptrval; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
268 int curval = curstr ? atoi(curstr) : def; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
269 nk_label(context, label, NK_TEXT_LEFT); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
270 int val = curval; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
271 nk_property_int(context, name, min, &val, max, 1, 1.0f); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
272 if (val != curval) { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
273 char buffer[12]; |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
274 sprintf(buffer, "%d", val); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
275 config = tern_insert_path(config, path, (tern_val){.ptrval = strdup(buffer)}, TVAL_PTR); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
276 } |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
277 } |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
278 |
1492
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
279 typedef struct { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
280 char *fragment; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
281 char *vertex; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
282 } shader_prog; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
283 |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
284 shader_prog *get_shader_progs(dir_entry *entries, size_t num_entries, shader_prog *progs, uint32_t *num_existing, uint32_t *storage) |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
285 { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
286 uint32_t num_progs = *num_existing; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
287 uint32_t prog_storage = *storage; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
288 uint32_t starting = num_progs; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
289 |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
290 for (uint32_t i = 0; i < num_entries; i++) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
291 if (entries[i].is_dir) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
292 continue; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
293 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
294 char *no_ext = basename_no_extension(entries[i].name); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
295 uint32_t len = strlen(no_ext); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
296 if (no_ext[len-1] == 'f' && no_ext[len-2] == '.') { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
297 uint8_t dupe = 0;; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
298 for (uint32_t j = 0; j < starting; j++) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
299 if (!strcmp(entries[i].name, progs[j].fragment)) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
300 dupe = 1; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
301 break; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
302 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
303 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
304 if (!dupe) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
305 if (num_progs == prog_storage) { |
1493
24f44f26b74d
Fix buffer overrun in video settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1492
diff
changeset
|
306 prog_storage = prog_storage ? prog_storage*2 : 4; |
1492
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
307 progs = realloc(progs, sizeof(progs) * prog_storage); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
308 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
309 progs[num_progs].vertex = NULL; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
310 progs[num_progs++].fragment = strdup(entries[i].name); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
311 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
312 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
313 free(no_ext); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
314 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
315 |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
316 for (uint32_t i = 0; i < num_entries; i++) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
317 if (entries[i].is_dir) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
318 continue; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
319 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
320 char *no_ext = basename_no_extension(entries[i].name); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
321 uint32_t len = strlen(no_ext); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
322 if (no_ext[len-1] == 'v' && no_ext[len-2] == '.') { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
323 for (uint32_t j = 0; j < num_progs; j++) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
324 if (!strncmp(no_ext, progs[j].fragment, len-1) && progs[j].fragment[len-1] == 'f' && progs[j].fragment[len] == '.') { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
325 progs[j].vertex = strdup(entries[i].name); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
326 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
327 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
328 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
329 free(no_ext); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
330 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
331 free_dir_list(entries, num_entries); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
332 *num_existing = num_progs; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
333 *storage = prog_storage; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
334 return progs; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
335 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
336 |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
337 shader_prog *get_shader_list(uint32_t *num_out) |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
338 { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
339 char *shader_dir = path_append(get_config_dir(), "shaders"); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
340 size_t num_entries; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
341 dir_entry *entries = get_dir_list(shader_dir, &num_entries); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
342 free(shader_dir); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
343 shader_prog *progs; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
344 uint32_t num_progs = 0, prog_storage; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
345 if (num_entries) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
346 progs = calloc(num_entries, sizeof(shader_prog)); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
347 prog_storage = num_entries; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
348 progs = get_shader_progs(entries, num_entries, progs, &num_progs, &prog_storage); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
349 } else { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
350 progs = NULL; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
351 prog_storage = 0; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
352 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
353 shader_dir = path_append(get_exe_dir(), "shaders"); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
354 entries = get_dir_list(shader_dir, &num_entries); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
355 progs = get_shader_progs(entries, num_entries, progs, &num_progs, &prog_storage); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
356 *num_out = num_progs; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
357 return progs; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
358 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
359 |
1490
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
360 void view_video_settings(struct nk_context *context) |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
361 { |
1492
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
362 static shader_prog *progs; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
363 static char **prog_names; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
364 static uint32_t num_progs; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
365 static uint32_t selected_prog; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
366 if(!progs) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
367 progs = get_shader_list(&num_progs); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
368 prog_names = calloc(num_progs, sizeof(char*)); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
369 for (uint32_t i = 0; i < num_progs; i++) |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
370 { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
371 prog_names[i] = basename_no_extension(progs[i].fragment);; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
372 uint32_t len = strlen(prog_names[i]); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
373 if (len > 2) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
374 prog_names[i][len-2] = 0; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
375 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
376 if (!progs[i].vertex) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
377 progs[i].vertex = strdup("default.v.glsl"); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
378 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
379 if (!strcmp( |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
380 progs[i].fragment, |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
381 tern_find_path_default(config, "video\0fragment_shader\0", (tern_val){.ptrval = "default.f.glsl"}, TVAL_PTR).ptrval |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
382 )) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
383 selected_prog = i; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
384 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
385 } |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
386 } |
1491
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
387 uint32_t width = render_width(); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
388 uint32_t height = render_height(); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
389 if (nk_begin(context, "Video Settings", nk_rect(0, 0, width, height), 0)) { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
390 nk_layout_row_static(context, 30, width > 300 ? 300 : width, 2); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
391 settings_toggle(context, "Fullscreen", "video\0fullscreen\0", 0); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
392 settings_toggle(context, "Open GL", "video\0gl\0", 1); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
393 settings_toggle(context, "Scanlines", "video\0scanlines\0", 0); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
394 settings_int_input(context, "Windowed Width", "video\0width\0", "640"); |
1492
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
395 nk_label(context, "Shader", NK_TEXT_LEFT); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
396 uint32_t next_selected = nk_combo(context, (const char **)prog_names, num_progs, selected_prog, 30, nk_vec2(300, 300)); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
397 if (next_selected != selected_prog) { |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
398 selected_prog = next_selected; |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
399 config = tern_insert_path(config, "video\0fragment_shader\0", (tern_val){.ptrval = strdup(progs[next_selected].fragment)}, TVAL_PTR); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
400 config = tern_insert_path(config, "video\0vertex_shader\0", (tern_val){.ptrval = strdup(progs[next_selected].vertex)}, TVAL_PTR); |
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
401 } |
1491
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
402 settings_int_property(context, "NTSC Overscan", "Top", "video\0ntsc\0overscan\0top\0", 2, 0, 32); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
403 settings_int_property(context, "", "Bottom", "video\0ntsc\0overscan\0bottom\0", 17, 0, 32); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
404 settings_int_property(context, "", "Left", "video\0ntsc\0overscan\0left\0", 13, 0, 32); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
405 settings_int_property(context, "", "Right", "video\0ntsc\0overscan\0right\0", 14, 0, 32); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
406 settings_int_property(context, "PAL Overscan", "Top", "video\0pal\0overscan\0top\0", 2, 0, 32); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
407 settings_int_property(context, "", "Bottom", "video\0pal\0overscan\0bottom\0", 17, 0, 32); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
408 settings_int_property(context, "", "Left", "video\0pal\0overscan\0left\0", 13, 0, 32); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
409 settings_int_property(context, "", "Right", "video\0pal\0overscan\0right\0", 14, 0, 32); |
1492
bdeb2a1d0385
Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents:
1491
diff
changeset
|
410 |
1491
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
411 if (nk_button_label(context, "Back")) { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
412 pop_view(); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
413 } |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
414 nk_end(context); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
415 } |
1490
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
416 } |
1499
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
417 |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
418 int32_t find_match(const char **options, uint32_t num_options, char *path, char *def) |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
419 { |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
420 char *setting = tern_find_path_default(config, path, (tern_val){.ptrval = def}, TVAL_PTR).ptrval; |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
421 int32_t selected = -1; |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
422 for (uint32_t i = 0; i < num_options; i++) |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
423 { |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
424 if (!strcmp(setting, options[i])) { |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
425 selected = i; |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
426 break; |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
427 } |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
428 } |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
429 if (selected == -1) { |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
430 for (uint32_t i = 0; i < num_options; i++) |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
431 { |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
432 if (!strcmp(def, options[i])) { |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
433 selected = i; |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
434 break; |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
435 } |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
436 } |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
437 } |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
438 return selected; |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
439 } |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
440 |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
441 int32_t settings_dropdown(struct nk_context *context, char *label, const char **options, uint32_t num_options, int32_t current, char *path) |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
442 { |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
443 nk_label(context, label, NK_TEXT_LEFT); |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
444 int32_t next = nk_combo(context, options, num_options, current, 30, nk_vec2(300, 300)); |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
445 if (next != current) { |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
446 config = tern_insert_path(config, path, (tern_val){.ptrval = strdup(options[next])}, TVAL_PTR); |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
447 } |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
448 return next; |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
449 } |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
450 |
1490
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
451 void view_audio_settings(struct nk_context *context) |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
452 { |
1494
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
453 const char *rates[] = { |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
454 "192000", |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
455 "96000", |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
456 "48000", |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
457 "44100", |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
458 "22050" |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
459 }; |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
460 const char *sizes[] = { |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
461 "1024", |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
462 "512", |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
463 "256", |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
464 "128", |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
465 "64" |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
466 }; |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
467 const uint32_t num_rates = sizeof(rates)/sizeof(*rates); |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
468 const uint32_t num_sizes = sizeof(sizes)/sizeof(*sizes); |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
469 static int32_t selected_rate = -1; |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
470 static int32_t selected_size = -1; |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
471 if (selected_rate < 0 || selected_size < 0) { |
1499
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
472 selected_rate = find_match(rates, num_rates, "autio\0rate\0", "48000"); |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
473 selected_size = find_match(sizes, num_sizes, "audio\0buffer\0", "512"); |
1494
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
474 } |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
475 uint32_t width = render_width(); |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
476 uint32_t height = render_height(); |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
477 if (nk_begin(context, "Audio Settings", nk_rect(0, 0, width, height), 0)) { |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
478 nk_layout_row_static(context, 30, width > 300 ? 300 : width, 2); |
1499
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
479 selected_rate = settings_dropdown(context, "Rate in Hz", rates, num_rates, selected_rate, "audio\0rate\0"); |
756f8616d1bf
Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents:
1498
diff
changeset
|
480 selected_size = settings_dropdown(context, "Buffer Samples", sizes, num_sizes, selected_size, "audio\0buffer\0"); |
1494
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
481 settings_int_input(context, "Lowpass Cutoff Hz", "audio\0lowpass_cutoff\0", "3390"); |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
482 if (nk_button_label(context, "Back")) { |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
483 pop_view(); |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
484 } |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
485 nk_end(context); |
8be6ea919300
Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1493
diff
changeset
|
486 } |
1490
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
487 } |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
488 void view_system_settings(struct nk_context *context) |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
489 { |
1498
050a5b032bc5
Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents:
1494
diff
changeset
|
490 uint32_t width = render_width(); |
050a5b032bc5
Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents:
1494
diff
changeset
|
491 uint32_t height = render_height(); |
050a5b032bc5
Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents:
1494
diff
changeset
|
492 if (nk_begin(context, "System Settings", nk_rect(0, 0, width, height), 0)) { |
050a5b032bc5
Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents:
1494
diff
changeset
|
493 nk_layout_row_static(context, 30, width > 300 ? 300 : width, 2); |
050a5b032bc5
Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents:
1494
diff
changeset
|
494 settings_int_property(context, "68000 Clock Divider", "", "clocks\0m68k_divider\0", 7, 1, 53); |
050a5b032bc5
Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents:
1494
diff
changeset
|
495 settings_toggle(context, "Remember ROM Path", "ui\0remember_path\0", 1); |
050a5b032bc5
Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents:
1494
diff
changeset
|
496 if (nk_button_label(context, "Back")) { |
050a5b032bc5
Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents:
1494
diff
changeset
|
497 pop_view(); |
050a5b032bc5
Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents:
1494
diff
changeset
|
498 } |
050a5b032bc5
Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents:
1494
diff
changeset
|
499 nk_end(context); |
050a5b032bc5
Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents:
1494
diff
changeset
|
500 } |
1490
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
501 } |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
502 |
1491
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
503 void view_back(struct nk_context *context) |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
504 { |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
505 pop_view(); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
506 pop_view(); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
507 current_view(context); |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
508 } |
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
509 |
1490
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
510 void view_settings(struct nk_context *context) |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
511 { |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
512 static menu_item items[] = { |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
513 {"Key Bindings", view_key_bindings}, |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
514 {"Controllers", view_controllers}, |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
515 {"Video", view_video_settings}, |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
516 {"Audio", view_audio_settings}, |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
517 {"System", view_system_settings}, |
1491
e890971f3757
Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents:
1490
diff
changeset
|
518 {"Back", view_back} |
1490
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
519 }; |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
520 |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
521 const uint32_t num_buttons = 6; |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
522 if (nk_begin(context, "Settings Menu", nk_rect(0, 0, render_width(), render_height()), 0)) { |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
523 menu(context, sizeof(items)/sizeof(*items), items); |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
524 nk_end(context); |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
525 } |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
526 } |
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
527 |
1476
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
528 void view_pause(struct nk_context *context) |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
529 { |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
530 static menu_item items[] = { |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
531 {"Resume", view_play}, |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
532 {"Load ROM", view_load}, |
1487
6a35815cc409
Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents:
1486
diff
changeset
|
533 {"Lock On", view_lock_on}, |
1476
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
534 {"Save State", view_save_state}, |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
535 {"Load State", view_load_state}, |
1490
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
536 {"Settings", view_settings}, |
1476
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
537 {"Exit", NULL} |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
538 }; |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
539 |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
540 const uint32_t num_buttons = 3; |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
541 if (nk_begin(context, "Main Menu", nk_rect(0, 0, render_width(), render_height()), 0)) { |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
542 menu(context, sizeof(items)/sizeof(*items), items); |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
543 nk_end(context); |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
544 } |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
545 } |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
546 |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
547 void view_menu(struct nk_context *context) |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
548 { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
549 static menu_item items[] = { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
550 {"Load ROM", view_load}, |
1490
919c0c33885e
Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents:
1487
diff
changeset
|
551 {"Settings", view_settings}, |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
552 {"About", view_about}, |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
553 {"Exit", NULL} |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
554 }; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
555 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
556 const uint32_t num_buttons = 3; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
557 if (nk_begin(context, "Main Menu", nk_rect(0, 0, render_width(), render_height()), 0)) { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
558 menu(context, sizeof(items)/sizeof(*items), items); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
559 nk_end(context); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
560 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
561 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
562 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
563 void blastem_nuklear_render(void) |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
564 { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
565 nk_input_end(context); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
566 current_view(context); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
567 nk_sdl_render(NK_ANTI_ALIASING_ON, 512 * 1024, 128 * 1024); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
568 nk_input_begin(context); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
569 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
570 |
1486
a6881d0d76d0
Pause game execution when in the new UI pause menu
Michael Pavone <pavone@retrodev.com>
parents:
1485
diff
changeset
|
571 void ui_idle_loop(void) |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
572 { |
1482
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1481
diff
changeset
|
573 const uint32_t MIN_UI_DELAY = 15; |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1481
diff
changeset
|
574 static uint32_t last; |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
575 while (current_view != view_play) |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
576 { |
1482
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1481
diff
changeset
|
577 uint32_t current = render_elapsed_ms(); |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1481
diff
changeset
|
578 if ((current - last) < MIN_UI_DELAY) { |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1481
diff
changeset
|
579 render_sleep_ms(MIN_UI_DELAY - (current - last) - 1); |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1481
diff
changeset
|
580 } |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1481
diff
changeset
|
581 last = current; |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
582 render_update_display(); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
583 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
584 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
585 static void handle_event(SDL_Event *event) |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
586 { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
587 nk_sdl_handle_event(event); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
588 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
589 |
1476
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
590 static void context_destroyed(void) |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
591 { |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
592 nk_sdl_device_destroy(); |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
593 } |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
594 static void context_created(void) |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
595 { |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
596 nk_sdl_device_create(); |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
597 struct nk_font_atlas *atlas; |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
598 nk_sdl_font_stash_begin(&atlas); |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
599 char *font = default_font_path(); |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
600 if (!font) { |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
601 fatal_error("Failed to find default font path\n"); |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
602 } |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
603 struct nk_font *def_font = nk_font_atlas_add_from_file(atlas, font, 30, NULL); |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
604 nk_sdl_font_stash_end(); |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
605 nk_style_set_font(context, &def_font->handle); |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
606 } |
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
607 |
1477
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
608 void show_pause_menu(void) |
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
609 { |
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
610 context->style.window.background = nk_rgba(0, 0, 0, 128); |
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
611 context->style.window.fixed_background = nk_style_item_color(nk_rgba(0, 0, 0, 128)); |
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
612 current_view = view_pause; |
1486
a6881d0d76d0
Pause game execution when in the new UI pause menu
Michael Pavone <pavone@retrodev.com>
parents:
1485
diff
changeset
|
613 current_system->request_exit(current_system); |
1477
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
614 } |
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
615 |
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
616 static uint8_t active; |
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
617 uint8_t is_nuklear_active(void) |
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
618 { |
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
619 return active; |
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
620 } |
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
621 |
1483
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
622 uint8_t is_nuklear_available(void) |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
623 { |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
624 if (!render_has_gl()) { |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
625 //currently no fallback if GL2 unavailable |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
626 return 0; |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
627 } |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
628 char *style = tern_find_path(config, "ui\0style\0", TVAL_PTR).ptrval; |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
629 if (!style) { |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
630 return 1; |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
631 } |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
632 return strcmp(style, "rom") != 0; |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
633 } |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
634 |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
635 void blastem_nuklear_init(uint8_t file_loaded) |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
636 { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
637 context = nk_sdl_init(render_get_window()); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
638 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
639 struct nk_font_atlas *atlas; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
640 nk_sdl_font_stash_begin(&atlas); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
641 char *font = default_font_path(); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
642 if (!font) { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
643 fatal_error("Failed to find default font path\n"); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
644 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
645 struct nk_font *def_font = nk_font_atlas_add_from_file(atlas, font, 30, NULL); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
646 nk_sdl_font_stash_end(); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
647 nk_style_set_font(context, &def_font->handle); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
648 current_view = file_loaded ? view_play : view_menu; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
649 render_set_ui_render_fun(blastem_nuklear_render); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
650 render_set_event_handler(handle_event); |
1476
0646ae0987c3
Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents:
1475
diff
changeset
|
651 render_set_gl_context_handlers(context_destroyed, context_created); |
1477
1cdd7f492af8
Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
652 active = 1; |
1486
a6881d0d76d0
Pause game execution when in the new UI pause menu
Michael Pavone <pavone@retrodev.com>
parents:
1485
diff
changeset
|
653 ui_idle_loop(); |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
654 } |