* commit '797dc698e9ff85c1a09874cc3f7bfe825b2ff0e1': Simplify spot tracking logic. Bug: 4124987
This commit is contained in:
@ -36,12 +36,6 @@
|
|||||||
// Log debug messages about gesture detection.
|
// Log debug messages about gesture detection.
|
||||||
#define DEBUG_GESTURES 0
|
#define DEBUG_GESTURES 0
|
||||||
|
|
||||||
// Specifies whether spots follow fingers or touch points.
|
|
||||||
// If 1, show exactly one spot per finger in multitouch gestures.
|
|
||||||
// If 0, show exactly one spot per generated touch point in multitouch gestures, so the
|
|
||||||
// spots indicate exactly which points on screen are being touched.
|
|
||||||
#define SPOT_FOLLOWS_FINGER 0
|
|
||||||
|
|
||||||
#include "InputReader.h"
|
#include "InputReader.h"
|
||||||
|
|
||||||
#include <cutils/atomic.h>
|
#include <cutils/atomic.h>
|
||||||
@ -3286,9 +3280,9 @@ void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlag
|
|||||||
if (finishPreviousGesture || cancelPreviousGesture) {
|
if (finishPreviousGesture || cancelPreviousGesture) {
|
||||||
mPointerController->clearSpots();
|
mPointerController->clearSpots();
|
||||||
}
|
}
|
||||||
mPointerController->setSpots(mPointerGesture.spotGesture,
|
mPointerController->setSpots(mPointerGesture.currentGestureCoords,
|
||||||
mPointerGesture.spotCoords, mPointerGesture.spotIdToIndex,
|
mPointerGesture.currentGestureIdToIndex,
|
||||||
mPointerGesture.spotIdBits);
|
mPointerGesture.currentGestureIdBits);
|
||||||
} else {
|
} else {
|
||||||
mPointerController->setPresentation(PointerControllerInterface::PRESENTATION_POINTER);
|
mPointerController->setPresentation(PointerControllerInterface::PRESENTATION_POINTER);
|
||||||
}
|
}
|
||||||
@ -3476,11 +3470,6 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
|
|||||||
mPointerGesture.currentGestureIdBits.clear();
|
mPointerGesture.currentGestureIdBits.clear();
|
||||||
|
|
||||||
mPointerGesture.pointerVelocityControl.reset();
|
mPointerGesture.pointerVelocityControl.reset();
|
||||||
|
|
||||||
if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
|
|
||||||
mPointerGesture.spotGesture = PointerControllerInterface::SPOT_GESTURE_NEUTRAL;
|
|
||||||
mPointerGesture.spotIdBits.clear();
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3573,11 +3562,6 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
|
|||||||
mPointerGesture.currentGestureIdBits.clear();
|
mPointerGesture.currentGestureIdBits.clear();
|
||||||
|
|
||||||
mPointerGesture.pointerVelocityControl.reset();
|
mPointerGesture.pointerVelocityControl.reset();
|
||||||
|
|
||||||
if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
|
|
||||||
mPointerGesture.spotGesture = PointerControllerInterface::SPOT_GESTURE_NEUTRAL;
|
|
||||||
mPointerGesture.spotIdBits.clear();
|
|
||||||
}
|
|
||||||
} else if (isPointerDown(mCurrentTouch.buttonState)) {
|
} else if (isPointerDown(mCurrentTouch.buttonState)) {
|
||||||
// Case 2: Button is pressed. (BUTTON_CLICK_OR_DRAG)
|
// Case 2: Button is pressed. (BUTTON_CLICK_OR_DRAG)
|
||||||
// The pointer follows the active touch point.
|
// The pointer follows the active touch point.
|
||||||
@ -3659,28 +3643,6 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
|
|||||||
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_X, x);
|
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_X, x);
|
||||||
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y, y);
|
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y, y);
|
||||||
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
|
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
|
||||||
|
|
||||||
if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
|
|
||||||
if (activeTouchId >= 0) {
|
|
||||||
// Collapse all spots into one point at the pointer location.
|
|
||||||
mPointerGesture.spotGesture = PointerControllerInterface::SPOT_GESTURE_BUTTON_DRAG;
|
|
||||||
mPointerGesture.spotIdBits.clear();
|
|
||||||
for (uint32_t i = 0; i < mCurrentTouch.pointerCount; i++) {
|
|
||||||
uint32_t id = mCurrentTouch.pointers[i].id;
|
|
||||||
mPointerGesture.spotIdBits.markBit(id);
|
|
||||||
mPointerGesture.spotIdToIndex[id] = i;
|
|
||||||
mPointerGesture.spotCoords[i] = mPointerGesture.currentGestureCoords[0];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// No fingers. Generate a spot at the pointer location so the
|
|
||||||
// anchor appears to be pressed.
|
|
||||||
mPointerGesture.spotGesture = PointerControllerInterface::SPOT_GESTURE_BUTTON_CLICK;
|
|
||||||
mPointerGesture.spotIdBits.clear();
|
|
||||||
mPointerGesture.spotIdBits.markBit(0);
|
|
||||||
mPointerGesture.spotIdToIndex[0] = 0;
|
|
||||||
mPointerGesture.spotCoords[0] = mPointerGesture.currentGestureCoords[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (mCurrentTouch.pointerCount == 0) {
|
} else if (mCurrentTouch.pointerCount == 0) {
|
||||||
// Case 3. No fingers down and button is not pressed. (NEUTRAL)
|
// Case 3. No fingers down and button is not pressed. (NEUTRAL)
|
||||||
if (mPointerGesture.lastGestureMode != PointerGesture::NEUTRAL) {
|
if (mPointerGesture.lastGestureMode != PointerGesture::NEUTRAL) {
|
||||||
@ -3721,14 +3683,6 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
|
|||||||
mPointerGesture.currentGestureCoords[0].setAxisValue(
|
mPointerGesture.currentGestureCoords[0].setAxisValue(
|
||||||
AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
|
AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
|
||||||
|
|
||||||
if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
|
|
||||||
mPointerGesture.spotGesture = PointerControllerInterface::SPOT_GESTURE_TAP;
|
|
||||||
mPointerGesture.spotIdBits.clear();
|
|
||||||
mPointerGesture.spotIdBits.markBit(lastActiveTouchId);
|
|
||||||
mPointerGesture.spotIdToIndex[lastActiveTouchId] = 0;
|
|
||||||
mPointerGesture.spotCoords[0] = mPointerGesture.currentGestureCoords[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
tapped = true;
|
tapped = true;
|
||||||
} else {
|
} else {
|
||||||
#if DEBUG_GESTURES
|
#if DEBUG_GESTURES
|
||||||
@ -3754,11 +3708,6 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
|
|||||||
mPointerGesture.activeGestureId = -1;
|
mPointerGesture.activeGestureId = -1;
|
||||||
mPointerGesture.currentGestureMode = PointerGesture::NEUTRAL;
|
mPointerGesture.currentGestureMode = PointerGesture::NEUTRAL;
|
||||||
mPointerGesture.currentGestureIdBits.clear();
|
mPointerGesture.currentGestureIdBits.clear();
|
||||||
|
|
||||||
if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
|
|
||||||
mPointerGesture.spotGesture = PointerControllerInterface::SPOT_GESTURE_NEUTRAL;
|
|
||||||
mPointerGesture.spotIdBits.clear();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else if (mCurrentTouch.pointerCount == 1) {
|
} else if (mCurrentTouch.pointerCount == 1) {
|
||||||
// Case 4. Exactly one finger down, button is not pressed. (HOVER or TAP_DRAG)
|
// Case 4. Exactly one finger down, button is not pressed. (HOVER or TAP_DRAG)
|
||||||
@ -3846,15 +3795,6 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
|
|||||||
mPointerGesture.tapX = x;
|
mPointerGesture.tapX = x;
|
||||||
mPointerGesture.tapY = y;
|
mPointerGesture.tapY = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
|
|
||||||
mPointerGesture.spotGesture = down ? PointerControllerInterface::SPOT_GESTURE_DRAG
|
|
||||||
: PointerControllerInterface::SPOT_GESTURE_HOVER;
|
|
||||||
mPointerGesture.spotIdBits.clear();
|
|
||||||
mPointerGesture.spotIdBits.markBit(activeTouchId);
|
|
||||||
mPointerGesture.spotIdToIndex[activeTouchId] = 0;
|
|
||||||
mPointerGesture.spotCoords[0] = mPointerGesture.currentGestureCoords[0];
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// Case 5. At least two fingers down, button is not pressed. (PRESS, SWIPE or FREEFORM)
|
// Case 5. At least two fingers down, button is not pressed. (PRESS, SWIPE or FREEFORM)
|
||||||
// We need to provide feedback for each finger that goes down so we cannot wait
|
// We need to provide feedback for each finger that goes down so we cannot wait
|
||||||
@ -3898,25 +3838,6 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
|
|||||||
mPointerGesture.referenceIdBits.clear();
|
mPointerGesture.referenceIdBits.clear();
|
||||||
mPointerGesture.pointerVelocityControl.reset();
|
mPointerGesture.pointerVelocityControl.reset();
|
||||||
|
|
||||||
if (settled && mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS
|
|
||||||
&& mLastTouch.idBits.hasBit(mPointerGesture.activeTouchId)) {
|
|
||||||
// The spot is already visible and has settled, use it as the reference point
|
|
||||||
// for the gesture. Other spots will be positioned relative to this one.
|
|
||||||
#if DEBUG_GESTURES
|
|
||||||
LOGD("Gestures: Using active spot as reference for MULTITOUCH, "
|
|
||||||
"settle time expired %0.3fms ago", (when - mPointerGesture.firstTouchTime
|
|
||||||
- mConfig->pointerGestureMultitouchSettleInterval)
|
|
||||||
* 0.000001f);
|
|
||||||
#endif
|
|
||||||
const PointerData& d = mLastTouch.pointers[mLastTouch.idToIndex[
|
|
||||||
mPointerGesture.activeTouchId]];
|
|
||||||
mPointerGesture.referenceTouchX = d.x;
|
|
||||||
mPointerGesture.referenceTouchY = d.y;
|
|
||||||
const PointerCoords& c = mPointerGesture.spotCoords[mPointerGesture.spotIdToIndex[
|
|
||||||
mPointerGesture.activeTouchId]];
|
|
||||||
mPointerGesture.referenceGestureX = c.getAxisValue(AMOTION_EVENT_AXIS_X);
|
|
||||||
mPointerGesture.referenceGestureY = c.getAxisValue(AMOTION_EVENT_AXIS_Y);
|
|
||||||
} else {
|
|
||||||
// Use the centroid and pointer location as the reference points for the gesture.
|
// Use the centroid and pointer location as the reference points for the gesture.
|
||||||
#if DEBUG_GESTURES
|
#if DEBUG_GESTURES
|
||||||
LOGD("Gestures: Using centroid as reference for MULTITOUCH, "
|
LOGD("Gestures: Using centroid as reference for MULTITOUCH, "
|
||||||
@ -3929,7 +3850,6 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
|
|||||||
mPointerController->getPosition(&mPointerGesture.referenceGestureX,
|
mPointerController->getPosition(&mPointerGesture.referenceGestureX,
|
||||||
&mPointerGesture.referenceGestureY);
|
&mPointerGesture.referenceGestureY);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Clear the reference deltas for fingers not yet included in the reference calculation.
|
// Clear the reference deltas for fingers not yet included in the reference calculation.
|
||||||
for (BitSet32 idBits(mCurrentTouch.idBits.value & ~mPointerGesture.referenceIdBits.value);
|
for (BitSet32 idBits(mCurrentTouch.idBits.value & ~mPointerGesture.referenceIdBits.value);
|
||||||
@ -4105,10 +4025,6 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
|
|||||||
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y,
|
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y,
|
||||||
mPointerGesture.referenceGestureY);
|
mPointerGesture.referenceGestureY);
|
||||||
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
|
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
|
||||||
|
|
||||||
if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
|
|
||||||
mPointerGesture.spotGesture = PointerControllerInterface::SPOT_GESTURE_PRESS;
|
|
||||||
}
|
|
||||||
} else if (mPointerGesture.currentGestureMode == PointerGesture::SWIPE) {
|
} else if (mPointerGesture.currentGestureMode == PointerGesture::SWIPE) {
|
||||||
// SWIPE mode.
|
// SWIPE mode.
|
||||||
#if DEBUG_GESTURES
|
#if DEBUG_GESTURES
|
||||||
@ -4127,10 +4043,6 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
|
|||||||
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y,
|
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y,
|
||||||
mPointerGesture.referenceGestureY);
|
mPointerGesture.referenceGestureY);
|
||||||
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
|
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
|
||||||
|
|
||||||
if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
|
|
||||||
mPointerGesture.spotGesture = PointerControllerInterface::SPOT_GESTURE_SWIPE;
|
|
||||||
}
|
|
||||||
} else if (mPointerGesture.currentGestureMode == PointerGesture::FREEFORM) {
|
} else if (mPointerGesture.currentGestureMode == PointerGesture::FREEFORM) {
|
||||||
// FREEFORM mode.
|
// FREEFORM mode.
|
||||||
#if DEBUG_GESTURES
|
#if DEBUG_GESTURES
|
||||||
@ -4228,46 +4140,6 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
|
|||||||
"activeGestureId=%d", mPointerGesture.activeGestureId);
|
"activeGestureId=%d", mPointerGesture.activeGestureId);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
|
|
||||||
mPointerGesture.spotGesture = PointerControllerInterface::SPOT_GESTURE_FREEFORM;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update spot locations for PRESS, SWIPE and FREEFORM.
|
|
||||||
if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
|
|
||||||
#if SPOT_FOLLOWS_FINGER
|
|
||||||
// Use the same calculation as we do to calculate the gesture pointers
|
|
||||||
// for FREEFORM so that the spots smoothly track fingers across gestures.
|
|
||||||
mPointerGesture.spotIdBits.clear();
|
|
||||||
for (uint32_t i = 0; i < mCurrentTouch.pointerCount; i++) {
|
|
||||||
uint32_t id = mCurrentTouch.pointers[i].id;
|
|
||||||
mPointerGesture.spotIdBits.markBit(id);
|
|
||||||
mPointerGesture.spotIdToIndex[id] = i;
|
|
||||||
|
|
||||||
float x = (mCurrentTouch.pointers[i].x - mPointerGesture.referenceTouchX)
|
|
||||||
* mLocked.pointerGestureXZoomScale + mPointerGesture.referenceGestureX;
|
|
||||||
float y = (mCurrentTouch.pointers[i].y - mPointerGesture.referenceTouchY)
|
|
||||||
* mLocked.pointerGestureYZoomScale + mPointerGesture.referenceGestureY;
|
|
||||||
|
|
||||||
mPointerGesture.spotCoords[i].clear();
|
|
||||||
mPointerGesture.spotCoords[i].setAxisValue(AMOTION_EVENT_AXIS_X, x);
|
|
||||||
mPointerGesture.spotCoords[i].setAxisValue(AMOTION_EVENT_AXIS_Y, y);
|
|
||||||
mPointerGesture.spotCoords[i].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
// Show one spot per generated touch point.
|
|
||||||
// This may cause apparent discontinuities in spot motion when transitioning
|
|
||||||
// from PRESS to FREEFORM.
|
|
||||||
mPointerGesture.spotIdBits = mPointerGesture.currentGestureIdBits;
|
|
||||||
for (BitSet32 idBits(mPointerGesture.currentGestureIdBits); !idBits.isEmpty(); ) {
|
|
||||||
uint32_t id = idBits.firstMarkedBit();
|
|
||||||
idBits.clearBit(id);
|
|
||||||
uint32_t index = mPointerGesture.currentGestureIdToIndex[id];
|
|
||||||
mPointerGesture.spotIdToIndex[id] = index;
|
|
||||||
mPointerGesture.spotCoords[index] = mPointerGesture.currentGestureCoords[index];
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1113,12 +1113,6 @@ private:
|
|||||||
uint32_t lastGestureIdToIndex[MAX_POINTER_ID + 1];
|
uint32_t lastGestureIdToIndex[MAX_POINTER_ID + 1];
|
||||||
PointerCoords lastGestureCoords[MAX_POINTERS];
|
PointerCoords lastGestureCoords[MAX_POINTERS];
|
||||||
|
|
||||||
// Pointer coords and ids for the current spots.
|
|
||||||
PointerControllerInterface::SpotGesture spotGesture;
|
|
||||||
BitSet32 spotIdBits; // same set of ids as touch ids
|
|
||||||
uint32_t spotIdToIndex[MAX_POINTER_ID + 1];
|
|
||||||
PointerCoords spotCoords[MAX_POINTERS];
|
|
||||||
|
|
||||||
// Time the pointer gesture last went down.
|
// Time the pointer gesture last went down.
|
||||||
nsecs_t downTime;
|
nsecs_t downTime;
|
||||||
|
|
||||||
@ -1165,8 +1159,6 @@ private:
|
|||||||
currentGestureIdBits.clear();
|
currentGestureIdBits.clear();
|
||||||
lastGestureMode = NEUTRAL;
|
lastGestureMode = NEUTRAL;
|
||||||
lastGestureIdBits.clear();
|
lastGestureIdBits.clear();
|
||||||
spotGesture = PointerControllerInterface::SPOT_GESTURE_NEUTRAL;
|
|
||||||
spotIdBits.clear();
|
|
||||||
downTime = 0;
|
downTime = 0;
|
||||||
velocityTracker.clear();
|
velocityTracker.clear();
|
||||||
resetTap();
|
resetTap();
|
||||||
|
@ -240,10 +240,10 @@ void PointerController::setPresentation(Presentation presentation) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PointerController::setSpots(SpotGesture spotGesture,
|
void PointerController::setSpots(const PointerCoords* spotCoords,
|
||||||
const PointerCoords* spotCoords, const uint32_t* spotIdToIndex, BitSet32 spotIdBits) {
|
const uint32_t* spotIdToIndex, BitSet32 spotIdBits) {
|
||||||
#if DEBUG_POINTER_UPDATES
|
#if DEBUG_POINTER_UPDATES
|
||||||
LOGD("setSpots: spotGesture=%d", spotGesture);
|
LOGD("setSpots: idBits=%08x", spotIdBits.value);
|
||||||
for (BitSet32 idBits(spotIdBits); !idBits.isEmpty(); ) {
|
for (BitSet32 idBits(spotIdBits); !idBits.isEmpty(); ) {
|
||||||
uint32_t id = idBits.firstMarkedBit();
|
uint32_t id = idBits.firstMarkedBit();
|
||||||
idBits.clearBit(id);
|
idBits.clearBit(id);
|
||||||
|
@ -90,38 +90,6 @@ public:
|
|||||||
/* Sets the mode of the pointer controller. */
|
/* Sets the mode of the pointer controller. */
|
||||||
virtual void setPresentation(Presentation presentation) = 0;
|
virtual void setPresentation(Presentation presentation) = 0;
|
||||||
|
|
||||||
// Describes the current gesture.
|
|
||||||
enum SpotGesture {
|
|
||||||
// No gesture.
|
|
||||||
// Do not display any spots.
|
|
||||||
SPOT_GESTURE_NEUTRAL,
|
|
||||||
// Tap at current location.
|
|
||||||
// Briefly display one spot at the tapped location.
|
|
||||||
SPOT_GESTURE_TAP,
|
|
||||||
// Drag at current location.
|
|
||||||
// Display spot at pressed location.
|
|
||||||
SPOT_GESTURE_DRAG,
|
|
||||||
// Button pressed but no finger is down.
|
|
||||||
// Display spot at pressed location.
|
|
||||||
SPOT_GESTURE_BUTTON_CLICK,
|
|
||||||
// Button pressed and a finger is down.
|
|
||||||
// Display spot at pressed location.
|
|
||||||
SPOT_GESTURE_BUTTON_DRAG,
|
|
||||||
// One finger down and hovering.
|
|
||||||
// Display spot at the hovered location.
|
|
||||||
SPOT_GESTURE_HOVER,
|
|
||||||
// Two fingers down but not sure in which direction they are moving so we consider
|
|
||||||
// it a press at the pointer location.
|
|
||||||
// Display two spots near the pointer location.
|
|
||||||
SPOT_GESTURE_PRESS,
|
|
||||||
// Two fingers down and moving in same direction.
|
|
||||||
// Display two spots near the pointer location.
|
|
||||||
SPOT_GESTURE_SWIPE,
|
|
||||||
// Two or more fingers down and moving in arbitrary directions.
|
|
||||||
// Display two or more spots near the pointer location, one for each finger.
|
|
||||||
SPOT_GESTURE_FREEFORM,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Sets the spots for the current gesture.
|
/* Sets the spots for the current gesture.
|
||||||
* The spots are not subject to the inactivity timeout like the pointer
|
* The spots are not subject to the inactivity timeout like the pointer
|
||||||
* itself it since they are expected to remain visible for so long as
|
* itself it since they are expected to remain visible for so long as
|
||||||
@ -131,8 +99,7 @@ public:
|
|||||||
* For spotCoords, pressure != 0 indicates that the spot's location is being
|
* For spotCoords, pressure != 0 indicates that the spot's location is being
|
||||||
* pressed (not hovering).
|
* pressed (not hovering).
|
||||||
*/
|
*/
|
||||||
virtual void setSpots(SpotGesture spotGesture,
|
virtual void setSpots(const PointerCoords* spotCoords, const uint32_t* spotIdToIndex,
|
||||||
const PointerCoords* spotCoords, const uint32_t* spotIdToIndex,
|
|
||||||
BitSet32 spotIdBits) = 0;
|
BitSet32 spotIdBits) = 0;
|
||||||
|
|
||||||
/* Removes all spots. */
|
/* Removes all spots. */
|
||||||
@ -198,8 +165,8 @@ public:
|
|||||||
virtual void unfade(Transition transition);
|
virtual void unfade(Transition transition);
|
||||||
|
|
||||||
virtual void setPresentation(Presentation presentation);
|
virtual void setPresentation(Presentation presentation);
|
||||||
virtual void setSpots(SpotGesture spotGesture,
|
virtual void setSpots(const PointerCoords* spotCoords,
|
||||||
const PointerCoords* spotCoords, const uint32_t* spotIdToIndex, BitSet32 spotIdBits);
|
const uint32_t* spotIdToIndex, BitSet32 spotIdBits);
|
||||||
virtual void clearSpots();
|
virtual void clearSpots();
|
||||||
|
|
||||||
void setDisplaySize(int32_t width, int32_t height);
|
void setDisplaySize(int32_t width, int32_t height);
|
||||||
|
Reference in New Issue
Block a user