summaryrefslogtreecommitdiffstats
path: root/libs/ui
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@google.com>2011-04-12 22:39:53 -0700
committerJeff Brown <jeffbrown@android.com>2011-05-25 14:37:17 -0700
commit86ea1f5f521981d075aef56f11693e4f3bc32fdb (patch)
tree72e1e44513d3e9e204a4fbd2855a079822e949eb /libs/ui
parenta6dbfdd3a858aac52cc87f80f91e8eef7d613605 (diff)
downloadframeworks_base-86ea1f5f521981d075aef56f11693e4f3bc32fdb.zip
frameworks_base-86ea1f5f521981d075aef56f11693e4f3bc32fdb.tar.gz
frameworks_base-86ea1f5f521981d075aef56f11693e4f3bc32fdb.tar.bz2
Initial checkin of spot presentation for touchpad gestures. (DO NOT MERGE)
Added a new PointerIcon API (hidden for now) for loading pointer icons. Fixed a starvation problem in the native Looper's sendMessage implementation which caused new messages to be posted ahead of old messages sent with sendMessageDelayed. Redesigned the touch pad gestures to be defined in terms of more fluid finger / spot movements. The objective is to reinforce the natural mapping between fingers and spots which means there must not be any discontinuities in spot motion relative to the fingers. Removed the SpotController stub and folded its responsibilities into PointerController. Change-Id: Ib647dbd7a57a7f30dd9c6e2c260df51d7bbdd18e
Diffstat (limited to 'libs/ui')
-rw-r--r--libs/ui/Input.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/libs/ui/Input.cpp b/libs/ui/Input.cpp
index 0a53d69..684c332 100644
--- a/libs/ui/Input.cpp
+++ b/libs/ui/Input.cpp
@@ -831,6 +831,7 @@ bool VelocityTracker::getVelocity(uint32_t id, float* outVx, float* outVy) const
const Position& oldestPosition =
oldestMovement.positions[oldestMovement.idBits.getIndexOfBit(id)];
nsecs_t lastDuration = 0;
+
while (numTouches-- > 1) {
if (++index == HISTORY_SIZE) {
index = 0;
@@ -857,6 +858,14 @@ bool VelocityTracker::getVelocity(uint32_t id, float* outVx, float* outVy) const
// Make sure we used at least one sample.
if (samplesUsed != 0) {
+ // Scale the velocity linearly if the window of samples is small.
+ nsecs_t totalDuration = newestMovement.eventTime - oldestMovement.eventTime;
+ if (totalDuration < MIN_WINDOW) {
+ float scale = float(totalDuration) / float(MIN_WINDOW);
+ accumVx *= scale;
+ accumVy *= scale;
+ }
+
*outVx = accumVx;
*outVy = accumVy;
return true;