Chromium Code Reviews| 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 b1eac42633a5f3d16d6dc682c98d45519852a106..8e56fa6917fe553bbe13a4263e481932d639d439 100644 |
| --- a/remoting/android/java/src/org/chromium/chromoting/DesktopView.java |
| +++ b/remoting/android/java/src/org/chromium/chromoting/DesktopView.java |
| @@ -11,6 +11,7 @@ import android.graphics.Canvas; |
| import android.graphics.Color; |
| import android.graphics.Matrix; |
| import android.graphics.Paint; |
| +import android.graphics.Point; |
| import android.os.Bundle; |
| import android.os.Looper; |
| import android.text.InputType; |
| @@ -67,6 +68,12 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder. |
| private int mScreenWidth; |
| private int mScreenHeight; |
| + /** |
| + * Specifies the position, in image coordinates, at which the cursor image will be drawn. |
| + * This will normally be at the location of the most recently injected motion event. |
| + */ |
| + private Point mCursorPosition; |
| + |
| /** Specifies the dimension by which the zoom level is being lower-bounded. */ |
| private Constraint mConstraint; |
| @@ -98,6 +105,7 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder. |
| mTransform = new Matrix(); |
| mScreenWidth = 0; |
| mScreenHeight = 0; |
| + mCursorPosition = new Point(); |
| mConstraint = Constraint.UNDEFINED; |
| mRecheckConstraint = false; |
| @@ -216,6 +224,12 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder. |
| canvas.drawColor(Color.BLACK); |
| canvas.drawBitmap(image, 0, 0, new Paint()); |
| + Bitmap cursorBitmap = JniInterface.getCursorBitmap(); |
| + if (cursorBitmap != null) { |
| + Point hotspot = JniInterface.getCursorHotspot(); |
| + canvas.drawBitmap(cursorBitmap, mCursorPosition.x - hotspot.x, |
|
solb
2013/09/14 00:29:41
It might be good to synchronize this on mCursorPos
Lambros
2013/09/14 01:16:48
Good catch! Done.
|
| + mCursorPosition.y - hotspot.y, new Paint()); |
| + } |
| getHolder().unlockCanvasAndPost(canvas); |
| } |
| @@ -242,6 +256,8 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder. |
| synchronized (mTransform) { |
| mScreenWidth = width; |
| mScreenHeight = height; |
| + mCursorPosition.x = width / 2; |
|
solb
2013/09/14 00:29:41
Synchronizing these on mTransform does no good, si
Lambros
2013/09/14 01:16:48
Done.
|
| + mCursorPosition.y = height / 2; |
| if (mRecheckConstraint) { |
| mConstraint = Constraint.UNDEFINED; |
| @@ -299,8 +315,15 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder. |
| mTransform.invert(canvasToImage); |
| canvasToImage.mapPoints(coordinates); |
| + mCursorPosition.x = (int)coordinates[0]; |
|
solb
2013/09/14 00:29:41
I think these two lines should also be synchronize
Lambros
2013/09/14 01:16:48
Done. I've also added a synchronize around mTransf
|
| + mCursorPosition.y = (int)coordinates[1]; |
| + |
| // Coordinates are now relative to the image, so transmit them to the host. |
| - JniInterface.mouseAction((int)coordinates[0], (int)coordinates[1], button, pressed); |
| + JniInterface.mouseAction(mCursorPosition.x, mCursorPosition.y, button, pressed); |
| + |
| + // TODO(lambroslambrou): Optimize this to repaint only the areas covered by the old and new |
| + // cursor positions. |
| + JniInterface.redrawGraphics(); |
| } |
| /** |