input: Fix SDL buttons

This commit is contained in:
Megamouse 2026-03-17 19:15:26 +01:00
parent 43f3a4816d
commit 5416f432b5

View file

@ -65,16 +65,6 @@ sdl_pad_handler::sdl_pad_handler() : PadHandlerBase(pad_handler::sdl)
{ SDLKeyCodes::RSXPos, "RS X+" },
{ SDLKeyCodes::RSYPos, "RS Y+" },
{ SDLKeyCodes::RSYNeg, "RS Y-" },
{ SDLKeyCodes::PressureCross, "South" }, // Same name as non-pressure button
{ SDLKeyCodes::PressureCircle, "East" }, // Same name as non-pressure button
{ SDLKeyCodes::PressureSquare, "West" }, // Same name as non-pressure button
{ SDLKeyCodes::PressureTriangle, "North" }, // Same name as non-pressure button
{ SDLKeyCodes::PressureL1, "LB" }, // Same name as non-pressure button
{ SDLKeyCodes::PressureR1, "RB" }, // Same name as non-pressure button
{ SDLKeyCodes::PressureUp, "Up" }, // Same name as non-pressure button
{ SDLKeyCodes::PressureDown, "Down" }, // Same name as non-pressure button
{ SDLKeyCodes::PressureLeft, "Left" }, // Same name as non-pressure button
{ SDLKeyCodes::PressureRight, "Right" }, // Same name as non-pressure button
};
init_configs();
@ -940,6 +930,34 @@ std::unordered_map<u32, u16> sdl_pad_handler::get_button_values(const std::share
if (!dev || !dev->sdl.gamepad)
return values;
static const std::map<SDLKeyCodes, SDLKeyCodes> button_to_pressure =
{
{ SDLKeyCodes::South, SDLKeyCodes::PressureCross },
{ SDLKeyCodes::East, SDLKeyCodes::PressureCircle },
{ SDLKeyCodes::West, SDLKeyCodes::PressureSquare },
{ SDLKeyCodes::North, SDLKeyCodes::PressureTriangle },
{ SDLKeyCodes::LB, SDLKeyCodes::PressureL1 },
{ SDLKeyCodes::RB, SDLKeyCodes::PressureR1 },
{ SDLKeyCodes::Up, SDLKeyCodes::PressureUp },
{ SDLKeyCodes::Down, SDLKeyCodes::PressureDown },
{ SDLKeyCodes::Left, SDLKeyCodes::PressureLeft },
{ SDLKeyCodes::Right, SDLKeyCodes::PressureRight }
};
static const std::map<SDLKeyCodes, SDLKeyCodes> pressure_to_button =
{
{ SDLKeyCodes::PressureCross, SDLKeyCodes::South },
{ SDLKeyCodes::PressureCircle, SDLKeyCodes::East },
{ SDLKeyCodes::PressureSquare, SDLKeyCodes::West },
{ SDLKeyCodes::PressureTriangle, SDLKeyCodes::North },
{ SDLKeyCodes::PressureL1, SDLKeyCodes::LB },
{ SDLKeyCodes::PressureR1, SDLKeyCodes::RB },
{ SDLKeyCodes::PressureUp, SDLKeyCodes::Up },
{ SDLKeyCodes::PressureDown, SDLKeyCodes::Down },
{ SDLKeyCodes::PressureLeft, SDLKeyCodes::Left },
{ SDLKeyCodes::PressureRight, SDLKeyCodes::Right }
};
std::set<SDLKeyCodes> pressed_pressure_buttons;
for (SDL_GamepadButton button_id : dev->sdl.button_ids)
@ -964,20 +982,6 @@ std::unordered_map<u32, u16> sdl_pad_handler::get_button_values(const std::share
case SDLKeyCodes::LB:
case SDLKeyCodes::RB:
{
static const std::map<SDLKeyCodes, SDLKeyCodes> button_to_pressure =
{
{ SDLKeyCodes::South, SDLKeyCodes::PressureCross },
{ SDLKeyCodes::East, SDLKeyCodes::PressureCircle },
{ SDLKeyCodes::West, SDLKeyCodes::PressureSquare },
{ SDLKeyCodes::North, SDLKeyCodes::PressureTriangle },
{ SDLKeyCodes::LB, SDLKeyCodes::PressureL1 },
{ SDLKeyCodes::RB, SDLKeyCodes::PressureR1 },
{ SDLKeyCodes::Up, SDLKeyCodes::PressureUp },
{ SDLKeyCodes::Down, SDLKeyCodes::PressureDown },
{ SDLKeyCodes::Left, SDLKeyCodes::PressureLeft },
{ SDLKeyCodes::Right, SDLKeyCodes::PressureRight }
};
if (value)
{
pressed_pressure_buttons.insert(::at32(button_to_pressure, key_code));
@ -1025,7 +1029,7 @@ std::unordered_map<u32, u16> sdl_pad_handler::get_button_values(const std::share
if (dev->sdl.is_ds3_with_pressure_buttons)
{
// Get pressure button value from axis
if (const int key_code = SDLKeyCodes::PressureBegin + 1 + axis_id - SDL_GAMEPAD_AXIS_COUNT;
if (int key_code = SDLKeyCodes::PressureBegin + 1 + axis_id - SDL_GAMEPAD_AXIS_COUNT;
key_code > SDLKeyCodes::PressureBegin && key_code < SDLKeyCodes::PressureEnd)
{
// We need to get the joystick value directly for axis >= SDL_GAMEPAD_AXIS_COUNT
@ -1036,9 +1040,14 @@ std::unordered_map<u32, u16> sdl_pad_handler::get_button_values(const std::share
value = static_cast<s16>(ScaledInput(value, SDL_JOYSTICK_AXIS_MIN, SDL_JOYSTICK_AXIS_MAX, 0.0f, 255.0f));
if (value <= 0 && pressed_pressure_buttons.contains(static_cast<SDLKeyCodes>(key_code)))
if (pressed_pressure_buttons.contains(static_cast<SDLKeyCodes>(key_code)))
{
value = 1;
if (value <= 0)
{
value = 1;
}
key_code = ::at32(pressure_to_button, static_cast<SDLKeyCodes>(key_code));
}
values[key_code] = Clamp0To255(value);