Mercurial > repos > blastem
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); |