annotate nuklear_ui/blastem_nuklear.c @ 1521:a51721408c15 nuklear_ui

More fleshed out keyboard bindings view
author Michael Pavone <pavone@retrodev.com>
date Mon, 05 Feb 2018 23:39:14 -0800
parents cb3c6395b28c
children 63659fb92db4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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"
1501
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
14 #include "../io.h"
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
16 static struct nk_context *context;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
18 typedef void (*view_fun)(struct nk_context *);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19 static view_fun current_view;
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
20 static view_fun *previous_views;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
21 static uint32_t view_storage;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
22 static uint32_t num_prev;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
23
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
24 static void push_view(view_fun new_view)
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
25 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
26 if (num_prev == view_storage) {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
27 view_storage = view_storage ? 2*view_storage : 2;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
28 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
29 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
30 previous_views[num_prev++] = current_view;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
31 current_view = new_view;
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
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
34 static void pop_view()
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
35 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
36 if (num_prev) {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
37 current_view = previous_views[--num_prev];
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
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
41 static void clear_view_stack()
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
42 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
43 num_prev = 0;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
44 }
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
45
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
46 void view_play(struct nk_context *context)
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 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
50
1487
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
51 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
52 {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
53 static char *current_path;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
54 static dir_entry *entries;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
55 static size_t num_entries;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
56 static uint32_t selected_entry;
1485
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
57 static char **ext_list;
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
58 static uint32_t num_exts;
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
59 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
60 if (!current_path) {
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1478
diff changeset
61 get_initial_browse_path(&current_path);
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1478
diff changeset
62 }
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
63 if (!entries) {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
64 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
65 if (entries) {
d82af64c94d2 Sort directory listing in Nuklear UI file browser
Michael Pavone <pavone@retrodev.com>
parents: 1483
diff changeset
66 sort_dir_list(entries, num_entries);
d82af64c94d2 Sort directory listing in Nuklear UI file browser
Michael Pavone <pavone@retrodev.com>
parents: 1483
diff changeset
67 }
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
68 }
1485
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
69 if (!got_ext_list) {
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
70 ext_list = get_extension_list(config, &num_exts);
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
71 got_ext_list = 1;
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
72 }
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
73 uint32_t width = render_width();
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
74 uint32_t height = render_height();
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
75 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
76 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
77 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
78 nk_layout_row_static(context, 28, width-100, 1);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
79 for (uint32_t i = 0; i < num_entries; i++)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
80 {
1485
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
81 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
82 continue;
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
83 }
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
84 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
85 continue;
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
86 }
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
87 int selected = i == selected_entry;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
88 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
89 if (selected) {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
90 selected_entry = i;
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 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
93 nk_group_end(context);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
94 }
1476
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
95 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
96 if (nk_button_label(context, "Back")) {
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
97 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
98 }
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
99 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
100 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
101 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
102 free(current_path);
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1478
diff changeset
103 current_path = full_path;
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
104 free_dir_list(entries, num_entries);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
105 entries = NULL;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
106 } else {
1487
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
107 if(normal_open) {
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
108 if (current_system) {
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
109 current_system->next_rom = full_path;
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
110 current_system->request_exit(current_system);
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
111 } else {
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
112 init_system_with_media(full_path, SYSTEM_UNKNOWN);
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
113 free(full_path);
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
114 }
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
115 } else {
1487
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
116 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
117 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
118 }
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
119 clear_view_stack();
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
120 current_view = view_play;
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 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
123 nk_end(context);
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 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
126
1487
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
127 void view_load(struct nk_context *context)
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
128 {
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
129 view_file_browser(context, 1);
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
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
132 void view_lock_on(struct nk_context *context)
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
133 {
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
134 view_file_browser(context, 0);
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
135 }
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
136
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
137 void view_about(struct nk_context *context)
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
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
141 typedef struct {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
142 const char *title;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
143 view_fun next_view;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
144 } menu_item;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
145
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
146 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
147 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
148
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 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
150 {
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 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
152 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
153 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
154 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
155 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
156 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
157 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
158 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
159 }
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 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
161 {
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 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
163 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
164 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
165 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
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 }
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 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
169 }
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 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
171 if (nk_button_label(context, "Back")) {
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
172 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
173 }
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 (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
175 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
176 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
177 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
178 }
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 } 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
180 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
181 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
182 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
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 }
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 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
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
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 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
190 {
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 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
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
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 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
195 {
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 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
197 }
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
198
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
199 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
200 {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
201 const uint32_t button_height = 52;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
202 const uint32_t ideal_button_width = 300;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
203 const uint32_t button_space = 6;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
204
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
205 uint32_t width = render_width();
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
206 uint32_t height = render_height();
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
207 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
208 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
209 uint32_t left = width/2 - button_width/2;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
210
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
211 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
212 for (uint32_t i = 0; i < num_entries; i++)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
213 {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
214 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
215 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
216 push_view(items[i].next_view);
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
217 if (!current_view) {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
218 exit(0);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
219 }
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
220 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
221 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
222 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
223 }
1474
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 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
226 nk_layout_space_end(context);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
227 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
228
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
229 void binding_loop(char *key, tern_val val, uint8_t valtype, void *data)
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
230 {
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
231 if (valtype != TVAL_PTR) {
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
232 return;
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
233 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
234 tern_node **binding_lookup = data;
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
235 *binding_lookup = tern_insert_ptr(*binding_lookup, val.ptrval, strdup(key));
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
236 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
237
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
238 static const char *set_binding;
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
239 char *set_label;
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
240 void binding_group(struct nk_context *context, char *name, const char **binds, const char **bind_names, uint32_t num_binds, tern_node *binding_lookup)
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
241 {
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
242 nk_layout_row_static(context, 34*num_binds+60, render_width() - 80, 1);
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
243 if (nk_group_begin(context, name, NK_WINDOW_TITLE)) {
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
244 nk_layout_row_static(context, 30, render_width()/2 - 80, 2);
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
245
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
246 for (int i = 0; i < num_binds; i++)
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
247 {
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
248 char *label_alloc = bind_names ? NULL : path_extension(binds[i]);
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
249 const char *label = label_alloc;
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
250 if (!label) {
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
251 label = bind_names ? bind_names[i] : binds[i];
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
252 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
253 nk_label(context, label, NK_TEXT_LEFT);
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
254 if (nk_button_label(context, tern_find_ptr_default(binding_lookup, binds[i], "Not Set"))) {
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
255 set_binding = binds[i];
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
256 set_label = strdup(label);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
257 }
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
258 if (label_alloc) {
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
259 free(label_alloc);
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
260 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
261 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
262 nk_group_end(context);
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
263 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
264 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
265
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
266 void view_key_bindings(struct nk_context *context)
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
267 {
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
268 const char *controller1_binds[] = {
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
269 "gamepads.1.up", "gamepads.1.down", "gamepads.1.left", "gamepads.1.right",
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
270 "gamepads.1.a", "gamepads.1.b", "gamepads.1.c",
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
271 "gamepads.1.x", "gamepads.1.y", "gamepads.1.z",
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
272 "gamepads.1.start", "gamepads.1.mode"
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
273 };
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
274 const char *controller2_binds[] = {
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
275 "gamepads.2.up", "gamepads.2.down", "gamepads.2.left", "gamepads.2.right",
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
276 "gamepads.2.a", "gamepads.2.b", "gamepads.2.c",
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
277 "gamepads.2.x", "gamepads.2.y", "gamepads.2.z",
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
278 "gamepads.2.start", "gamepads.2.mode"
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
279 };
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
280 const char *general_binds[] = {
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
281 "ui.exit", "ui.save_state", "ui.toggle_fullscreen", "ui.soft_reset", "ui.reload",
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
282 "ui.screenshot", "ui.sms_pause", "ui.toggle_keyboard_cpatured", "ui.release_mouse"
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
283 };
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
284 const char *general_names[] = {
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
285 "Show Menu", "Quick Save", "Toggle Fullscreen", "Soft Reset", "Reload Media"
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
286 "Internal Screenshot", "SMS Pause", "Capture Keyboard", "Release Mouse"
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
287 };
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
288 const char *speed_binds[] = {
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
289 "ui.next_speed", "ui.prev_speed",
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
290 "ui.set_speed.0", "ui.set_speed.1", "ui.set_speed.2" ,"ui.set_speed.3", "ui.set_speed.4",
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
291 "ui.set_speed.5", "ui.set_speed.6", "ui.set_speed.7" ,"ui.set_speed.8", "ui.set_speed.9",
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
292 };
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
293 const char *speed_names[] = {
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
294 "Next", "Previous",
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
295 "Default Speed", "Set Speed 1", "Set Speed 2", "Set Speed 3", "Set Speed 4",
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
296 "Set Speed 5", "Set Speed 6", "Set Speed 7", "Set Speed 8", "Set Speed 9"
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
297 };
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
298 const char *debug_binds[] = {
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
299 "ui.enter_debugger", "ui.vdp_debug_mode", "ui.vdp_debug_pal"
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
300 };
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
301 const char *debug_names[] = {
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
302 "Enter Debugger", "VDP Debug Mode", "Debug Palette"
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
303 };
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
304 const uint32_t NUM_C1_BINDS = sizeof(controller1_binds)/sizeof(*controller1_binds);
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
305 const uint32_t NUM_C2_BINDS = sizeof(controller2_binds)/sizeof(*controller2_binds);
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
306 const uint32_t NUM_SPEED_BINDS = sizeof(speed_binds)/sizeof(*speed_binds);
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
307 const uint32_t NUM_GEN_BINDS = sizeof(general_binds)/sizeof(*general_binds);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
308 const uint32_t NUM_DBG_BINDS = sizeof(debug_binds)/sizeof(*debug_binds);
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
309 static tern_node *binding_lookup;
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
310 if (!binding_lookup) {
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
311 tern_node *bindings = tern_find_path(config, "bindings\0keys\0", TVAL_NODE).ptrval;
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
312 if (bindings) {
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
313 tern_foreach(bindings, binding_loop, &binding_lookup);
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
314 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
315 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
316 uint32_t width = render_width();
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
317 uint32_t height = render_height();
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
318 if (nk_begin(context, "Keyboard Bindings", nk_rect(0, 0, width, height), 0)) {
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
319 binding_group(context, "Controller 1", controller1_binds, NULL, NUM_C1_BINDS, binding_lookup);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
320 binding_group(context, "Controller 2", controller2_binds, NULL, NUM_C2_BINDS, binding_lookup);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
321 binding_group(context, "General", general_binds, general_names, NUM_GEN_BINDS, binding_lookup);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
322 binding_group(context, "Speed Control", speed_binds, speed_names, NUM_SPEED_BINDS, binding_lookup);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
323 binding_group(context, "Debug", debug_binds, debug_names, NUM_DBG_BINDS, binding_lookup);
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
324
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
325 nk_end(context);
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
326 }
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
327 if (set_binding && nk_begin(context, "Set Binding", nk_rect(width/4, height/4, width/2/*width*3/4*/, height/2), NK_WINDOW_TITLE | NK_WINDOW_BORDER)) {
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
328 nk_layout_row_static(context, 30, width/2-30, 1);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
329 nk_label(context, "Press new key for", NK_TEXT_CENTERED);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
330 nk_label(context, set_label, NK_TEXT_CENTERED);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
331 if (nk_button_label(context, "Cancel")) {
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
332 free(set_label);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
333 set_binding = set_label = NULL;
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
334 }
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
335 nk_end(context);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
336 }
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
337 }
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
338 void view_controllers(struct nk_context *context)
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
339 {
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
340
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
341 }
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
342
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
343 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
344 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
345 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
346 nk_label(context, label, NK_TEXT_LEFT);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
347 uint8_t newval = nk_check_label(context, "", curval);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
348 if (newval != curval) {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
349 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
350 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
351 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
352
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
353 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
354 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
355 char buffer[12];
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
356 nk_label(context, label, NK_TEXT_LEFT);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
357 uint32_t curval;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
358 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
359 uint32_t len = strlen(curstr);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
360 if (len > 11) {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
361 len = 11;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
362 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
363 memcpy(buffer, curstr, len);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
364 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
365 buffer[len] = 0;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
366 if (strcmp(buffer, curstr)) {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
367 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
368 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
369 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
370
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
371 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
372 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
373 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
374 int curval = curstr ? atoi(curstr) : def;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
375 nk_label(context, label, NK_TEXT_LEFT);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
376 int val = curval;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
377 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
378 if (val != curval) {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
379 char buffer[12];
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
380 sprintf(buffer, "%d", val);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
381 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
382 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
383 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
384
1492
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
385 typedef struct {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
386 char *fragment;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
387 char *vertex;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
388 } shader_prog;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
389
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
390 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
391 {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
392 uint32_t num_progs = *num_existing;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
393 uint32_t prog_storage = *storage;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
394 uint32_t starting = num_progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
395
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
396 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
397 if (entries[i].is_dir) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
398 continue;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
399 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
400 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
401 uint32_t len = strlen(no_ext);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
402 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
403 uint8_t dupe = 0;;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
404 for (uint32_t j = 0; j < starting; j++) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
405 if (!strcmp(entries[i].name, progs[j].fragment)) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
406 dupe = 1;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
407 break;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
408 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
409 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
410 if (!dupe) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
411 if (num_progs == prog_storage) {
1493
24f44f26b74d Fix buffer overrun in video settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1492
diff changeset
412 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
413 progs = realloc(progs, sizeof(progs) * prog_storage);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
414 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
415 progs[num_progs].vertex = NULL;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
416 progs[num_progs++].fragment = strdup(entries[i].name);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
417 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
418 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
419 free(no_ext);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
420 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
421
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
422 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
423 if (entries[i].is_dir) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
424 continue;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
425 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
426 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
427 uint32_t len = strlen(no_ext);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
428 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
429 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
430 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
431 progs[j].vertex = strdup(entries[i].name);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
432 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
433 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
434 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
435 free(no_ext);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
436 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
437 free_dir_list(entries, num_entries);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
438 *num_existing = num_progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
439 *storage = prog_storage;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
440 return progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
441 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
442
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
443 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
444 {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
445 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
446 size_t num_entries;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
447 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
448 free(shader_dir);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
449 shader_prog *progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
450 uint32_t num_progs = 0, prog_storage;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
451 if (num_entries) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
452 progs = calloc(num_entries, sizeof(shader_prog));
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
453 prog_storage = num_entries;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
454 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
455 } else {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
456 progs = NULL;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
457 prog_storage = 0;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
458 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
459 shader_dir = path_append(get_exe_dir(), "shaders");
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
460 entries = get_dir_list(shader_dir, &num_entries);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
461 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
462 *num_out = num_progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
463 return progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
464 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
465
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
466 void view_video_settings(struct nk_context *context)
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
467 {
1492
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
468 static shader_prog *progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
469 static char **prog_names;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
470 static uint32_t num_progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
471 static uint32_t selected_prog;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
472 if(!progs) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
473 progs = get_shader_list(&num_progs);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
474 prog_names = calloc(num_progs, sizeof(char*));
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
475 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
476 {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
477 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
478 uint32_t len = strlen(prog_names[i]);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
479 if (len > 2) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
480 prog_names[i][len-2] = 0;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
481 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
482 if (!progs[i].vertex) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
483 progs[i].vertex = strdup("default.v.glsl");
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
484 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
485 if (!strcmp(
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
486 progs[i].fragment,
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
487 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
488 )) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
489 selected_prog = i;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
490 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
491 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
492 }
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
493 uint32_t width = render_width();
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
494 uint32_t height = render_height();
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
495 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
496 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
497 settings_toggle(context, "Fullscreen", "video\0fullscreen\0", 0);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
498 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
499 settings_toggle(context, "Scanlines", "video\0scanlines\0", 0);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
500 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
501 nk_label(context, "Shader", NK_TEXT_LEFT);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
502 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
503 if (next_selected != selected_prog) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
504 selected_prog = next_selected;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
505 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
506 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
507 }
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
508 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
509 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
510 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
511 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
512 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
513 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
514 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
515 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
516
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
517 if (nk_button_label(context, "Back")) {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
518 pop_view();
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
519 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
520 nk_end(context);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
521 }
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
522 }
1499
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
523
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
524 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
525 {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
526 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
527 int32_t selected = -1;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
528 for (uint32_t i = 0; i < num_options; i++)
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
529 {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
530 if (!strcmp(setting, options[i])) {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
531 selected = i;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
532 break;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
533 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
534 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
535 if (selected == -1) {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
536 for (uint32_t i = 0; i < num_options; i++)
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
537 {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
538 if (!strcmp(def, options[i])) {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
539 selected = i;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
540 break;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
541 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
542 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
543 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
544 return selected;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
545 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
546
1500
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
547 int32_t settings_dropdown_ex(struct nk_context *context, char *label, const char **options, const char **opt_display, uint32_t num_options, int32_t current, char *path)
1499
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
548 {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
549 nk_label(context, label, NK_TEXT_LEFT);
1500
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
550 int32_t next = nk_combo(context, opt_display, num_options, current, 30, nk_vec2(300, 300));
1499
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
551 if (next != current) {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
552 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
553 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
554 return next;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
555 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
556
1500
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
557 int32_t settings_dropdown(struct nk_context *context, char *label, const char **options, uint32_t num_options, int32_t current, char *path)
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
558 {
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
559 return settings_dropdown_ex(context, label, options, options, num_options, current, path);
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
560 }
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
561
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
562 void view_audio_settings(struct nk_context *context)
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
563 {
1494
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
564 const char *rates[] = {
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
565 "192000",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
566 "96000",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
567 "48000",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
568 "44100",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
569 "22050"
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
570 };
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
571 const char *sizes[] = {
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
572 "1024",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
573 "512",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
574 "256",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
575 "128",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
576 "64"
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
577 };
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
578 const uint32_t num_rates = sizeof(rates)/sizeof(*rates);
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
579 const uint32_t num_sizes = sizeof(sizes)/sizeof(*sizes);
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
580 static int32_t selected_rate = -1;
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
581 static int32_t selected_size = -1;
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
582 if (selected_rate < 0 || selected_size < 0) {
1499
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
583 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
584 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
585 }
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
586 uint32_t width = render_width();
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
587 uint32_t height = render_height();
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
588 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
589 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
590 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
591 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
592 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
593 if (nk_button_label(context, "Back")) {
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
594 pop_view();
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
595 }
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
596 nk_end(context);
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
597 }
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
598 }
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
599 void view_system_settings(struct nk_context *context)
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
600 {
1500
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
601 const char *regions[] = {
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
602 "J - Japan",
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
603 "U - Americas",
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
604 "E - Europe"
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
605 };
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
606 const char *region_codes[] = {"J", "U", "E"};
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
607 const uint32_t num_regions = sizeof(regions)/sizeof(*regions);
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
608 static int32_t selected_region = -1;
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
609 if (selected_region < 0) {
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
610 selected_region = find_match(region_codes, num_regions, "system\0default_region\0", "U");
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
611 }
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
612 const char *formats[] = {
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
613 "native",
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
614 "gst"
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
615 };
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
616 const uint32_t num_formats = sizeof(formats)/sizeof(*formats);
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
617 int32_t selected_format = -1;
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
618 if (selected_format < 0) {
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
619 selected_format = find_match(formats, num_formats, "ui\0state_format\0", "native");
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
620 }
1501
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
621 const char *ram_inits[] = {
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
622 "zero",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
623 "random"
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
624 };
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
625 const uint32_t num_inits = sizeof(ram_inits)/sizeof(*ram_inits);
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
626 static int32_t selected_init = -1;
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
627 if (selected_init < 0) {
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
628 selected_init = find_match(ram_inits, num_inits, "system\0ram_init\0", "zero");
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
629 }
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
630 const char *io_opts_1[] = {
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
631 "gamepad2.1",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
632 "gamepad3.1",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
633 "gamepad6.1",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
634 "mouse",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
635 "saturn keyboard",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
636 "xband keyboard"
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
637 };
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
638 const char *io_opts_2[] = {
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
639 "gamepad2.2",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
640 "gamepad3.2",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
641 "gamepad6.2",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
642 "mouse",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
643 "saturn keyboard",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
644 "xband keyboard"
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
645 };
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
646 static int32_t selected_io_1 = -1;
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
647 static int32_t selected_io_2 = -1;
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
648 const uint32_t num_io = sizeof(io_opts_1)/sizeof(*io_opts_1);
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
649 if (selected_io_1 < 0 || selected_io_2 < 0) {
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
650 selected_io_1 = find_match(io_opts_1, num_io, "io\0devices\0""1\0", "gamepad6.1");
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
651 selected_io_2 = find_match(io_opts_2, num_io, "io\0devices\0""2\0", "gamepad6.2");
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
652 }
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
653
1498
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
654 uint32_t width = render_width();
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
655 uint32_t height = render_height();
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
656 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
657 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
658 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
659 settings_toggle(context, "Remember ROM Path", "ui\0remember_path\0", 1);
1500
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
660 selected_region = settings_dropdown_ex(context, "Default Region", region_codes, regions, num_regions, selected_region, "system\0default_region\0");
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
661 selected_format = settings_dropdown(context, "Save State Format", formats, num_formats, selected_format, "ui\0state_format\0");
1501
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
662 selected_init = settings_dropdown(context, "Initial RAM Value", ram_inits, num_inits, selected_init, "system\0ram_init\0");
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
663 selected_io_1 = settings_dropdown_ex(context, "IO Port 1 Device", io_opts_1, device_type_names, num_io, selected_io_1, "io\0devices\0""1\0");
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
664 selected_io_2 = settings_dropdown_ex(context, "IO Port 2 Device", io_opts_2, device_type_names, num_io, selected_io_2, "io\0devices\0""2\0");
1498
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
665 if (nk_button_label(context, "Back")) {
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
666 pop_view();
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
667 }
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
668 nk_end(context);
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
669 }
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
670 }
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
671
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
672 void view_back(struct nk_context *context)
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
673 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
674 pop_view();
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
675 pop_view();
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
676 current_view(context);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
677 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
678
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
679 void view_settings(struct nk_context *context)
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
680 {
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
681 static menu_item items[] = {
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
682 {"Key Bindings", view_key_bindings},
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
683 {"Controllers", view_controllers},
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
684 {"Video", view_video_settings},
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
685 {"Audio", view_audio_settings},
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
686 {"System", view_system_settings},
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
687 {"Back", view_back}
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
688 };
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
689
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
690 const uint32_t num_buttons = 6;
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
691 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
692 menu(context, sizeof(items)/sizeof(*items), items);
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
693 nk_end(context);
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
694 }
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
695 }
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
696
1476
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
697 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
698 {
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
699 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
700 {"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
701 {"Load ROM", view_load},
1487
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
702 {"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
703 {"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
704 {"Load State", view_load_state},
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
705 {"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
706 {"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
707 };
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
708
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
709 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
710 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
711 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
712 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
713 }
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
714 }
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
715
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
716 void view_menu(struct nk_context *context)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
717 {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
718 static menu_item items[] = {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
719 {"Load ROM", view_load},
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
720 {"Settings", view_settings},
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
721 {"About", view_about},
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
722 {"Exit", NULL}
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
723 };
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
724
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
725 const uint32_t num_buttons = 3;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
726 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
727 menu(context, sizeof(items)/sizeof(*items), items);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
728 nk_end(context);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
729 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
730 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
731
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
732 void blastem_nuklear_render(void)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
733 {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
734 nk_input_end(context);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
735 current_view(context);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
736 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
737 nk_input_begin(context);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
738 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
739
1486
a6881d0d76d0 Pause game execution when in the new UI pause menu
Michael Pavone <pavone@retrodev.com>
parents: 1485
diff changeset
740 void ui_idle_loop(void)
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
741 {
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
742 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
743 static uint32_t last;
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
744 while (current_view != view_play)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
745 {
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
746 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
747 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
748 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
749 }
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
750 last = current;
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
751 render_update_display();
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
752 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
753 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
754 static void handle_event(SDL_Event *event)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
755 {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
756 nk_sdl_handle_event(event);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
757 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
758
1476
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
759 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
760 {
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
761 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
762 }
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
763 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
764 {
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
765 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
766 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
767 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
768 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
769 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
770 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
771 }
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
772 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
773 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
774 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
775 }
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
776
1477
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
777 void show_pause_menu(void)
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
778 {
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
779 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
780 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
781 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
782 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
783 }
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
784
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
785 static uint8_t active;
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
786 uint8_t is_nuklear_active(void)
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
787 {
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
788 return active;
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
789 }
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
790
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
791 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
792 {
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
793 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
794 //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
795 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
796 }
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
797 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
798 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
799 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
800 }
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
801 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
802 }
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
803
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
804 void blastem_nuklear_init(uint8_t file_loaded)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
805 {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
806 context = nk_sdl_init(render_get_window());
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
807
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
808 struct nk_font_atlas *atlas;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
809 nk_sdl_font_stash_begin(&atlas);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
810 char *font = default_font_path();
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
811 if (!font) {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
812 fatal_error("Failed to find default font path\n");
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
813 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
814 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
815 nk_sdl_font_stash_end();
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
816 nk_style_set_font(context, &def_font->handle);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
817 current_view = file_loaded ? view_play : view_menu;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
818 render_set_ui_render_fun(blastem_nuklear_render);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
819 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
820 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
821 active = 1;
1486
a6881d0d76d0 Pause game execution when in the new UI pause menu
Michael Pavone <pavone@retrodev.com>
parents: 1485
diff changeset
822 ui_idle_loop();
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
823 }