diff options
author | 2024-12-16 23:59:53 +0000 | |
---|---|---|
committer | 2024-12-27 21:01:26 +0000 | |
commit | 6d2e24fc4b3d1d581aea8e4fdfe88a591d530613 (patch) | |
tree | 0e36d17253b3cffad1de1b8cb9fac4b5e24f2d45 /libs/input/AccelerationCurve.cpp | |
parent | e7f052daf86901a0a43cbbcf201b8010f8459b92 (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.cpp | 21 |
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 |