# HG changeset patch # User Michael Pavone # Date 1680503790 25200 # Node ID 1c7329ac7f3fe6d03462081db91c5667e8dac2a4 # Parent e836cf11783b480e87bfc0983563f2ce13e0c7d0 Make UI respect stick deadzone diff -r e836cf11783b -r 1c7329ac7f3f nuklear_ui/nuklear_sdl_gles2.h --- a/nuklear_ui/nuklear_sdl_gles2.h Sun Apr 02 23:21:39 2023 -0700 +++ b/nuklear_ui/nuklear_sdl_gles2.h Sun Apr 02 23:36:30 2023 -0700 @@ -23,7 +23,9 @@ #include #endif #endif +#include "../render_sdl.h" #include "../render.h" +#include "../controller_info.h" NK_API struct nk_context* nk_sdl_init(SDL_Window *win); @@ -432,7 +434,9 @@ } } else if (evt->type == SDL_CONTROLLERAXISMOTION) { if (evt->caxis.axis == SDL_CONTROLLER_AXIS_LEFTY || evt->caxis.axis == SDL_CONTROLLER_AXIS_RIGHTY) { - int down = abs(evt->caxis.value) > 2000; + int joystick = render_find_joystick_index(evt->caxis.which); + controller_info info = get_controller_info(joystick); + int down = abs(evt->caxis.value) > info.stick_deadzone; if (evt->caxis.value >= 0) { if (ctx->input.keyboard.keys[NK_KEY_UP].down) { nk_input_key(ctx, NK_KEY_UP, 0); diff -r e836cf11783b -r 1c7329ac7f3f render_sdl.c --- a/render_sdl.c Sun Apr 02 23:21:39 2023 -0700 +++ b/render_sdl.c Sun Apr 02 23:36:30 2023 -0700 @@ -705,7 +705,7 @@ custom_event_handler = handler; } -static int find_joystick_index(SDL_JoystickID instanceID) +int render_find_joystick_index(SDL_JoystickID instanceID) { for (int i = 0; i < MAX_JOYSTICKS; i++) { if (joysticks[i] && SDL_JoystickInstanceID(joysticks[i]) == instanceID) { @@ -838,16 +838,16 @@ handle_keyup(event->key.keysym.sym, scancode_map[event->key.keysym.scancode]); break; case SDL_JOYBUTTONDOWN: - handle_joydown(find_joystick_index(event->jbutton.which), event->jbutton.button); + handle_joydown(render_find_joystick_index(event->jbutton.which), event->jbutton.button); break; case SDL_JOYBUTTONUP: - handle_joyup(lock_joystick_index(find_joystick_index(event->jbutton.which), -1), event->jbutton.button); + handle_joyup(lock_joystick_index(render_find_joystick_index(event->jbutton.which), -1), event->jbutton.button); break; case SDL_JOYHATMOTION: - handle_joy_dpad(lock_joystick_index(find_joystick_index(event->jhat.which), -1), event->jhat.hat, event->jhat.value); + handle_joy_dpad(lock_joystick_index(render_find_joystick_index(event->jhat.which), -1), event->jhat.hat, event->jhat.value); break; case SDL_JOYAXISMOTION: - handle_joy_axis(lock_joystick_index(find_joystick_index(event->jaxis.which), -1), event->jaxis.axis, event->jaxis.value); + handle_joy_axis(lock_joystick_index(render_find_joystick_index(event->jaxis.which), -1), event->jaxis.axis, event->jaxis.value); break; case SDL_JOYDEVICEADDED: if (event->jdevice.which < MAX_JOYSTICKS) { @@ -868,7 +868,7 @@ } break; case SDL_JOYDEVICEREMOVED: { - int index = find_joystick_index(event->jdevice.which); + int index = render_find_joystick_index(event->jdevice.which); if (index >= 0) { SDL_JoystickClose(joysticks[index]); joysticks[index] = NULL; diff -r e836cf11783b -r 1c7329ac7f3f render_sdl.h --- a/render_sdl.h Sun Apr 02 23:21:39 2023 -0700 +++ b/render_sdl.h Sun Apr 02 23:36:30 2023 -0700 @@ -8,6 +8,7 @@ void render_set_event_handler(event_handler handler); SDL_Joystick *render_get_joystick(int index); SDL_GameController *render_get_controller(int index); +int render_find_joystick_index(SDL_JoystickID instanceID); int render_lookup_button(char *name); int render_lookup_axis(char *name); void render_enable_gamepad_events(uint8_t enabled);