summaryrefslogtreecommitdiff
path: root/apps/Development/src/com/android/development/PointerLocation.java
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2009-08-04 20:03:31 -0700
committerDianne Hackborn <hackbod@google.com>2009-08-04 20:03:31 -0700
commit30712dcdf75eb6d4587c147da5fb81011699a88f (patch)
treededd92fdf21f335a128211340ff947c5f10d81f6 /apps/Development/src/com/android/development/PointerLocation.java
parentbae114d3dae83a5519b5a001670adc6dd8a03f4a (diff)
Update to use new multi-pointer APIs.
Diffstat (limited to 'apps/Development/src/com/android/development/PointerLocation.java')
-rw-r--r--apps/Development/src/com/android/development/PointerLocation.java119
1 files changed, 73 insertions, 46 deletions
diff --git a/apps/Development/src/com/android/development/PointerLocation.java b/apps/Development/src/com/android/development/PointerLocation.java
index 4ef97a211..419e2e470 100644
--- a/apps/Development/src/com/android/development/PointerLocation.java
+++ b/apps/Development/src/com/android/development/PointerLocation.java
@@ -65,6 +65,7 @@ public class PointerLocation extends Activity {
private final Paint mTextLevelPaint;
private final Paint mPaint;
private final Paint mTargetPaint;
+ private final Paint mPathPaint;
private final FontMetricsInt mTextMetrics = new FontMetricsInt();
private int mHeaderBottom;
private boolean mCurDown;
@@ -92,6 +93,9 @@ public class PointerLocation extends Activity {
mTargetPaint = new Paint();
mTargetPaint.setAntiAlias(false);
mTargetPaint.setARGB(192, 0, 0, 255);
+ mPathPaint = new Paint();
+ mPathPaint.setAntiAlias(false);
+ mPathPaint.setARGB(255, 64, 128, 255);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(1);
}
@@ -138,35 +142,45 @@ public class PointerLocation extends Activity {
final int N = ps.mXs.size();
float lastX=0, lastY=0;
- mPaint.setARGB(255, 0, 255, 255);
+ boolean haveLast = false;
+ boolean drawn = false;
+ mPaint.setARGB(255, 128, 255, 255);
for (int i=0; i<N; i++) {
float x = ps.mXs.get(i);
float y = ps.mYs.get(i);
- if (i > 0) {
- canvas.drawLine(lastX, lastY, x, y, mTargetPaint);
+ if (Float.isNaN(x)) {
+ haveLast = false;
+ continue;
+ }
+ if (haveLast) {
+ canvas.drawLine(lastX, lastY, x, y, mPathPaint);
canvas.drawPoint(lastX, lastY, mPaint);
+ drawn = true;
}
lastX = x;
lastY = y;
+ haveLast = true;
}
- if (ps.mVelocity != null) {
- mPaint.setARGB(255, 255, 0, 0);
- float xVel = ps.mVelocity.getXVelocity() * (1000/60);
- float yVel = ps.mVelocity.getYVelocity() * (1000/60);
- canvas.drawLine(lastX, lastY, lastX+xVel, lastY+yVel, mPaint);
- } else {
- canvas.drawPoint(lastX, lastY, mPaint);
+
+ if (drawn) {
+ if (ps.mVelocity != null) {
+ mPaint.setARGB(255, 255, 64, 128);
+ float xVel = ps.mVelocity.getXVelocity() * (1000/60);
+ float yVel = ps.mVelocity.getYVelocity() * (1000/60);
+ canvas.drawLine(lastX, lastY, lastX+xVel, lastY+yVel, mPaint);
+ } else {
+ canvas.drawPoint(lastX, lastY, mPaint);
+ }
+ }
+
+ if (mCurDown && ps.mCurDown) {
+ canvas.drawLine(0, (int)ps.mCurY, getWidth(), (int)ps.mCurY, mTargetPaint);
+ canvas.drawLine((int)ps.mCurX, 0, (int)ps.mCurX, getHeight(), mTargetPaint);
+ int pressureLevel = (int)(ps.mCurPressure*255);
+ mPaint.setARGB(255, pressureLevel, 128, 255-pressureLevel);
+ canvas.drawPoint(ps.mCurX, ps.mCurY, mPaint);
+ canvas.drawCircle(ps.mCurX, ps.mCurY, ps.mCurWidth, mPaint);
}
- }
-
- if (mCurDown && NP > 0) {
- final PointerState ps = mPointers.get(0);
- canvas.drawLine(0, (int)ps.mCurY, getWidth(), (int)ps.mCurY, mTargetPaint);
- canvas.drawLine((int)ps.mCurX, 0, (int)ps.mCurX, getHeight(), mTargetPaint);
- int pressureLevel = (int)(ps.mCurPressure*255);
- mPaint.setARGB(255, pressureLevel, 128, 255-pressureLevel);
- canvas.drawPoint(ps.mCurX, ps.mCurY, mPaint);
- canvas.drawCircle(ps.mCurX, ps.mCurY, ps.mCurWidth, mPaint);
}
}
@@ -188,57 +202,70 @@ public class PointerLocation extends Activity {
// mRect.setEmpty();
//}
if (action == MotionEvent.ACTION_DOWN) {
+ if (NP == 0) {
+ PointerState ps = new PointerState();
+ ps.mVelocity = VelocityTracker.obtain();
+ mPointers.add(ps);
+ NP++;
+ }
for (int p=0; p<NP; p++) {
final PointerState ps = mPointers.get(p);
ps.mXs.clear();
ps.mYs.clear();
ps.mVelocity = VelocityTracker.obtain();
+ ps.mCurDown = false;
}
- }
-
- while (NP < event.getPointerCount()) {
- PointerState ps = new PointerState();
- ps.mVelocity = VelocityTracker.obtain();
- mPointers.add(ps);
- NP++;
+ mPointers.get(0).mCurDown = true;
}
if ((action&MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_DOWN) {
- final PointerState ps = mPointers.get(
- (action&MotionEvent.ACTION_POINTER_MASK)
- >> MotionEvent.ACTION_POINTER_SHIFT);
- ps.mXs.clear();
- ps.mYs.clear();
+ final int id = (action&MotionEvent.ACTION_POINTER_ID_MASK)
+ >> MotionEvent.ACTION_POINTER_ID_SHIFT;
+ while (NP <= id) {
+ PointerState ps = new PointerState();
+ ps.mVelocity = VelocityTracker.obtain();
+ mPointers.add(ps);
+ NP++;
+ }
+ final PointerState ps = mPointers.get(id);
ps.mVelocity = VelocityTracker.obtain();
+ ps.mCurDown = true;
}
- if (NP > event.getPointerCount()) {
- NP = event.getPointerCount();
- }
+ final int NI = event.getPointerCount();
mCurDown = action != MotionEvent.ACTION_UP
&& action != MotionEvent.ACTION_CANCEL;
- for (int p=0; p<NP; p++) {
- final PointerState ps = mPointers.get(p);
+ for (int i=0; i<NI; i++) {
+ final PointerState ps = mPointers.get(event.getPointerId(i));
ps.mVelocity.addMovement(event);
ps.mVelocity.computeCurrentVelocity(1);
final int N = event.getHistorySize();
- for (int i=0; i<N; i++) {
- ps.mXs.add(event.getHistoricalX(p, i));
- ps.mYs.add(event.getHistoricalY(p, i));
+ for (int j=0; j<N; j++) {
+ ps.mXs.add(event.getHistoricalX(i, j));
+ ps.mYs.add(event.getHistoricalY(i, j));
}
- ps.mXs.add(event.getX(p));
- ps.mYs.add(event.getY(p));
- ps.mCurX = (int)event.getX(p);
- ps.mCurY = (int)event.getY(p);
+ ps.mXs.add(event.getX(i));
+ ps.mYs.add(event.getY(i));
+ ps.mCurX = (int)event.getX(i);
+ ps.mCurY = (int)event.getY(i);
//Log.i("Pointer", "Pointer #" + p + ": (" + ps.mCurX
// + "," + ps.mCurY + ")");
- ps.mCurPressure = event.getPressure(p);
- ps.mCurSize = event.getSize(p);
+ ps.mCurPressure = event.getPressure(i);
+ ps.mCurSize = event.getSize(i);
ps.mCurWidth = (int)(ps.mCurSize*(getWidth()/3));
}
+ if ((action&MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_UP) {
+ final int id = (action&MotionEvent.ACTION_POINTER_ID_MASK)
+ >> MotionEvent.ACTION_POINTER_ID_SHIFT;
+ final PointerState ps = mPointers.get(id);
+ ps.mXs.add(Float.NaN);
+ ps.mYs.add(Float.NaN);
+ ps.mCurDown = false;
+ }
+
//if (mCurDown) {
// mRect.union(mCurX-mCurWidth-3, mCurY-mCurWidth-3,
// mCurX+mCurWidth+3, mCurY+mCurWidth+3);