summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/DragController.java
diff options
context:
space:
mode:
authorWinson Chung <winsonc@google.com>2011-07-11 13:40:52 -0700
committerWinson Chung <winsonc@google.com>2011-07-11 14:00:02 -0700
commit273c1022405bcc5e0840450b9195622e7476c9dd (patch)
treea3d9bce7a3586c2e3f9cfbcab919d2fc8c4ce9dc /src/com/android/launcher2/DragController.java
parenta71cb1778dc0c7e76132d21296c58da777183e26 (diff)
downloadpackages_apps_trebuchet-273c1022405bcc5e0840450b9195622e7476c9dd.zip
packages_apps_trebuchet-273c1022405bcc5e0840450b9195622e7476c9dd.tar.gz
packages_apps_trebuchet-273c1022405bcc5e0840450b9195622e7476c9dd.tar.bz2
Clamping touch positions to drag layer rect to prevent dragging outside of bounds.
- Fixing small issue with default widget preview aspect ratios Change-Id: I2dca0524e8aa7c48345b424bad889736fa345386
Diffstat (limited to 'src/com/android/launcher2/DragController.java')
-rw-r--r--src/com/android/launcher2/DragController.java23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/com/android/launcher2/DragController.java b/src/com/android/launcher2/DragController.java
index f6058a0..5aecede 100644
--- a/src/com/android/launcher2/DragController.java
+++ b/src/com/android/launcher2/DragController.java
@@ -110,6 +110,9 @@ public class DragController {
private int mLastTouch[] = new int[2];
private int mDistanceSinceScroll = 0;
+ private int mTmpPoint[] = new int[2];
+ private Rect mDragLayerRect = new Rect();
+
/**
* Interface to receive notifications when a drag starts or stops
*/
@@ -385,6 +388,16 @@ public class DragController {
}
/**
+ * Clamps the position to the drag layer bounds.
+ */
+ private int[] getClampedDragLayerPos(float x, float y) {
+ mLauncher.getDragLayer().getLocalVisibleRect(mDragLayerRect);
+ mTmpPoint[0] = (int) Math.max(mDragLayerRect.left, Math.min(x, mDragLayerRect.right - 1));
+ mTmpPoint[1] = (int) Math.max(mDragLayerRect.top, Math.min(y, mDragLayerRect.bottom - 1));
+ return mTmpPoint;
+ }
+
+ /**
* Call this from a drag source view.
*/
public boolean onInterceptTouchEvent(MotionEvent ev) {
@@ -394,8 +407,9 @@ public class DragController {
}
final int action = ev.getAction();
- final int dragLayerX = (int) ev.getX();
- final int dragLayerY = (int) ev.getY();
+ final int[] dragLayerPos = getClampedDragLayerPos(ev.getX(), ev.getY());
+ final int dragLayerX = dragLayerPos[0];
+ final int dragLayerY = dragLayerPos[1];
switch (action) {
case MotionEvent.ACTION_MOVE:
@@ -506,8 +520,9 @@ public class DragController {
}
final int action = ev.getAction();
- final int dragLayerX = (int) ev.getX();
- final int dragLayerY = (int) ev.getY();
+ final int[] dragLayerPos = getClampedDragLayerPos(ev.getX(), ev.getY());
+ final int dragLayerX = dragLayerPos[0];
+ final int dragLayerY = dragLayerPos[1];
switch (action) {
case MotionEvent.ACTION_DOWN: