Mercurial > repos > blastem
diff nuklear_ui/blastem_nuklear.c @ 1596:437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 22 Jul 2018 17:48:46 -0700 |
parents | 24508cb54f87 |
children | 5e2af89c3467 |
line wrap: on
line diff
--- a/nuklear_ui/blastem_nuklear.c Fri Jul 06 17:39:59 2018 -0700 +++ b/nuklear_ui/blastem_nuklear.c Sun Jul 22 17:48:46 2018 -0700 @@ -14,6 +14,7 @@ #include "../config.h" #include "../io.h" #include "../png.h" +#include "../controller_info.h" static struct nk_context *context; @@ -500,11 +501,14 @@ nk_end(context); } } + +static int selected_controller; +static controller_info selected_controller_info; static struct nk_image controller_360_image; static uint32_t controller_360_width, controller_360_height; //#define MIN_BIND_BOX_WIDTH 140 #define MAX_BIND_BOX_WIDTH 350 -void view_controllers(struct nk_context *context) +void view_controller_bindings(struct nk_context *context) { if (nk_begin(context, "Controller Bindings", nk_rect(0, 0, render_width(), render_height()), NK_WINDOW_NO_SCROLLBAR)) { float orig_height = def_font->handle.height; @@ -554,13 +558,13 @@ nk_group_begin(context, "Action Buttons", NK_WINDOW_BORDER | NK_WINDOW_NO_SCROLLBAR); float widths[] = {34, bind_box_width - 60}; nk_layout_row(context, NK_STATIC, 34, 2, widths); - nk_label(context, "A", NK_TEXT_LEFT); + nk_label(context, get_button_label(&selected_controller_info, SDL_CONTROLLER_BUTTON_A), NK_TEXT_LEFT); nk_button_label(context, "A"); - nk_label(context, "B", NK_TEXT_LEFT); + nk_label(context, get_button_label(&selected_controller_info, SDL_CONTROLLER_BUTTON_B), NK_TEXT_LEFT); nk_button_label(context, "B"); - nk_label(context, "X", NK_TEXT_LEFT); + nk_label(context, get_button_label(&selected_controller_info, SDL_CONTROLLER_BUTTON_X), NK_TEXT_LEFT); nk_button_label(context, "X"); - nk_label(context, "Y", NK_TEXT_LEFT); + nk_label(context, get_button_label(&selected_controller_info, SDL_CONTROLLER_BUTTON_Y), NK_TEXT_LEFT); nk_button_label(context, "Internal Screenshot"); nk_group_end(context); @@ -578,7 +582,7 @@ nk_button_label(context, "Left"); nk_label(context, "Right", NK_TEXT_LEFT); nk_button_label(context, "Right"); - nk_label(context, "Click", NK_TEXT_LEFT); + nk_label(context, get_button_label(&selected_controller_info, SDL_CONTROLLER_BUTTON_LEFTSTICK), NK_TEXT_LEFT); nk_button_label(context, "None"); nk_group_end(context); @@ -594,6 +598,37 @@ } } +void view_controllers(struct nk_context *context) +{ + if (nk_begin(context, "Controllers", nk_rect(0, 0, render_width(), render_height()), NK_WINDOW_NO_SCROLLBAR)) { + int height = (render_width() - 2*context->style.font->height) / MAX_JOYSTICKS; + int image_width = height * controller_360_width / controller_360_height; + for (int i = 0; i < MAX_JOYSTICKS; i++) + { + SDL_Joystick *joy = render_get_joystick(i); + if (joy) { + controller_info info = get_controller_info(i); + nk_layout_row_begin(context, NK_STATIC, height, 2); + nk_layout_row_push(context, image_width); + nk_image(context, controller_360_image); + nk_layout_row_push(context, render_width() - image_width - 2 * context->style.font->height); + if (nk_button_label(context, info.name)) { + selected_controller = i; + selected_controller_info = info; + push_view(view_controller_bindings); + } + nk_layout_row_end(context); + } + } + nk_layout_row_static(context, context->style.font->height, (render_width() - 2 * context->style.font->height) / 2, 2); + nk_label(context, "", NK_TEXT_LEFT); + if (nk_button_label(context, "Back")) { + pop_view(); + } + nk_end(context); + } +} + void settings_toggle(struct nk_context *context, char *label, char *path, uint8_t def) { uint8_t curval = !strcmp("on", tern_find_path_default(config, path, (tern_val){.ptrval = def ? "on": "off"}, TVAL_PTR).ptrval);