Index: remoting/android/java/src/org/chromium/chromoting/DesktopView.java |
diff --git a/remoting/android/java/src/org/chromium/chromoting/DesktopView.java b/remoting/android/java/src/org/chromium/chromoting/DesktopView.java |
index 3d571b9db8c8177667e245aa1846f959d841fc7b..e6f685cd6ace01d9ca1aadf71c8bf49e7cbe784e 100644 |
--- a/remoting/android/java/src/org/chromium/chromoting/DesktopView.java |
+++ b/remoting/android/java/src/org/chromium/chromoting/DesktopView.java |
@@ -63,6 +63,8 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder. |
/** Whether the bottom edge of the image was visible on-screen during the last render. */ |
private boolean mBottomUsedToBeOut; |
+ private int mMouseButton; |
+ |
/** Whether the device has just been rotated, necessitating a canvas redraw. */ |
private boolean mJustRotated; |
@@ -81,6 +83,8 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder. |
mRightUsedToBeOut = false; |
mBottomUsedToBeOut = false; |
+ mMouseButton = 0; |
+ |
mJustRotated = false; |
} |
@@ -219,13 +223,66 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder. |
Log.i("deskview", "DesktopView.surfaceDestroyed(...)"); |
} |
+ /** Called when a mouse action is made. */ |
+ private void handleMouseMovement(float[] coordinates, int button) { |
+ // Coordinates are relative to the canvas, but we need image coordinates. |
+ Matrix canvasToImage = new Matrix(); |
+ mTransform.invert(canvasToImage); |
+ canvasToImage.mapPoints(coordinates); |
+ |
+ // Coordinates are now relative to the image, so transmit them to the host. |
+ JniInterface.mouseAction((int)coordinates[0], (int)coordinates[1], button); |
+ } |
+ |
/** |
* Called whenever the user attempts to touch the canvas. Forwards such |
* events to the appropriate gesture detector until one accepts them. |
*/ |
@Override |
public boolean onTouchEvent(MotionEvent event) { |
- return mScroller.onTouchEvent(event) || mZoomer.onTouchEvent(event); |
+ boolean handled = mScroller.onTouchEvent(event) || mZoomer.onTouchEvent(event); |
+ |
+ if (event.getPointerCount()==1) { |
+ float[] coordinates = {event.getRawX(), event.getY()}; |
+ |
+ switch (event.getActionMasked()) { |
+ case MotionEvent.ACTION_DOWN: |
+ Log.i("gesture", "Down..."); |
+ mMouseButton = 0; |
+ break; |
+ |
+ case MotionEvent.ACTION_MOVE: |
+ if (mMouseButton==0) { |
+ Log.i("gesture", "Moving 1"); |
+ mMouseButton = 1; // TODO Name me! |
solb
2013/07/22 19:13:48
Sorry; I had forgotten how rough this revision was
|
+ } |
+ else Log.i("gesture", "Moving " + mMouseButton); |
+ break; |
+ |
+ case MotionEvent.ACTION_UP: |
+ if (mMouseButton==0) { |
+ Log.i("gesture", "Releasing 1 (after press)"); |
+ handleMouseMovement(coordinates, 1); // TODO Name me! |
+ mMouseButton = -1; // TODO Name me! |
+ } |
+ else if (mMouseButton > 0) { |
+ Log.i("gesture", "Releasing " + mMouseButton); |
+ mMouseButton *= -1; |
+ } |
+ else { |
+ Log.w("gesture", "Button already in released state before gesture ended"); |
+ } |
+ break; |
+ |
+ default: |
+ return handled; |
+ } |
+ handleMouseMovement(coordinates, mMouseButton); |
+ |
+ return true; |
+ } |
+ |
+ return handled; |
} |
/** Responds to touch events filtered by the gesture detectors. */ |
@@ -267,6 +324,12 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder. |
return true; |
} |
+ /** Called whenever a gesture starts. Always accepts the gesture so it isn't ignored. */ |
+ @Override |
+ public boolean onDown(MotionEvent e) { |
+ return true; |
+ } |
+ |
/** |
* Called when the user starts to zoom. Always accepts the zoom so that |
* onScale() can decide whether to respond to it. |
@@ -283,5 +346,19 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder. |
public void onScaleEnd(ScaleGestureDetector detector) { |
onScale(detector); |
} |
+ |
+ @Override |
+ public void onLongPress(MotionEvent e) { |
+ float[] coordinates = new float[] {e.getRawX(), e.getY()}; |
+ |
+ if (mMouseButton > 0) { |
+ Log.i("gesture", "Releasing " + mMouseButton); |
+ handleMouseMovement(coordinates, -mMouseButton); |
+ } |
+ |
+ Log.i("gesture", "Pressing 3"); |
+ mMouseButton = 3; // TODO Name me! |
+ handleMouseMovement(coordinates, mMouseButton); |
+ } |
} |
} |