Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(101)

Unified Diff: remoting/android/java/src/org/chromium/chromoting/TouchInputHandler.java

Issue 2146303002: Fixing a cursor position initialization problem (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing CR Feedback Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/android/java/src/org/chromium/chromoting/DesktopCanvas.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/android/java/src/org/chromium/chromoting/TouchInputHandler.java
diff --git a/remoting/android/java/src/org/chromium/chromoting/TouchInputHandler.java b/remoting/android/java/src/org/chromium/chromoting/TouchInputHandler.java
index 4cbd35ed60803a8945067e13135d52748f44e497..7b03a25df102fb9116b72aed1d0b7e76cec75ee7 100644
--- a/remoting/android/java/src/org/chromium/chromoting/TouchInputHandler.java
+++ b/remoting/android/java/src/org/chromium/chromoting/TouchInputHandler.java
@@ -20,6 +20,8 @@ import android.view.ViewConfiguration;
* are passed to the InputStrategyInterface implementation set by the DesktopView.
*/
public class TouchInputHandler {
+ private static final float EPSILON = 0.001f;
+
private final AbstractDesktopView mViewer;
private final Context mContext;
private final RenderData mRenderData;
@@ -361,8 +363,12 @@ public class TouchInputHandler {
synchronized (mRenderData) {
screenCenterX = (float) mRenderData.screenWidth / 2;
screenCenterY = (float) mRenderData.screenHeight / 2;
+
+ float[] imagePoint = mapScreenPointToImagePoint(screenCenterX, screenCenterY);
+ mDesktopCanvas.setViewportPosition(imagePoint[0], imagePoint[1]);
}
moveCursorToScreenPoint(screenCenterX, screenCenterY);
+ mDesktopCanvas.repositionImage(true);
}
private void setInputStrategy(InputStrategyInterface inputStrategy) {
@@ -399,13 +405,8 @@ public class TouchInputHandler {
/** Moves the cursor to the specified position on the screen. */
private void moveCursorToScreenPoint(float screenX, float screenY) {
- float[] mappedValues = {screenX, screenY};
- synchronized (mRenderData) {
- Matrix canvasToImage = new Matrix();
- mRenderData.transform.invert(canvasToImage);
- canvasToImage.mapPoints(mappedValues);
- }
- moveCursor((int) mappedValues[0], (int) mappedValues[1]);
+ float[] imagePoint = mapScreenPointToImagePoint(screenX, screenY);
+ moveCursor((int) imagePoint[0], (int) imagePoint[1]);
}
/** Moves the cursor to the specified position on the remote host. */
@@ -437,6 +438,18 @@ public class TouchInputHandler {
return true;
}
+ /** Translates a point in screen coordinates to a location on the desktop image. */
+ private float[] mapScreenPointToImagePoint(float screenX, float screenY) {
+ float[] mappedPoints = {screenX, screenY};
+ Matrix screenToImage = new Matrix();
+ synchronized (mRenderData) {
+ mRenderData.transform.invert(screenToImage);
+ }
+ screenToImage.mapPoints(mappedPoints);
+
+ return mappedPoints;
+ }
+
/** Responds to touch events filtered by the gesture detectors. */
private class GestureListener extends GestureDetector.SimpleOnGestureListener
implements ScaleGestureDetector.OnScaleGestureListener,
@@ -570,7 +583,7 @@ public class TouchInputHandler {
}
if (!mInputStrategy.isIndirectInputMode()) {
- if (!mapScreenPointToImage(x, y)) {
+ if (screenPointLiesOutsideImageBoundary(x, y)) {
return false;
}
moveCursorToScreenPoint(x, y);
@@ -595,7 +608,7 @@ public class TouchInputHandler {
}
if (!mInputStrategy.isIndirectInputMode()) {
- if (!mapScreenPointToImage(x, y)) {
+ if (screenPointLiesOutsideImageBoundary(x, y)) {
return;
}
moveCursorToScreenPoint(x, y);
@@ -626,21 +639,18 @@ public class TouchInputHandler {
}
}
- /** Verifies the given point maps to a valid location within the desktop image. */
- private boolean mapScreenPointToImage(float screenX, float screenY) {
- float[] mappedPoints = {screenX, screenY};
- int imageWidth;
- int imageHeight;
- Matrix screenToImage = new Matrix();
+ /** Determines whether the given screen point lies outside the desktop image. */
+ private boolean screenPointLiesOutsideImageBoundary(float screenX, float screenY) {
+ float[] mappedPoints = mapScreenPointToImagePoint(screenX, screenY);
+ float imageWidth;
+ float imageHeight;
synchronized (mRenderData) {
- mRenderData.transform.invert(screenToImage);
- imageWidth = mRenderData.imageWidth;
- imageHeight = mRenderData.imageHeight;
+ imageWidth = (float) mRenderData.imageWidth + EPSILON;
+ imageHeight = (float) mRenderData.imageHeight + EPSILON;
}
- screenToImage.mapPoints(mappedPoints);
- return (mappedPoints[0] >= 0 && mappedPoints[0] <= imageWidth)
- && (mappedPoints[1] >= 0 && mappedPoints[1] <= imageHeight);
+ return mappedPoints[0] < -EPSILON || mappedPoints[0] > imageWidth
+ || mappedPoints[1] < -EPSILON || mappedPoints[1] > imageHeight;
}
}
}
« no previous file with comments | « remoting/android/java/src/org/chromium/chromoting/DesktopCanvas.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698