From 771526c88f5cc4b56a41cb12aa06a28d377a07d5 Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Fri, 27 Apr 2012 15:13:25 -0700 Subject: Resample touch events on frame boundaries. Bug: 6375101 Change-Id: I8774e366306bb2b6b4e42b913525bf25b0380ec3 --- libs/androidfw/Input.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'libs/androidfw/Input.cpp') 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(); -- cgit v1.2.3-59-g8ed1b