summaryrefslogtreecommitdiff
path: root/libs/input/AccelerationCurve.cpp
diff options
context:
space:
mode:
author Michael Checo <michaelcheco@google.com> 2024-12-16 23:59:53 +0000
committer Michael Checo <michaelcheco@google.com> 2024-12-27 21:01:26 +0000
commit6d2e24fc4b3d1d581aea8e4fdfe88a591d530613 (patch)
tree0e36d17253b3cffad1de1b8cb9fac4b5e24f2d45 /libs/input/AccelerationCurve.cpp
parente7f052daf86901a0a43cbbcf201b8010f8459b92 (diff)
Add support to disable mouse acceleration
Bug: 382276176 Test: atest CursorInputMapperUnitTest Flag: com.android.hardware.input.pointer_acceleration Change-Id: I431ac6fa3b918b1d292528f614e06532837c4a82
Diffstat (limited to 'libs/input/AccelerationCurve.cpp')
-rw-r--r--libs/input/AccelerationCurve.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/libs/input/AccelerationCurve.cpp b/libs/input/AccelerationCurve.cpp
index 0a92a71596..0b47f3e6e7 100644
--- a/libs/input/AccelerationCurve.cpp
+++ b/libs/input/AccelerationCurve.cpp
@@ -40,6 +40,18 @@ static_assert(kSegments.back().maxPointerSpeedMmPerS == std::numeric_limits<doub
constexpr std::array<double, 15> kSensitivityFactors = {1, 2, 4, 6, 7, 8, 9, 10,
11, 12, 13, 14, 16, 18, 20};
+// Calculates the base gain for a given pointer sensitivity value.
+//
+// The base gain is a scaling factor that is applied to the pointer movement.
+// Higher sensitivity values result in larger base gains, which in turn result
+// in faster pointer movements.
+//
+// The base gain is calculated using a linear mapping function that maps the
+// sensitivity range [-7, 7] to a base gain range [0.5, 2.0].
+double calculateBaseGain(int32_t sensitivity) {
+ return 0.5 + (sensitivity + 7) * (2.0 - 0.5) / (7 + 7);
+}
+
} // namespace
std::vector<AccelerationCurveSegment> createAccelerationCurveForPointerSensitivity(
@@ -60,4 +72,13 @@ std::vector<AccelerationCurveSegment> createAccelerationCurveForPointerSensitivi
return output;
}
+std::vector<AccelerationCurveSegment> createFlatAccelerationCurve(int32_t sensitivity) {
+ LOG_ALWAYS_FATAL_IF(sensitivity < -7 || sensitivity > 7, "Invalid pointer sensitivity value");
+ std::vector<AccelerationCurveSegment> output = {
+ AccelerationCurveSegment{std::numeric_limits<double>::infinity(),
+ calculateBaseGain(sensitivity),
+ /* reciprocal = */ 0}};
+ return output;
+}
+
} // namespace android \ No newline at end of file