diff options
author | Jeff Brown <jeffbrown@android.com> | 2011-06-03 15:30:33 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-06-03 15:30:33 -0700 |
commit | 36f49c133ec0d9d14ba3a06039f9db435e4731ea (patch) | |
tree | 23f458f7b2bf07089e03934403762efdce4f4e3b /include/ui | |
parent | 5550bce7e9028d581edf7894e08ff1a665dd1fcd (diff) | |
parent | 576768ca0d7acf79a86b2662ce4f4f31c3e72f7e (diff) | |
download | frameworks_native-36f49c133ec0d9d14ba3a06039f9db435e4731ea.zip frameworks_native-36f49c133ec0d9d14ba3a06039f9db435e4731ea.tar.gz frameworks_native-36f49c133ec0d9d14ba3a06039f9db435e4731ea.tar.bz2 |
am 56503b8d: am 8186a5f0: am 10c3f367: Merge "Implement pointer acceleration." into honeycomb-mr2
* commit '56503b8ddfe5c82407da32e18061e725f668432d':
Implement pointer acceleration.
Diffstat (limited to 'include/ui')
-rw-r--r-- | include/ui/Input.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/include/ui/Input.h b/include/ui/Input.h index ba1c6b4..3b5aba4 100644 --- a/include/ui/Input.h +++ b/include/ui/Input.h @@ -674,6 +674,87 @@ private: int32_t mActivePointerId; }; + +/* + * Specifies parameters that govern pointer or wheel acceleration. + */ +struct VelocityControlParameters { + // A scale factor that is multiplied with the raw velocity deltas + // prior to applying any other velocity control factors. The scale + // factor should be used to adapt the input device resolution + // (eg. counts per inch) to the output device resolution (eg. pixels per inch). + // + // Must be a positive value. + // Default is 1.0 (no scaling). + float scale; + + // The scaled speed at which acceleration begins to be applied. + // This value establishes the upper bound of a low speed regime for + // small precise motions that are performed without any acceleration. + // + // Must be a non-negative value. + // Default is 0.0 (no low threshold). + float lowThreshold; + + // The scaled speed at which maximum acceleration is applied. + // The difference between highThreshold and lowThreshold controls + // the range of speeds over which the acceleration factor is interpolated. + // The wider the range, the smoother the acceleration. + // + // Must be a non-negative value greater than or equal to lowThreshold. + // Default is 0.0 (no high threshold). + float highThreshold; + + // The acceleration factor. + // When the speed is above the low speed threshold, the velocity will scaled + // by an interpolated value between 1.0 and this amount. + // + // Must be a positive greater than or equal to 1.0. + // Default is 1.0 (no acceleration). + float acceleration; + + VelocityControlParameters() : + scale(1.0f), lowThreshold(0.0f), highThreshold(0.0f), acceleration(1.0f) { + } + + VelocityControlParameters(float scale, float lowThreshold, + float highThreshold, float acceleration) : + scale(scale), lowThreshold(lowThreshold), + highThreshold(highThreshold), acceleration(acceleration) { + } +}; + +/* + * Implements mouse pointer and wheel speed control and acceleration. + */ +class VelocityControl { +public: + VelocityControl(); + + /* Sets the various parameters. */ + void setParameters(const VelocityControlParameters& parameters); + + /* Resets the current movement counters to zero. + * This has the effect of nullifying any acceleration. */ + void reset(); + + /* Translates a raw movement delta into an appropriately + * scaled / accelerated delta based on the current velocity. */ + void move(nsecs_t eventTime, float* deltaX, float* deltaY); + +private: + // If no movements are received within this amount of time, + // we assume the movement has stopped and reset the movement counters. + static const nsecs_t STOP_TIME = 500 * 1000000; // 500 ms + + VelocityControlParameters mParameters; + + nsecs_t mLastMovementTime; + VelocityTracker::Position mRawPosition; + VelocityTracker mVelocityTracker; +}; + + /* * Describes the characteristics and capabilities of an input device. */ |