summaryrefslogtreecommitdiff
path: root/libs/androidfw/Input.cpp
diff options
context:
space:
mode:
author Jeff Brown <jeffbrown@google.com> 2012-04-27 15:13:25 -0700
committer Jeff Brown <jeffbrown@google.com> 2012-04-27 15:58:42 -0700
commit771526c88f5cc4b56a41cb12aa06a28d377a07d5 (patch)
tree71c36f271192ee66f069f0d1130a73e91b8302b9 /libs/androidfw/Input.cpp
parent330314c6fb7c178c0f0da65d6aa8c9e7d3004568 (diff)
Resample touch events on frame boundaries.
Bug: 6375101 Change-Id: I8774e366306bb2b6b4e42b913525bf25b0380ec3
Diffstat (limited to 'libs/androidfw/Input.cpp')
-rw-r--r--libs/androidfw/Input.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/libs/androidfw/Input.cpp b/libs/androidfw/Input.cpp
index 1617a3f36dc9..fbe19268e4fb 100644
--- a/libs/androidfw/Input.cpp
+++ b/libs/androidfw/Input.cpp
@@ -229,6 +229,26 @@ void PointerCoords::scale(float scaleFactor) {
scaleAxisValue(*this, AMOTION_EVENT_AXIS_TOOL_MINOR, scaleFactor);
}
+void PointerCoords::lerp(const PointerCoords& a, const PointerCoords& b, float alpha) {
+ bits = 0;
+ for (uint64_t bitsRemaining = a.bits | b.bits; bitsRemaining; ) {
+ int32_t axis = __builtin_ctz(bitsRemaining);
+ uint64_t axisBit = 1LL << axis;
+ bitsRemaining &= ~axisBit;
+ if (a.bits & axisBit) {
+ if (b.bits & axisBit) {
+ float aval = a.getAxisValue(axis);
+ float bval = b.getAxisValue(axis);
+ setAxisValue(axis, aval + alpha * (bval - aval));
+ } else {
+ setAxisValue(axis, a.getAxisValue(axis));
+ }
+ } else {
+ setAxisValue(axis, b.getAxisValue(axis));
+ }
+ }
+}
+
#ifdef HAVE_ANDROID_OS
status_t PointerCoords::readFromParcel(Parcel* parcel) {
bits = parcel->readInt64();