annotate nuklear_ui/blastem_nuklear.c @ 1571:3def7b216a5b

WIP controller binding view
author Michael Pavone <pavone@retrodev.com>
date Sat, 21 Apr 2018 14:48:01 -0700
parents bc96bb3a0998
children 5efeca06d942
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>
1571
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
5 #include <limits.h>
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6 #include "blastem_nuklear.h"
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
7 #include "font.h"
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
8 #include "../render.h"
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
9 #include "../render_sdl.h"
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
10 #include "../util.h"
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
11 #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
12 #include "../saves.h"
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13 #include "../blastem.h"
1485
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
14 #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
15 #include "../io.h"
1569
0ec89dadb36d Add code for loading PNG images. Added 360 controller image. WIP work on gamepad mapping UI
Michael Pavone <pavone@retrodev.com>
parents: 1568
diff changeset
16 #include "../png.h"
1474
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 static struct nk_context *context;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20 typedef void (*view_fun)(struct nk_context *);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21 static view_fun current_view;
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
22 static view_fun *previous_views;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
23 static uint32_t view_storage;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
24 static uint32_t num_prev;
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 static void push_view(view_fun new_view)
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
27 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
28 if (num_prev == view_storage) {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
29 view_storage = view_storage ? 2*view_storage : 2;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
30 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
31 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
32 previous_views[num_prev++] = current_view;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
33 current_view = new_view;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
34 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
35
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
36 static void pop_view()
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
37 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
38 if (num_prev) {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
39 current_view = previous_views[--num_prev];
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 }
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 static void clear_view_stack()
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
44 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
45 num_prev = 0;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
46 }
1474
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 void view_play(struct nk_context *context)
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
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
51 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
52
1487
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
53 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
54 {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
55 static char *current_path;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
56 static dir_entry *entries;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
57 static size_t num_entries;
1554
87350caf6dab Allow double click to open ROM in file browser
Michael Pavone <pavone@retrodev.com>
parents: 1553
diff changeset
58 static int32_t selected_entry = -1;
1485
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
59 static char **ext_list;
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
60 static uint32_t num_exts;
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
61 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
62 if (!current_path) {
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1478
diff changeset
63 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
64 }
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
65 if (!entries) {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
66 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
67 if (entries) {
d82af64c94d2 Sort directory listing in Nuklear UI file browser
Michael Pavone <pavone@retrodev.com>
parents: 1483
diff changeset
68 sort_dir_list(entries, num_entries);
d82af64c94d2 Sort directory listing in Nuklear UI file browser
Michael Pavone <pavone@retrodev.com>
parents: 1483
diff changeset
69 }
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
70 }
1485
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
71 if (!got_ext_list) {
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
72 ext_list = get_extension_list(config, &num_exts);
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
73 got_ext_list = 1;
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
74 }
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
75 uint32_t width = render_width();
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
76 uint32_t height = render_height();
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
77 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
78 nk_layout_row_static(context, height - 100, width - 60, 1);
1554
87350caf6dab Allow double click to open ROM in file browser
Michael Pavone <pavone@retrodev.com>
parents: 1553
diff changeset
79 int32_t old_selected = selected_entry;
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
80 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
81 nk_layout_row_static(context, 28, width-100, 1);
1554
87350caf6dab Allow double click to open ROM in file browser
Michael Pavone <pavone@retrodev.com>
parents: 1553
diff changeset
82 for (int32_t i = 0; i < num_entries; i++)
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
83 {
1485
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
84 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
85 continue;
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
86 }
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
87 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
88 continue;
369da70ee2c2 Filter file list in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1484
diff changeset
89 }
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
90 int selected = i == selected_entry;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
91 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
92 if (selected) {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
93 selected_entry = i;
1554
87350caf6dab Allow double click to open ROM in file browser
Michael Pavone <pavone@retrodev.com>
parents: 1553
diff changeset
94 } else if (i == selected_entry) {
87350caf6dab Allow double click to open ROM in file browser
Michael Pavone <pavone@retrodev.com>
parents: 1553
diff changeset
95 selected_entry = -1;
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
96 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
97 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
98 nk_group_end(context);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
99 }
1476
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
100 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
101 if (nk_button_label(context, "Back")) {
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
102 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
103 }
1554
87350caf6dab Allow double click to open ROM in file browser
Michael Pavone <pavone@retrodev.com>
parents: 1553
diff changeset
104 if (nk_button_label(context, "Open") || (old_selected >= 0 && selected_entry < 0)) {
87350caf6dab Allow double click to open ROM in file browser
Michael Pavone <pavone@retrodev.com>
parents: 1553
diff changeset
105 if (selected_entry < 0) {
87350caf6dab Allow double click to open ROM in file browser
Michael Pavone <pavone@retrodev.com>
parents: 1553
diff changeset
106 selected_entry = old_selected;
87350caf6dab Allow double click to open ROM in file browser
Michael Pavone <pavone@retrodev.com>
parents: 1553
diff changeset
107 }
1481
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1478
diff changeset
108 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
109 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
110 free(current_path);
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1478
diff changeset
111 current_path = full_path;
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
112 free_dir_list(entries, num_entries);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
113 entries = NULL;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
114 } else {
1487
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
115 if(normal_open) {
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
116 if (current_system) {
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
117 current_system->next_rom = full_path;
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
118 current_system->request_exit(current_system);
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
119 } else {
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
120 init_system_with_media(full_path, SYSTEM_UNKNOWN);
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
121 free(full_path);
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
122 }
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
123 } else {
1487
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
124 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
125 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
126 }
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
127 clear_view_stack();
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
128 current_view = view_play;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
129 }
1554
87350caf6dab Allow double click to open ROM in file browser
Michael Pavone <pavone@retrodev.com>
parents: 1553
diff changeset
130 selected_entry = -1;
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
131 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
132 nk_end(context);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
133 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
134 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
135
1487
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
136 void view_load(struct nk_context *context)
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
137 {
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
138 view_file_browser(context, 1);
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
139 }
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
140
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
141 void view_lock_on(struct nk_context *context)
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
142 {
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
143 view_file_browser(context, 0);
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
144 }
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
145
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
146 void view_about(struct nk_context *context)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
147 {
1526
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
148 const char *lines[] = {
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
149 "BlastEm v0.6.0",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
150 "Copyright 2012-2017 Michael Pavone",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
151 "",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
152 "BlastEm is a high performance open source",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
153 "(GPLv3) Genesis/Megadrive emulator",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
154 };
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
155 const uint32_t NUM_LINES = sizeof(lines)/sizeof(*lines);
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
156 const char *thanks[] = {
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
157 "Nemesis: Documentatino and test ROMs",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
158 "Charles MacDonald: Documentation",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
159 "Eke-Eke: Documentation",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
160 "Bart Trzynadlowski: Documentation",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
161 "KanedaFR: Hosting the best Sega forum",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
162 "Titan: Awesome demos and documentation",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
163 "micky: Testing",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
164 "Sasha: Testing",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
165 "lol-frank: Testing",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
166 "Sik: Testing",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
167 "Tim Lawrence : Testing",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
168 "ComradeOj: Testing",
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
169 "Vladikcomper: Testing"
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
170 };
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
171 const uint32_t NUM_THANKS = sizeof(thanks)/sizeof(*thanks);
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
172 uint32_t width = render_width();
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
173 uint32_t height = render_height();
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
174 if (nk_begin(context, "About", nk_rect(0, 0, width, height), 0)) {
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
175 nk_layout_row_static(context, 30, width-40, 1);
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
176 for (uint32_t i = 0; i < NUM_LINES; i++)
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
177 {
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
178 nk_label(context, lines[i], NK_TEXT_LEFT);
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
179 }
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
180 nk_layout_row_static(context, height - 80 - 34*NUM_LINES, width-40, 1);
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
181 if (nk_group_begin(context, "Special Thanks", NK_WINDOW_TITLE)) {
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
182 nk_layout_row_static(context, 30, width - 80, 1);
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
183 for (uint32_t i = 0; i < NUM_THANKS; i++)
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
184 {
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
185 nk_label(context, thanks[i], NK_TEXT_LEFT);
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
186 }
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
187 nk_group_end(context);
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
188 }
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
189 nk_layout_row_static(context, 52, width/3, 1);
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
190 if (nk_button_label(context, "Back")) {
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
191 pop_view();
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
192 }
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
193 nk_end(context);
9bea1a199f15 Filled in About view
Michael Pavone <pavone@retrodev.com>
parents: 1522
diff changeset
194 }
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
195 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
196
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
197 typedef struct {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
198 const char *title;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
199 view_fun next_view;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
200 } menu_item;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
201
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
202 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
203 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
204
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
205 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
206 {
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
207 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
208 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
209 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
210 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
211 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
212 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
213 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
214 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
215 }
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
216 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
217 {
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
218 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
219 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
220 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
221 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
222 }
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 }
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
224 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
225 }
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
226 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
227 if (nk_button_label(context, "Back")) {
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
228 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
229 }
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
230 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
231 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
232 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
233 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
234 }
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
235 } 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
236 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
237 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
238 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
239 }
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
240 }
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
241 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
242 }
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
243 }
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
244
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
245 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
246 {
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
247 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
248 }
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
249
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
250 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
251 {
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
252 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
253 }
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
254
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
255 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
256 {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
257 const uint32_t button_height = 52;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
258 const uint32_t ideal_button_width = 300;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
259 const uint32_t button_space = 6;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
260
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
261 uint32_t width = render_width();
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
262 uint32_t height = render_height();
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
263 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
264 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
265 uint32_t left = width/2 - button_width/2;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
266
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
267 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
268 for (uint32_t i = 0; i < num_entries; i++)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
269 {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
270 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
271 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
272 push_view(items[i].next_view);
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
273 if (!current_view) {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
274 exit(0);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
275 }
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
276 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
277 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
278 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
279 }
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
280 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
281 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
282 nk_layout_space_end(context);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
283 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
284
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
285 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
286 {
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
287 if (valtype != TVAL_PTR) {
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
288 return;
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
289 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
290 tern_node **binding_lookup = data;
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
291 *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
292 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
293
1522
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
294 static int32_t keycode;
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
295 static const char *set_binding;
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
296 char *set_label;
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
297 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
298 {
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
299 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
300 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
301 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
302
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
303 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
304 {
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
305 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
306 const char *label = label_alloc;
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
307 if (!label) {
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
308 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
309 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
310 nk_label(context, label, NK_TEXT_LEFT);
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
311 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
312 set_binding = binds[i];
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
313 set_label = strdup(label);
1522
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
314 keycode = 0;
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
315 }
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
316 if (label_alloc) {
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
317 free(label_alloc);
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
318 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
319 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
320 nk_group_end(context);
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
321 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
322 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
323
1522
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
324 static char *get_key_name(int32_t keycode)
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
325 {
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
326 char *name = NULL;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
327 if (keycode > ' ' && keycode < 0x80) {
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
328 //key corresponds to a printable non-whitespace character
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
329 name = malloc(2);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
330 name[0] = keycode;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
331 name[1] = 0;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
332 } else {
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
333 switch (keycode)
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
334 {
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
335 case RENDERKEY_UP: name = "up"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
336 case RENDERKEY_DOWN: name = "down"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
337 case RENDERKEY_LEFT: name = "left"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
338 case RENDERKEY_RIGHT: name = "right"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
339 case '\r': name = "enter"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
340 case ' ': name = "space"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
341 case '\t': name = "tab"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
342 case '\b': name = "backspace"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
343 case RENDERKEY_ESC: name = "esc"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
344 case RENDERKEY_DEL: name = "delete"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
345 case RENDERKEY_LSHIFT: name = "lshift"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
346 case RENDERKEY_RSHIFT: name = "rshift"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
347 case RENDERKEY_LCTRL: name = "lctrl"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
348 case RENDERKEY_RCTRL: name = "rctrl"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
349 case RENDERKEY_LALT: name = "lalt"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
350 case RENDERKEY_RALT: name = "ralt"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
351 case RENDERKEY_HOME: name = "home"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
352 case RENDERKEY_END: name = "end"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
353 case RENDERKEY_PAGEUP: name = "pageup"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
354 case RENDERKEY_PAGEDOWN: name = "pagedown"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
355 case RENDERKEY_F1: name = "f1"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
356 case RENDERKEY_F2: name = "f2"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
357 case RENDERKEY_F3: name = "f3"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
358 case RENDERKEY_F4: name = "f4"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
359 case RENDERKEY_F5: name = "f5"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
360 case RENDERKEY_F6: name = "f6"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
361 case RENDERKEY_F7: name = "f7"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
362 case RENDERKEY_F8: name = "f8"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
363 case RENDERKEY_F9: name = "f9"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
364 case RENDERKEY_F10: name = "f10"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
365 case RENDERKEY_F11: name = "f11"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
366 case RENDERKEY_F12: name = "f12"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
367 case RENDERKEY_SELECT: name = "select"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
368 case RENDERKEY_PLAY: name = "play"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
369 case RENDERKEY_SEARCH: name = "search"; break;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
370 case RENDERKEY_BACK: name = "back"; break;
1549
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
371 case RENDERKEY_NP0: name = "np0"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
372 case RENDERKEY_NP1: name = "np1"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
373 case RENDERKEY_NP2: name = "np2"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
374 case RENDERKEY_NP3: name = "np3"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
375 case RENDERKEY_NP4: name = "np4"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
376 case RENDERKEY_NP5: name = "np5"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
377 case RENDERKEY_NP6: name = "np6"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
378 case RENDERKEY_NP7: name = "np7"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
379 case RENDERKEY_NP8: name = "np8"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
380 case RENDERKEY_NP9: name = "np9"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
381 case RENDERKEY_NP_DIV: name = "np/"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
382 case RENDERKEY_NP_MUL: name = "np*"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
383 case RENDERKEY_NP_MIN: name = "np-"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
384 case RENDERKEY_NP_PLUS: name = "np+"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
385 case RENDERKEY_NP_ENTER: name = "npenter"; break;
577253765192 Allow numpad keys to be mapped
Michael Pavone <pavone@retrodev.com>
parents: 1545
diff changeset
386 case RENDERKEY_NP_STOP: name = "np."; break;
1522
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
387 }
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
388 if (name) {
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
389 name = strdup(name);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
390 }
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
391 }
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
392 return name;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
393 }
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
394
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
395 void view_key_bindings(struct nk_context *context)
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
396 {
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
397 const char *controller1_binds[] = {
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
398 "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
399 "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
400 "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
401 "gamepads.1.start", "gamepads.1.mode"
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
402 };
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
403 const char *controller2_binds[] = {
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
404 "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
405 "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
406 "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
407 "gamepads.2.start", "gamepads.2.mode"
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
408 };
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
409 const char *general_binds[] = {
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
410 "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
411 "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
412 };
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
413 const char *general_names[] = {
1522
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
414 "Show Menu", "Quick Save", "Toggle Fullscreen", "Soft Reset", "Reload Media",
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
415 "Internal Screenshot", "SMS Pause", "Capture Keyboard", "Release Mouse"
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
416 };
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
417 const char *speed_binds[] = {
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
418 "ui.next_speed", "ui.prev_speed",
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
419 "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
420 "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
421 };
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
422 const char *speed_names[] = {
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
423 "Next", "Previous",
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
424 "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
425 "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
426 };
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
427 const char *debug_binds[] = {
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
428 "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
429 };
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
430 const char *debug_names[] = {
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
431 "Enter Debugger", "VDP Debug Mode", "Debug Palette"
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
432 };
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
433 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
434 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
435 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
436 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
437 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
438 static tern_node *binding_lookup;
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
439 if (!binding_lookup) {
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
440 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
441 if (bindings) {
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
442 tern_foreach(bindings, binding_loop, &binding_lookup);
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
443 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
444 }
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
445 uint32_t width = render_width();
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
446 uint32_t height = render_height();
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
447 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
448 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
449 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
450 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
451 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
452 binding_group(context, "Debug", debug_binds, debug_names, NUM_DBG_BINDS, binding_lookup);
1545
3faf917bab56 Add back button to Key binding view and add a window and back button to empty controller view so you can always get back to the main menu
Michael Pavone <pavone@retrodev.com>
parents: 1527
diff changeset
453 nk_layout_row_static(context, 34, (render_width() - 80) / 2, 1);
3faf917bab56 Add back button to Key binding view and add a window and back button to empty controller view so you can always get back to the main menu
Michael Pavone <pavone@retrodev.com>
parents: 1527
diff changeset
454 if (nk_button_label(context, "Back")) {
3faf917bab56 Add back button to Key binding view and add a window and back button to empty controller view so you can always get back to the main menu
Michael Pavone <pavone@retrodev.com>
parents: 1527
diff changeset
455 pop_view();
3faf917bab56 Add back button to Key binding view and add a window and back button to empty controller view so you can always get back to the main menu
Michael Pavone <pavone@retrodev.com>
parents: 1527
diff changeset
456 }
1520
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
457 nk_end(context);
cb3c6395b28c Initial work on keyboard binding settings view
Michael Pavone <pavone@retrodev.com>
parents: 1501
diff changeset
458 }
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
459 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
460 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
461 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
462 nk_label(context, set_label, NK_TEXT_CENTERED);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
463 if (nk_button_label(context, "Cancel")) {
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
464 free(set_label);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
465 set_binding = set_label = NULL;
1522
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
466 } else if (keycode) {
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
467 char *name = get_key_name(keycode);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
468 if (name) {
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
469 uint32_t prefix_len = strlen("bindings") + strlen("keys") + 2;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
470 char * old = tern_find_ptr(binding_lookup, set_binding);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
471 if (old) {
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
472 uint32_t suffix_len = strlen(old) + 1;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
473 char *old_path = malloc(prefix_len + suffix_len + 1);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
474 memcpy(old_path, "bindings\0keys\0", prefix_len);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
475 memcpy(old_path + prefix_len, old, suffix_len);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
476 old_path[prefix_len + suffix_len] = 0;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
477 tern_val old_val;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
478 if (tern_delete_path(&config, old_path, &old_val) == TVAL_PTR) {
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
479 free(old_val.ptrval);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
480 }
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
481 }
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
482 uint32_t suffix_len = strlen(name) + 1;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
483 char *path = malloc(prefix_len + suffix_len + 1);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
484 memcpy(path, "bindings\0keys\0", prefix_len);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
485 memcpy(path + prefix_len, name, suffix_len);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
486 path[prefix_len + suffix_len] = 0;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
487
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
488 config = tern_insert_path(config, path, (tern_val){.ptrval = strdup(set_binding)}, TVAL_PTR);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
489 free(path);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
490 free(name);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
491 tern_free(binding_lookup);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
492 binding_lookup = NULL;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
493 }
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
494 free(set_label);
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
495 set_binding = set_label = NULL;
1521
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
496 }
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
497 nk_end(context);
a51721408c15 More fleshed out keyboard bindings view
Michael Pavone <pavone@retrodev.com>
parents: 1520
diff changeset
498 }
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
499 }
1570
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
500 static struct nk_image controller_360_image;
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
501 static uint32_t controller_360_width, controller_360_height;
1571
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
502 #define MIN_BIND_BOX_WIDTH 140
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
503 #define MAX_BIND_BOX_WIDTH 350
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
504 void view_controllers(struct nk_context *context)
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
505 {
1571
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
506 if (nk_begin(context, "Controller Bindings", nk_rect(0, 0, render_width(), render_height()), NK_WINDOW_NO_SCROLLBAR)) {
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
507 uint32_t avail_height = render_height() - 60;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
508 float desired_width = render_width() * 0.5f, desired_height = avail_height * 0.5f;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
509 float controller_ratio = (float)controller_360_width / (float)controller_360_height;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
510 if (render_width() - desired_width < 2.5f*MIN_BIND_BOX_WIDTH) {
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
511 desired_width = render_width() - 2.5f*MIN_BIND_BOX_WIDTH;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
512 }
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
513
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
514 if (desired_width / desired_height > controller_ratio) {
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
515 desired_width = desired_height * controller_ratio;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
516 } else {
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
517 desired_height = desired_width / controller_ratio;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
518 }
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
519 float img_left = render_width() / 2.0f - desired_width / 2.0f;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
520 float img_top = avail_height / 2.0f - desired_height / 2.0f;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
521 float img_right = img_left + desired_width;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
522 nk_layout_space_begin(context, NK_STATIC, avail_height, INT_MAX);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
523 nk_layout_space_push(context, nk_rect(img_left, img_top, desired_width, desired_height));
1570
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
524 nk_image(context, controller_360_image);
1571
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
525
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
526 float bind_box_width = (render_width() - img_right) * 0.8f;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
527 if (bind_box_width < MIN_BIND_BOX_WIDTH) {
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
528 bind_box_width = render_width() - img_right;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
529 if (bind_box_width > MIN_BIND_BOX_WIDTH) {
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
530 bind_box_width = MIN_BIND_BOX_WIDTH;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
531 }
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
532 } else if (bind_box_width > MAX_BIND_BOX_WIDTH) {
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
533 bind_box_width = MAX_BIND_BOX_WIDTH;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
534 }
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
535 float bind_box_left;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
536 if (bind_box_width >= (render_width() - img_right)) {
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
537 bind_box_left = img_right;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
538 } else {
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
539 bind_box_left = img_right + (render_width() - img_right) / 2.0f - bind_box_width / 2.0f;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
540 }
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
541
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
542 nk_layout_space_push(context, nk_rect(bind_box_left, img_top, bind_box_width, 165));
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
543 nk_group_begin(context, "Action Buttons", NK_WINDOW_BORDER | NK_WINDOW_NO_SCROLLBAR);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
544 float widths[] = {34, bind_box_width - 60};
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
545 nk_layout_row(context, NK_STATIC, 34, 2, widths);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
546 nk_label(context, "A", NK_TEXT_LEFT);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
547 nk_button_label(context, "A");
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
548 nk_label(context, "B", NK_TEXT_LEFT);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
549 nk_button_label(context, "B");
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
550 nk_label(context, "X", NK_TEXT_LEFT);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
551 nk_button_label(context, "X");
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
552 nk_label(context, "Y", NK_TEXT_LEFT);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
553 nk_button_label(context, "Internal Screenshot");
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
554 nk_group_end(context);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
555
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
556 bind_box_left -= img_right;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
557 widths[0] += 44;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
558 widths[1] -= 44;
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
559 nk_layout_space_push(context, nk_rect(bind_box_left, img_top, bind_box_width, 205));
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
560 nk_group_begin(context, "Left Stick", NK_WINDOW_BORDER | NK_WINDOW_NO_SCROLLBAR);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
561 nk_layout_row(context, NK_STATIC, 34, 2, widths);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
562 nk_label(context, "Up", NK_TEXT_LEFT);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
563 nk_button_label(context, "Up");
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
564 nk_label(context, "Down", NK_TEXT_LEFT);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
565 nk_button_label(context, "Down");
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
566 nk_label(context, "Left", NK_TEXT_LEFT);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
567 nk_button_label(context, "Left");
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
568 nk_label(context, "Right", NK_TEXT_LEFT);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
569 nk_button_label(context, "Right");
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
570 nk_label(context, "Click", NK_TEXT_LEFT);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
571 nk_button_label(context, "None");
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
572
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
573 nk_group_end(context);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
574
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
575 nk_layout_space_end(context);
3def7b216a5b WIP controller binding view
Michael Pavone <pavone@retrodev.com>
parents: 1570
diff changeset
576
1545
3faf917bab56 Add back button to Key binding view and add a window and back button to empty controller view so you can always get back to the main menu
Michael Pavone <pavone@retrodev.com>
parents: 1527
diff changeset
577 nk_layout_row_static(context, 34, (render_width() - 80) / 2, 1);
3faf917bab56 Add back button to Key binding view and add a window and back button to empty controller view so you can always get back to the main menu
Michael Pavone <pavone@retrodev.com>
parents: 1527
diff changeset
578 if (nk_button_label(context, "Back")) {
3faf917bab56 Add back button to Key binding view and add a window and back button to empty controller view so you can always get back to the main menu
Michael Pavone <pavone@retrodev.com>
parents: 1527
diff changeset
579 pop_view();
3faf917bab56 Add back button to Key binding view and add a window and back button to empty controller view so you can always get back to the main menu
Michael Pavone <pavone@retrodev.com>
parents: 1527
diff changeset
580 }
3faf917bab56 Add back button to Key binding view and add a window and back button to empty controller view so you can always get back to the main menu
Michael Pavone <pavone@retrodev.com>
parents: 1527
diff changeset
581 nk_end(context);
3faf917bab56 Add back button to Key binding view and add a window and back button to empty controller view so you can always get back to the main menu
Michael Pavone <pavone@retrodev.com>
parents: 1527
diff changeset
582 }
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
583 }
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
584
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
585 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
586 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
587 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
588 nk_label(context, label, NK_TEXT_LEFT);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
589 uint8_t newval = nk_check_label(context, "", curval);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
590 if (newval != curval) {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
591 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
592 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
593 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
594
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
595 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
596 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
597 char buffer[12];
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
598 nk_label(context, label, NK_TEXT_LEFT);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
599 uint32_t curval;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
600 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
601 uint32_t len = strlen(curstr);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
602 if (len > 11) {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
603 len = 11;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
604 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
605 memcpy(buffer, curstr, len);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
606 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
607 buffer[len] = 0;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
608 if (strcmp(buffer, curstr)) {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
609 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
610 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
611 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
612
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
613 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
614 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
615 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
616 int curval = curstr ? atoi(curstr) : def;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
617 nk_label(context, label, NK_TEXT_LEFT);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
618 int val = curval;
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
619 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
620 if (val != curval) {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
621 char buffer[12];
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
622 sprintf(buffer, "%d", val);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
623 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
624 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
625 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
626
1492
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
627 typedef struct {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
628 char *fragment;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
629 char *vertex;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
630 } shader_prog;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
631
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
632 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
633 {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
634 uint32_t num_progs = *num_existing;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
635 uint32_t prog_storage = *storage;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
636 uint32_t starting = num_progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
637
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
638 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
639 if (entries[i].is_dir) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
640 continue;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
641 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
642 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
643 uint32_t len = strlen(no_ext);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
644 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
645 uint8_t dupe = 0;;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
646 for (uint32_t j = 0; j < starting; j++) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
647 if (!strcmp(entries[i].name, progs[j].fragment)) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
648 dupe = 1;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
649 break;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
650 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
651 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
652 if (!dupe) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
653 if (num_progs == prog_storage) {
1493
24f44f26b74d Fix buffer overrun in video settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1492
diff changeset
654 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
655 progs = realloc(progs, sizeof(progs) * prog_storage);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
656 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
657 progs[num_progs].vertex = NULL;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
658 progs[num_progs++].fragment = strdup(entries[i].name);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
659 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
660 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
661 free(no_ext);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
662 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
663
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
664 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
665 if (entries[i].is_dir) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
666 continue;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
667 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
668 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
669 uint32_t len = strlen(no_ext);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
670 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
671 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
672 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
673 progs[j].vertex = strdup(entries[i].name);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
674 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
675 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
676 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
677 free(no_ext);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
678 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
679 free_dir_list(entries, num_entries);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
680 *num_existing = num_progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
681 *storage = prog_storage;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
682 return progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
683 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
684
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
685 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
686 {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
687 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
688 size_t num_entries;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
689 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
690 free(shader_dir);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
691 shader_prog *progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
692 uint32_t num_progs = 0, prog_storage;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
693 if (num_entries) {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
694 progs = calloc(num_entries, sizeof(shader_prog));
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
695 prog_storage = num_entries;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
696 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
697 } else {
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
698 progs = NULL;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
699 prog_storage = 0;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
700 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
701 shader_dir = path_append(get_exe_dir(), "shaders");
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
702 entries = get_dir_list(shader_dir, &num_entries);
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
703 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
704 *num_out = num_progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
705 return progs;
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
706 }
bdeb2a1d0385 Add shader selector to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1491
diff changeset
707
1499
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
708 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
709 {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
710 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
711 int32_t selected = -1;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
712 for (uint32_t i = 0; i < num_options; i++)
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
713 {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
714 if (!strcmp(setting, options[i])) {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
715 selected = i;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
716 break;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
717 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
718 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
719 if (selected == -1) {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
720 for (uint32_t i = 0; i < num_options; i++)
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
721 {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
722 if (!strcmp(def, options[i])) {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
723 selected = i;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
724 break;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
725 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
726 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
727 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
728 return selected;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
729 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
730
1500
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
731 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
732 {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
733 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
734 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
735 if (next != current) {
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
736 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
737 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
738 return next;
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
739 }
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
740
1500
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
741 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
742 {
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
743 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
744 }
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
745
1553
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
746 void view_video_settings(struct nk_context *context)
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
747 {
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
748 const char *vsync_opts[] = {"on", "off", "tear"};
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
749 const char *vsync_opt_names[] = {
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
750 "On",
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
751 "Off",
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
752 "On, tear if late"
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
753 };
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
754 const uint32_t num_vsync_opts = sizeof(vsync_opts)/sizeof(*vsync_opts);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
755 static shader_prog *progs;
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
756 static char **prog_names;
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
757 static uint32_t num_progs;
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
758 static uint32_t selected_prog;
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
759 static int32_t selected_vsync = -1;
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
760 if (selected_vsync < 0) {
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
761 selected_vsync = find_match(vsync_opts, num_vsync_opts, "video\0vsync\0", "off");
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
762 }
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
763 if(!progs) {
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
764 progs = get_shader_list(&num_progs);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
765 prog_names = calloc(num_progs, sizeof(char*));
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
766 for (uint32_t i = 0; i < num_progs; i++)
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
767 {
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
768 prog_names[i] = basename_no_extension(progs[i].fragment);;
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
769 uint32_t len = strlen(prog_names[i]);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
770 if (len > 2) {
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
771 prog_names[i][len-2] = 0;
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
772 }
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
773 if (!progs[i].vertex) {
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
774 progs[i].vertex = strdup("default.v.glsl");
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
775 }
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
776 if (!strcmp(
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
777 progs[i].fragment,
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
778 tern_find_path_default(config, "video\0fragment_shader\0", (tern_val){.ptrval = "default.f.glsl"}, TVAL_PTR).ptrval
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
779 )) {
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
780 selected_prog = i;
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
781 }
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
782 }
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
783 }
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
784 uint32_t width = render_width();
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
785 uint32_t height = render_height();
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
786 if (nk_begin(context, "Video Settings", nk_rect(0, 0, width, height), 0)) {
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
787 nk_layout_row_static(context, 30, width > 300 ? 300 : width, 2);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
788 settings_toggle(context, "Fullscreen", "video\0fullscreen\0", 0);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
789 settings_toggle(context, "Open GL", "video\0gl\0", 1);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
790 settings_toggle(context, "Scanlines", "video\0scanlines\0", 0);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
791 selected_vsync = settings_dropdown_ex(context, "VSync", vsync_opts, vsync_opt_names, num_vsync_opts, selected_vsync, "video\0vsync\0");
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
792 settings_int_input(context, "Windowed Width", "video\0width\0", "640");
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
793 nk_label(context, "Shader", NK_TEXT_LEFT);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
794 uint32_t next_selected = nk_combo(context, (const char **)prog_names, num_progs, selected_prog, 30, nk_vec2(300, 300));
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
795 if (next_selected != selected_prog) {
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
796 selected_prog = next_selected;
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
797 config = tern_insert_path(config, "video\0fragment_shader\0", (tern_val){.ptrval = strdup(progs[next_selected].fragment)}, TVAL_PTR);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
798 config = tern_insert_path(config, "video\0vertex_shader\0", (tern_val){.ptrval = strdup(progs[next_selected].vertex)}, TVAL_PTR);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
799 }
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
800 settings_int_property(context, "NTSC Overscan", "Top", "video\0ntsc\0overscan\0top\0", 2, 0, 32);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
801 settings_int_property(context, "", "Bottom", "video\0ntsc\0overscan\0bottom\0", 17, 0, 32);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
802 settings_int_property(context, "", "Left", "video\0ntsc\0overscan\0left\0", 13, 0, 32);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
803 settings_int_property(context, "", "Right", "video\0ntsc\0overscan\0right\0", 14, 0, 32);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
804 settings_int_property(context, "PAL Overscan", "Top", "video\0pal\0overscan\0top\0", 2, 0, 32);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
805 settings_int_property(context, "", "Bottom", "video\0pal\0overscan\0bottom\0", 17, 0, 32);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
806 settings_int_property(context, "", "Left", "video\0pal\0overscan\0left\0", 13, 0, 32);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
807 settings_int_property(context, "", "Right", "video\0pal\0overscan\0right\0", 14, 0, 32);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
808
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
809 if (nk_button_label(context, "Back")) {
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
810 pop_view();
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
811 }
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
812 nk_end(context);
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
813 }
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
814 }
723c00950f41 Added vsync to video settings
Michael Pavone <pavone@retrodev.com>
parents: 1549
diff changeset
815
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
816 void view_audio_settings(struct nk_context *context)
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
817 {
1494
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
818 const char *rates[] = {
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
819 "192000",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
820 "96000",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
821 "48000",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
822 "44100",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
823 "22050"
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
824 };
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
825 const char *sizes[] = {
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
826 "1024",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
827 "512",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
828 "256",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
829 "128",
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
830 "64"
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
831 };
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
832 const uint32_t num_rates = sizeof(rates)/sizeof(*rates);
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
833 const uint32_t num_sizes = sizeof(sizes)/sizeof(*sizes);
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
834 static int32_t selected_rate = -1;
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
835 static int32_t selected_size = -1;
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
836 if (selected_rate < 0 || selected_size < 0) {
1499
756f8616d1bf Refactor basic settings dropdowns
Michael Pavone <pavone@retrodev.com>
parents: 1498
diff changeset
837 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
838 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
839 }
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
840 uint32_t width = render_width();
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
841 uint32_t height = render_height();
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
842 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
843 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
844 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
845 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
846 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
847 if (nk_button_label(context, "Back")) {
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
848 pop_view();
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
849 }
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
850 nk_end(context);
8be6ea919300 Fleshed out audio settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1493
diff changeset
851 }
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
852 }
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
853 void view_system_settings(struct nk_context *context)
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
854 {
1568
d14490dee01f Add sync_source to default.cfg and the Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1554
diff changeset
855 const char *sync_opts[] = {
d14490dee01f Add sync_source to default.cfg and the Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1554
diff changeset
856 "video",
d14490dee01f Add sync_source to default.cfg and the Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1554
diff changeset
857 "audio"
d14490dee01f Add sync_source to default.cfg and the Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1554
diff changeset
858 };
d14490dee01f Add sync_source to default.cfg and the Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1554
diff changeset
859 const uint32_t num_sync_opts = sizeof(sync_opts)/sizeof(*sync_opts);
d14490dee01f Add sync_source to default.cfg and the Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1554
diff changeset
860 static int32_t selected_sync = -1;
d14490dee01f Add sync_source to default.cfg and the Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1554
diff changeset
861 if (selected_sync < 0) {
d14490dee01f Add sync_source to default.cfg and the Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1554
diff changeset
862 selected_sync = find_match(sync_opts, num_sync_opts, "system\0sync_source\0", "video");
d14490dee01f Add sync_source to default.cfg and the Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1554
diff changeset
863 }
1500
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
864 const char *regions[] = {
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
865 "J - Japan",
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
866 "U - Americas",
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
867 "E - Europe"
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
868 };
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
869 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
870 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
871 static int32_t selected_region = -1;
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
872 if (selected_region < 0) {
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
873 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
874 }
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
875 const char *formats[] = {
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
876 "native",
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
877 "gst"
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
878 };
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
879 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
880 int32_t selected_format = -1;
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
881 if (selected_format < 0) {
39a199dca772 Added dropdowns for default region and savestate format
Michael Pavone <pavone@retrodev.com>
parents: 1499
diff changeset
882 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
883 }
1501
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
884 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
885 "zero",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
886 "random"
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
887 };
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
888 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
889 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
890 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
891 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
892 }
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
893 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
894 "gamepad2.1",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
895 "gamepad3.1",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
896 "gamepad6.1",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
897 "mouse",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
898 "saturn keyboard",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
899 "xband keyboard"
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
900 };
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
901 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
902 "gamepad2.2",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
903 "gamepad3.2",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
904 "gamepad6.2",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
905 "mouse",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
906 "saturn keyboard",
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
907 "xband keyboard"
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
908 };
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
909 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
910 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
911 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
912 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
913 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
914 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
915 }
31a2997b745e Added RAM init and IO port config to system settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1500
diff changeset
916
1498
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
917 uint32_t width = render_width();
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
918 uint32_t height = render_height();
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
919 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
920 nk_layout_row_static(context, 30, width > 300 ? 300 : width, 2);
1568
d14490dee01f Add sync_source to default.cfg and the Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1554
diff changeset
921 selected_sync = settings_dropdown(context, "Sync Source", sync_opts, num_sync_opts, selected_sync, "system\0sync_source\0");
1498
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
922 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
923 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
924 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
925 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
926 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
927 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
928 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
929 if (nk_button_label(context, "Back")) {
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
930 pop_view();
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
931 }
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
932 nk_end(context);
050a5b032bc5 Initial work on system menu
Michael Pavone <pavone@retrodev.com>
parents: 1494
diff changeset
933 }
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
934 }
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
935
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
936 void view_back(struct nk_context *context)
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
937 {
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
938 pop_view();
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
939 pop_view();
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
940 current_view(context);
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
941 }
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
942
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
943 void view_settings(struct nk_context *context)
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
944 {
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
945 static menu_item items[] = {
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
946 {"Key Bindings", view_key_bindings},
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
947 {"Controllers", view_controllers},
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
948 {"Video", view_video_settings},
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
949 {"Audio", view_audio_settings},
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
950 {"System", view_system_settings},
1491
e890971f3757 Somewhat fleshed out video settings view
Michael Pavone <pavone@retrodev.com>
parents: 1490
diff changeset
951 {"Back", view_back}
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
952 };
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
953
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
954 const uint32_t num_buttons = 6;
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
955 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
956 menu(context, sizeof(items)/sizeof(*items), items);
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
957 nk_end(context);
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
958 }
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
959 }
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
960
1476
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
961 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
962 {
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
963 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
964 {"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
965 {"Load ROM", view_load},
1487
6a35815cc409 Enable lock-on in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1486
diff changeset
966 {"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
967 {"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
968 {"Load State", view_load_state},
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
969 {"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
970 {"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
971 };
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
972
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
973 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
974 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
975 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
976 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
977 }
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
978 }
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
979
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
980 void view_menu(struct nk_context *context)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
981 {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
982 static menu_item items[] = {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
983 {"Load ROM", view_load},
1490
919c0c33885e Initial work on settings menu
Michael Pavone <pavone@retrodev.com>
parents: 1487
diff changeset
984 {"Settings", view_settings},
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
985 {"About", view_about},
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
986 {"Exit", NULL}
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
987 };
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
988
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
989 const uint32_t num_buttons = 3;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
990 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
991 menu(context, sizeof(items)/sizeof(*items), items);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
992 nk_end(context);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
993 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
994 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
995
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
996 void blastem_nuklear_render(void)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
997 {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
998 nk_input_end(context);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
999 current_view(context);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1000 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
1001 nk_input_begin(context);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1002 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1003
1486
a6881d0d76d0 Pause game execution when in the new UI pause menu
Michael Pavone <pavone@retrodev.com>
parents: 1485
diff changeset
1004 void ui_idle_loop(void)
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1005 {
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
1006 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
1007 static uint32_t last;
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1008 while (current_view != view_play)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1009 {
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
1010 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
1011 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
1012 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
1013 }
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
1014 last = current;
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1015 render_update_display();
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1016 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1017 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1018 static void handle_event(SDL_Event *event)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1019 {
1522
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
1020 if (event->type == SDL_KEYDOWN) {
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
1021 keycode = event->key.keysym.sym;
63659fb92db4 Key binding menu is now functional
Michael Pavone <pavone@retrodev.com>
parents: 1521
diff changeset
1022 }
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1023 nk_sdl_handle_event(event);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1024 }
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1025
1476
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
1026 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
1027 {
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
1028 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
1029 }
1570
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1030
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1031 static uint32_t *controller_360_buf;
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1032
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1033 static void texture_init(void)
1476
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
1034 {
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
1035 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
1036 nk_sdl_font_stash_begin(&atlas);
1527
4f6e8acd7b6a Added support for TTC and dfont format true type fonts. More robust font selection on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1526
diff changeset
1037 uint32_t font_size;
4f6e8acd7b6a Added support for TTC and dfont format true type fonts. More robust font selection on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1526
diff changeset
1038 uint8_t *font = default_font(&font_size);
1476
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
1039 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
1040 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
1041 }
1527
4f6e8acd7b6a Added support for TTC and dfont format true type fonts. More robust font selection on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1526
diff changeset
1042 struct nk_font *def_font = nk_font_atlas_add_from_memory(atlas, font, font_size, 30, NULL);
1476
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
1043 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
1044 nk_style_set_font(context, &def_font->handle);
1570
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1045 if (controller_360_buf) {
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1046 GLuint tex;
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1047 glGenTextures(1, &tex);
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1048 glBindTexture(GL_TEXTURE_2D, tex);
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1049 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1050 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1051 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1052 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1053 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, controller_360_width, controller_360_height, 0, GL_BGRA, GL_UNSIGNED_BYTE, controller_360_buf);
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1054 controller_360_image = nk_image_id((int)tex);
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1055 }
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1056 }
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1057
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1058 static void context_created(void)
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1059 {
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1060 nk_sdl_device_create();
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1061 texture_init();
1476
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
1062 }
0646ae0987c3 Fix UI rendering in fullscreen and wome initial work on the "pause" menu
Michael Pavone <pavone@retrodev.com>
parents: 1475
diff changeset
1063
1477
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
1064 void show_pause_menu(void)
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
1065 {
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
1066 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
1067 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
1068 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
1069 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
1070 }
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
1071
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
1072 static uint8_t active;
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
1073 uint8_t is_nuklear_active(void)
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
1074 {
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
1075 return active;
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
1076 }
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
1077
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
1078 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
1079 {
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
1080 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
1081 //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
1082 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
1083 }
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
1084 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
1085 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
1086 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
1087 }
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
1088 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
1089 }
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
1090
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1091 void blastem_nuklear_init(uint8_t file_loaded)
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1092 {
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1093 context = nk_sdl_init(render_get_window());
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1094
1570
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1095 uint32_t buf_size;
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1096 uint8_t *buf = (uint8_t *)read_bundled_file("images/360.png", &buf_size);
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1097 if (buf) {
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1098 controller_360_buf = load_png(buf, buf_size, &controller_360_width, &controller_360_height);
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1099 free(buf);
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1100 }
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1101 texture_init();
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1102
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1103 current_view = file_loaded ? view_play : view_menu;
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1104 render_set_ui_render_fun(blastem_nuklear_render);
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1105 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
1106 render_set_gl_context_handlers(context_destroyed, context_created);
1569
0ec89dadb36d Add code for loading PNG images. Added 360 controller image. WIP work on gamepad mapping UI
Michael Pavone <pavone@retrodev.com>
parents: 1568
diff changeset
1107
1570
bc96bb3a0998 Use read_bundle_file for controller PNG. Re-upload texture when GL context is recreated
Michael Pavone <pavone@retrodev.com>
parents: 1569
diff changeset
1108
1569
0ec89dadb36d Add code for loading PNG images. Added 360 controller image. WIP work on gamepad mapping UI
Michael Pavone <pavone@retrodev.com>
parents: 1568
diff changeset
1109
1477
1cdd7f492af8 Pause menu now triggered on ui.exit event
Michael Pavone <pavone@retrodev.com>
parents: 1476
diff changeset
1110 active = 1;
1486
a6881d0d76d0 Pause game execution when in the new UI pause menu
Michael Pavone <pavone@retrodev.com>
parents: 1485
diff changeset
1111 ui_idle_loop();
1474
c5c022c7aa54 Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1112 }