summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2017-12-08 23:24:21 -0800
committerMichael Pavone <pavone@retrodev.com>2017-12-08 23:24:21 -0800
commit8a5b965d6034a2a7fae6087e334fbf334ca7671a (patch)
tree59ff445f0e409aef53b6e260be4dddfa32efa686
parent2b3257dd11dd84b57d5a3a78e9e27a2d041da664 (diff)
Refactor basic settings dropdowns
--HG-- branch : nuklear_ui
-rw-r--r--nuklear_ui/blastem_nuklear.c74
1 files changed, 38 insertions, 36 deletions
diff --git a/nuklear_ui/blastem_nuklear.c b/nuklear_ui/blastem_nuklear.c
index beab37a..5d47d23 100644
--- a/nuklear_ui/blastem_nuklear.c
+++ b/nuklear_ui/blastem_nuklear.c
@@ -414,6 +414,40 @@ void view_video_settings(struct nk_context *context)
nk_end(context);
}
}
+
+int32_t find_match(const char **options, uint32_t num_options, char *path, char *def)
+{
+ char *setting = tern_find_path_default(config, path, (tern_val){.ptrval = def}, TVAL_PTR).ptrval;
+ int32_t selected = -1;
+ for (uint32_t i = 0; i < num_options; i++)
+ {
+ if (!strcmp(setting, options[i])) {
+ selected = i;
+ break;
+ }
+ }
+ if (selected == -1) {
+ for (uint32_t i = 0; i < num_options; i++)
+ {
+ if (!strcmp(def, options[i])) {
+ selected = i;
+ break;
+ }
+ }
+ }
+ return selected;
+}
+
+int32_t settings_dropdown(struct nk_context *context, char *label, const char **options, uint32_t num_options, int32_t current, char *path)
+{
+ nk_label(context, label, NK_TEXT_LEFT);
+ int32_t next = nk_combo(context, options, num_options, current, 30, nk_vec2(300, 300));
+ if (next != current) {
+ config = tern_insert_path(config, path, (tern_val){.ptrval = strdup(options[next])}, TVAL_PTR);
+ }
+ return next;
+}
+
void view_audio_settings(struct nk_context *context)
{
const char *rates[] = {
@@ -435,47 +469,15 @@ void view_audio_settings(struct nk_context *context)
static int32_t selected_rate = -1;
static int32_t selected_size = -1;
if (selected_rate < 0 || selected_size < 0) {
- char *rate = tern_find_path_default(config, "audio\0rate\0", (tern_val){.ptrval = "48000"}, TVAL_PTR).ptrval;
- for (uint32_t i = 0; i < num_rates; i++)
- {
- if (!strcmp(rate, rates[i])) {
- selected_rate = i;
- break;
- }
- }
- if (selected_rate < 0) {
- //better solution would be to add the custom rate to the rate list, but this is probably sufficient for now
- selected_rate = 2;
- }
- char *size = tern_find_path_default(config, "audio\0buffer\0", (tern_val){.ptrval = "512"}, TVAL_PTR).ptrval;
- for (uint32_t i = 0; i < num_sizes; i++)
- {
- if (!strcmp(size, sizes[i])) {
- selected_size = i;
- break;
- }
- }
- if (selected_size < 0) {
- //better solution would be to add the custom rate to the rate list, but this is probably sufficient for now
- selected_size = 2;
- }
+ selected_rate = find_match(rates, num_rates, "autio\0rate\0", "48000");
+ selected_size = find_match(sizes, num_sizes, "audio\0buffer\0", "512");
}
uint32_t width = render_width();
uint32_t height = render_height();
if (nk_begin(context, "Audio Settings", nk_rect(0, 0, width, height), 0)) {
nk_layout_row_static(context, 30, width > 300 ? 300 : width, 2);
- nk_label(context, "Rate in Hz", NK_TEXT_LEFT);
- int32_t next_selected = nk_combo(context, rates, num_rates, selected_rate, 30, nk_vec2(300, 300));
- if (next_selected != selected_rate) {
- config = tern_insert_path(config, "audio\0rate\0", (tern_val){.ptrval = strdup(rates[next_selected])}, TVAL_PTR);
- selected_rate = next_selected;
- }
- nk_label(context, "Buffer Samples", NK_TEXT_LEFT);
- next_selected = nk_combo(context, sizes, num_sizes, selected_size, 30, nk_vec2(300, 300));
- if (next_selected != selected_size) {
- config = tern_insert_path(config, "audio\0buffer\0", (tern_val){.ptrval = strdup(sizes[next_selected])}, TVAL_PTR);
- selected_size = next_selected;
- }
+ selected_rate = settings_dropdown(context, "Rate in Hz", rates, num_rates, selected_rate, "audio\0rate\0");
+ selected_size = settings_dropdown(context, "Buffer Samples", sizes, num_sizes, selected_size, "audio\0buffer\0");
settings_int_input(context, "Lowpass Cutoff Hz", "audio\0lowpass_cutoff\0", "3390");
if (nk_button_label(context, "Back")) {
pop_view();