From 3f76122bbe2ec31b75c78558ca8dca84d042ca12 Mon Sep 17 00:00:00 2001 From: Nicolas Adenis-Lamarre Date: Wed, 28 Jun 2023 05:18:19 +0000 Subject: [PATCH] fix axis when not aligned on 0 Signed-off-by: Nicolas Adenis-Lamarre --- src/api/udev/JoystickUdev.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/api/udev/JoystickUdev.cpp b/src/api/udev/JoystickUdev.cpp index 3c0c6113..ce088156 100644 --- a/src/api/udev/JoystickUdev.cpp +++ b/src/api/udev/JoystickUdev.cpp @@ -217,10 +217,17 @@ bool CJoystickUdev::ScanEvents(void) const unsigned int axisIndex = it->second.axisIndex; const input_absinfo& info = it->second.axisInfo; - if (event.value >= 0) - SetAxisValue(axisIndex, event.value, info.maximum); - else - SetAxisValue(axisIndex, event.value, -info.minimum); + int middle = (info.minimum+info.maximum)/2; + int length = (info.maximum-info.minimum)/2; + + if (event.value >= middle && event.value-middle > length/2) { + SetAxisValue(axisIndex, event.value-middle, length); + } + else if (event.value <= middle && middle-event.value > length/2) { + SetAxisValue(axisIndex, -(middle-event.value), length); + } else { + SetAxisValue(axisIndex, 0, length); + } } } break;