comparison nuklear_ui/blastem_nuklear.c @ 1577:69d624271cf8

Persist config on exit if config has changed
author Michael Pavone <pavone@retrodev.com>
date Tue, 01 May 2018 19:11:37 -0700
parents ccb3a8ae7ad0
children aaa28c9bf67d
comparison
equal deleted inserted replaced
1576:2b132d894d76 1577:69d624271cf8
797 } 797 }
798 } 798 }
799 } 799 }
800 uint32_t width = render_width(); 800 uint32_t width = render_width();
801 uint32_t height = render_height(); 801 uint32_t height = render_height();
802 uint32_t desired_width = context->style.font->height * 10;
803 if (desired_width > width) {
804 desired_width = width;
805 }
802 if (nk_begin(context, "Video Settings", nk_rect(0, 0, width, height), 0)) { 806 if (nk_begin(context, "Video Settings", nk_rect(0, 0, width, height), 0)) {
803 nk_layout_row_static(context, 30, width > 300 ? 300 : width, 2); 807 nk_layout_row_static(context, context->style.font->height, desired_width, 2);
804 settings_toggle(context, "Fullscreen", "video\0fullscreen\0", 0); 808 settings_toggle(context, "Fullscreen", "video\0fullscreen\0", 0);
805 settings_toggle(context, "Open GL", "video\0gl\0", 1); 809 settings_toggle(context, "Open GL", "video\0gl\0", 1);
806 settings_toggle(context, "Scanlines", "video\0scanlines\0", 0); 810 settings_toggle(context, "Scanlines", "video\0scanlines\0", 0);
807 selected_vsync = settings_dropdown_ex(context, "VSync", vsync_opts, vsync_opt_names, num_vsync_opts, selected_vsync, "video\0vsync\0"); 811 selected_vsync = settings_dropdown_ex(context, "VSync", vsync_opts, vsync_opt_names, num_vsync_opts, selected_vsync, "video\0vsync\0");
808 settings_int_input(context, "Windowed Width", "video\0width\0", "640"); 812 settings_int_input(context, "Windowed Width", "video\0width\0", "640");
809 nk_label(context, "Shader", NK_TEXT_LEFT); 813 nk_label(context, "Shader", NK_TEXT_LEFT);
810 uint32_t next_selected = nk_combo(context, (const char **)prog_names, num_progs, selected_prog, 30, nk_vec2(300, 300)); 814 uint32_t next_selected = nk_combo(context, (const char **)prog_names, num_progs, selected_prog, context->style.font->height, nk_vec2(desired_width, desired_width));
811 if (next_selected != selected_prog) { 815 if (next_selected != selected_prog) {
812 selected_prog = next_selected; 816 selected_prog = next_selected;
813 config_dirty = 1; 817 config_dirty = 1;
814 config = tern_insert_path(config, "video\0fragment_shader\0", (tern_val){.ptrval = strdup(progs[next_selected].fragment)}, TVAL_PTR); 818 config = tern_insert_path(config, "video\0fragment_shader\0", (tern_val){.ptrval = strdup(progs[next_selected].fragment)}, TVAL_PTR);
815 config = tern_insert_path(config, "video\0vertex_shader\0", (tern_val){.ptrval = strdup(progs[next_selected].vertex)}, TVAL_PTR); 819 config = tern_insert_path(config, "video\0vertex_shader\0", (tern_val){.ptrval = strdup(progs[next_selected].vertex)}, TVAL_PTR);
1108 return 1; 1112 return 1;
1109 } 1113 }
1110 return strcmp(style, "rom") != 0; 1114 return strcmp(style, "rom") != 0;
1111 } 1115 }
1112 1116
1117 static void persist_config_exit(void)
1118 {
1119 if (config_dirty) {
1120 persist_config(config);
1121 }
1122 }
1123
1113 void blastem_nuklear_init(uint8_t file_loaded) 1124 void blastem_nuklear_init(uint8_t file_loaded)
1114 { 1125 {
1115 context = nk_sdl_init(render_get_window()); 1126 context = nk_sdl_init(render_get_window());
1116 1127
1117 uint32_t buf_size; 1128 uint32_t buf_size;
1125 current_view = file_loaded ? view_play : view_menu; 1136 current_view = file_loaded ? view_play : view_menu;
1126 render_set_ui_render_fun(blastem_nuklear_render); 1137 render_set_ui_render_fun(blastem_nuklear_render);
1127 render_set_event_handler(handle_event); 1138 render_set_event_handler(handle_event);
1128 render_set_gl_context_handlers(context_destroyed, context_created); 1139 render_set_gl_context_handlers(context_destroyed, context_created);
1129 1140
1130 1141 atexit(persist_config_exit);
1131 1142
1132 active = 1; 1143 active = 1;
1133 ui_idle_loop(); 1144 ui_idle_loop();
1134 } 1145 }