comparison nuklear_ui/blastem_nuklear.c @ 1814:8db3c043be00

Fix crash when pressing escape with no ROM loaded. Fix immediate cancel in keybinding view when mouse happens to be where the cancel button appears
author Mike Pavone <pavone@retrodev.com>
date Sat, 30 Mar 2019 23:18:22 -0700
parents 8aeac7bd9fa7
children 7f4fac75b484
comparison
equal deleted inserted replaced
1813:a484d101ce2c 1814:8db3c043be00
293 push_view(items[i].next_view); 293 push_view(items[i].next_view);
294 if (current_view == view_save_state || current_view == view_load_state) { 294 if (current_view == view_save_state || current_view == view_load_state) {
295 free_slot_info(slots); 295 free_slot_info(slots);
296 slots = NULL; 296 slots = NULL;
297 } else if (current_view == view_play) { 297 } else if (current_view == view_play) {
298 clear_view_stack();
298 set_content_binding_state(1); 299 set_content_binding_state(1);
299 } 300 }
300 } else { 301 } else {
301 handler(i); 302 handler(i);
302 } 303 }
314 *binding_lookup = tern_insert_ptr(*binding_lookup, val.ptrval, strdup(key)); 315 *binding_lookup = tern_insert_ptr(*binding_lookup, val.ptrval, strdup(key));
315 } 316 }
316 317
317 static int32_t keycode; 318 static int32_t keycode;
318 static const char *set_binding; 319 static const char *set_binding;
320 static uint8_t bind_click_release, click;
319 char *set_label; 321 char *set_label;
320 void binding_group(struct nk_context *context, char *name, const char **binds, const char **bind_names, uint32_t num_binds, tern_node *binding_lookup) 322 void binding_group(struct nk_context *context, char *name, const char **binds, const char **bind_names, uint32_t num_binds, tern_node *binding_lookup)
321 { 323 {
322 nk_layout_row_static(context, (context->style.font->height + 4)*num_binds+context->style.font->height+30, render_width() - 80, 1); 324 nk_layout_row_static(context, (context->style.font->height + 4)*num_binds+context->style.font->height+30, render_width() - 80, 1);
323 if (nk_group_begin(context, name, NK_WINDOW_TITLE)) { 325 if (nk_group_begin(context, name, NK_WINDOW_TITLE)) {
332 } 334 }
333 nk_label(context, label, NK_TEXT_LEFT); 335 nk_label(context, label, NK_TEXT_LEFT);
334 if (nk_button_label(context, tern_find_ptr_default(binding_lookup, binds[i], "Not Set"))) { 336 if (nk_button_label(context, tern_find_ptr_default(binding_lookup, binds[i], "Not Set"))) {
335 set_binding = binds[i]; 337 set_binding = binds[i];
336 set_label = strdup(label); 338 set_label = strdup(label);
339 bind_click_release = 0;
337 keycode = 0; 340 keycode = 0;
338 } 341 }
339 if (label_alloc) { 342 if (label_alloc) {
340 free(label_alloc); 343 free(label_alloc);
341 } 344 }
483 } 486 }
484 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)) { 487 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)) {
485 nk_layout_row_static(context, 30, width/2-30, 1); 488 nk_layout_row_static(context, 30, width/2-30, 1);
486 nk_label(context, "Press new key for", NK_TEXT_CENTERED); 489 nk_label(context, "Press new key for", NK_TEXT_CENTERED);
487 nk_label(context, set_label, NK_TEXT_CENTERED); 490 nk_label(context, set_label, NK_TEXT_CENTERED);
488 if (nk_button_label(context, "Cancel")) { 491 if (nk_button_label(context, "Cancel") && bind_click_release) {
489 free(set_label); 492 free(set_label);
490 set_binding = set_label = NULL; 493 set_binding = set_label = NULL;
491 } else if (keycode) { 494 } else if (keycode) {
492 char *name = get_key_name(keycode); 495 char *name = get_key_name(keycode);
493 if (name) { 496 if (name) {
517 tern_free(binding_lookup); 520 tern_free(binding_lookup);
518 binding_lookup = NULL; 521 binding_lookup = NULL;
519 } 522 }
520 free(set_label); 523 free(set_label);
521 set_binding = set_label = NULL; 524 set_binding = set_label = NULL;
525 } else if (!click) {
526 bind_click_release = 1;
522 } 527 }
523 nk_end(context); 528 nk_end(context);
524 } 529 }
525 } 530 }
526 531
1919 else if (event->type == SDL_JOYAXISMOTION) { 1924 else if (event->type == SDL_JOYAXISMOTION) {
1920 if (event->jaxis.axis == axis_moved || abs(event->jaxis.value) > abs(axis_value) || abs(event->jaxis.value) > 1000) { 1925 if (event->jaxis.axis == axis_moved || abs(event->jaxis.value) > abs(axis_value) || abs(event->jaxis.value) > 1000) {
1921 axis_moved = event->jaxis.axis; 1926 axis_moved = event->jaxis.axis;
1922 axis_value = event->jaxis.value; 1927 axis_value = event->jaxis.value;
1923 } 1928 }
1929 } else if (event->type == SDL_MOUSEBUTTONDOWN && event->button.button == 0) {
1930 click = 1;
1931 } else if (event->type == SDL_MOUSEBUTTONUP && event->button.button == 0) {
1932 click = 0;
1924 } 1933 }
1925 nk_sdl_handle_event(event); 1934 nk_sdl_handle_event(event);
1926 } 1935 }
1927 1936
1928 static void context_destroyed(void) 1937 static void context_destroyed(void)
1989 texture_init(); 1998 texture_init();
1990 } 1999 }
1991 2000
1992 void show_pause_menu(void) 2001 void show_pause_menu(void)
1993 { 2002 {
1994 set_content_binding_state(0); 2003 if (current_view == view_play) {
1995 context->style.window.background = nk_rgba(0, 0, 0, 128); 2004 set_content_binding_state(0);
1996 context->style.window.fixed_background = nk_style_item_color(nk_rgba(0, 0, 0, 128)); 2005 context->style.window.background = nk_rgba(0, 0, 0, 128);
1997 current_view = view_pause; 2006 context->style.window.fixed_background = nk_style_item_color(nk_rgba(0, 0, 0, 128));
1998 current_system->request_exit(current_system); 2007 current_view = view_pause;
2008 current_system->request_exit(current_system);
2009 } else if (current_system && !set_binding) {
2010 clear_view_stack();
2011 show_play_view();
2012 }
1999 } 2013 }
2000 2014
2001 void show_play_view(void) 2015 void show_play_view(void)
2002 { 2016 {
2003 set_content_binding_state(1); 2017 set_content_binding_state(1);