From cce980a4d461ef6aefb4c73e6d0bb240e92064c7 Mon Sep 17 00:00:00 2001 From: Thomas Jentzsch Date: Sun, 1 Sep 2019 09:50:04 +0200 Subject: [PATCH] prevent menu navigation with analog input --- src/common/PJoystickHandler.cxx | 36 ++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/common/PJoystickHandler.cxx b/src/common/PJoystickHandler.cxx index eea35dfa8..b06dd7dc0 100644 --- a/src/common/PJoystickHandler.cxx +++ b/src/common/PJoystickHandler.cxx @@ -610,12 +610,13 @@ void PhysicalJoystickHandler::handleAxisEvent(int stick, int axis, int value) if(j) { int button = j->buttonLast[stick]; + bool isAnalog = abs(j->axisLastValue[axis] - value) < 30000; if(myHandler.state() == EventHandlerState::EMULATION) { // Check for analog events, which are handled differently // A value change lower than ~90% indicates analog input - if(abs(j->axisLastValue[axis] - value) < 30000) + if(isAnalog) { Event::Type eventAxisAnalog = j->joyMap.get(EventMode::kEmulationMode, button, JoyAxis(axis), JoyDir::ANALOG); @@ -648,29 +649,32 @@ void PhysicalJoystickHandler::handleAxisEvent(int stick, int axis, int value) } } } - j->axisLastValue[axis] = value; } else if(myHandler.hasOverlay()) { - // First, clamp the values to simulate digital input - // (the only thing that the underlying code understands) - if(value > Joystick::deadzone()) - value = 32000; - else if(value < -Joystick::deadzone()) - value = -32000; - else - value = 0; - - // Now filter out consecutive, similar values - // (only pass on the event if the state has changed) - if(value != j->axisLastValue[axis]) + // prevent menu navigation by analog input + if(!isAnalog) { + // First, clamp the values to simulate digital input + // (the only thing that the underlying code understands) + if(value > Joystick::deadzone()) + value = 32000; + else if(value < -Joystick::deadzone()) + value = -32000; + else + value = 0; + + // Now filter out consecutive, similar values + // (only pass on the event if the state has changed) + if(value != j->axisLastValue[axis]) + { #ifdef GUI_SUPPORT - myHandler.overlay().handleJoyAxisEvent(stick, JoyAxis(axis), convertAxisValue(value), button); + myHandler.overlay().handleJoyAxisEvent(stick, JoyAxis(axis), convertAxisValue(value), button); #endif - j->axisLastValue[axis] = value; + } } } + j->axisLastValue[axis] = value; } }