changeset 2311:07aeea6cb068

Fix analog stick UI for real. Allow clearing a controller binding
author Michael Pavone <pavone@retrodev.com>
date Wed, 29 Mar 2023 22:36:34 -0700
parents b0ec82a59472
children 3f2ecd156453
files nuklear_ui/blastem_nuklear.c
diffstat 1 files changed, 9 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/nuklear_ui/blastem_nuklear.c	Wed Mar 29 22:11:03 2023 -0700
+++ b/nuklear_ui/blastem_nuklear.c	Wed Mar 29 22:36:34 2023 -0700
@@ -733,10 +733,15 @@
 		bind_option_group(context, "Debugging", debugger, sizeof(debugger)/sizeof(*debugger));
 		bind_option_group(context, "Speed Control", speeds, sizeof(speeds)/sizeof(*speeds));
 
-		nk_layout_row_static(context, context->style.font->height, (render_width() - 80)/4, 1);
+		nk_layout_row_static(context, context->style.font->height, (render_width() - 80)/4, 2);
 		if (nk_button_label(context, "Back")) {
 			pop_view();
 		}
+		if (nk_button_label(context, "Clear")) {
+			*current_bind_dest = NULL;
+			controller_binding_changed = 1;
+			pop_view();
+		}
 		nk_end(context);
 	}
 }
@@ -757,7 +762,7 @@
 			labels[i] = get_axis_label(&selected_controller_info, binds[i] & ~AXIS);
 			conf_vals[i] = &bindings->triggers[(binds[i] & ~AXIS) - SDL_CONTROLLER_AXIS_TRIGGERLEFT];
 		} else if (binds[i] & STICKDIR) {
-			static char const * dirs[] = {"Up", "Down", "Right", "Left"};
+			static char const * dirs[] = {"Down", "Up", "Right", "Left"};
 			labels[i] = dirs[binds[i] & 3];
 			conf_vals[i] = &(binds[i] & LEFTSTICK ? bindings->left_stick : bindings->right_stick)[binds[i] & 3];
 		} else {
@@ -828,11 +833,11 @@
 	{
 	case SDL_CONTROLLER_AXIS_LEFTX:
 	case SDL_CONTROLLER_AXIS_LEFTY:
-		bindings->left_stick[(axis - SDL_CONTROLLER_AXIS_LEFTX) * 2 + is_negative] = val.ptrval;
+		bindings->left_stick[(SDL_CONTROLLER_AXIS_LEFTY - axis) * 2 + is_negative] = val.ptrval;
 		break;
 	case SDL_CONTROLLER_AXIS_RIGHTX:
 	case SDL_CONTROLLER_AXIS_RIGHTY:
-		bindings->right_stick[(axis - SDL_CONTROLLER_AXIS_RIGHTX) * 2 + is_negative] = val.ptrval;
+		bindings->right_stick[(SDL_CONTROLLER_AXIS_RIGHTX - axis) * 2 + is_negative] = val.ptrval;
 		break;
 	case SDL_CONTROLLER_AXIS_TRIGGERLEFT:
 	case SDL_CONTROLLER_AXIS_TRIGGERRIGHT: