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 b142d715220252b9af900a65c53fa347b7e5f0ad..3ff7047aee7e5f0ee4c3b81aada8f681f32c945b 100644 |
--- a/remoting/android/java/src/org/chromium/chromoting/TouchInputHandler.java |
+++ b/remoting/android/java/src/org/chromium/chromoting/TouchInputHandler.java |
@@ -327,6 +327,7 @@ public class TouchInputHandler { |
switch (inputMode) { |
case TRACKPAD: |
setInputStrategy(new TrackpadInputStrategy(mRenderData, injector)); |
+ moveCursorToScreenCenter(); |
break; |
case TOUCH: |
@@ -356,8 +357,6 @@ public class TouchInputHandler { |
} else { |
mDesktopCanvas.clearSystemUiOffsets(); |
} |
- |
- mDesktopCanvas.repositionImage(true); |
} |
private boolean handleTouchEvent(MotionEvent event) { |
@@ -411,14 +410,19 @@ public class TouchInputHandler { |
private void resizeImageToFitScreen() { |
mDesktopCanvas.resizeImageToFitScreen(); |
+ moveCursorToScreenCenter(); |
+ |
+ mDesktopCanvas.repositionImage(); |
+ } |
+ |
+ private void moveCursorToScreenCenter() { |
float screenCenterX = (float) mRenderData.screenWidth / 2; |
float screenCenterY = (float) mRenderData.screenHeight / 2; |
float[] imagePoint = mapScreenPointToImagePoint(screenCenterX, screenCenterY); |
- mDesktopCanvas.setViewportPosition(imagePoint[0], imagePoint[1]); |
+ mDesktopCanvas.setViewportCenter(imagePoint[0], imagePoint[1]); |
moveCursorToScreenPoint(screenCenterX, screenCenterY); |
- mDesktopCanvas.repositionImage(true); |
} |
private void setInputStrategy(InputStrategyInterface inputStrategy) { |
@@ -437,19 +441,19 @@ public class TouchInputHandler { |
deltaX = -deltaX; |
deltaY = -deltaY; |
} |
+ |
// Determine the center point from which to apply the delta. |
// For indirect input modes (i.e. trackpad), the view generally follows the cursor. |
// For direct input modes (i.e. touch) the should track the user's motion. |
// If the user is dragging, then the viewport should always follow the user's finger. |
- PointF newPos = mDesktopCanvas.moveViewportCenter(!followCursor, deltaX, deltaY); |
- |
- // If we are in an indirect mode, then we want to keep the cursor centered, if possible, as |
- // the viewport moves. |
if (mInputStrategy.isIndirectInputMode()) { |
- moveCursor(newPos.x, newPos.y); |
+ PointF newCursorPos = mDesktopCanvas.moveViewportWithCursor(deltaX, deltaY); |
+ moveCursor(newCursorPos.x, newCursorPos.y); |
+ } else { |
+ mDesktopCanvas.moveViewportCenter(deltaX, deltaY); |
} |
- mDesktopCanvas.repositionImage(true); |
+ mDesktopCanvas.repositionImage(); |
} |
/** Moves the cursor to the specified position on the screen. */ |