diff options
author | Winson Chung <winsonc@google.com> | 2011-07-11 13:40:52 -0700 |
---|---|---|
committer | Winson Chung <winsonc@google.com> | 2011-07-11 14:00:02 -0700 |
commit | 273c1022405bcc5e0840450b9195622e7476c9dd (patch) | |
tree | a3d9bce7a3586c2e3f9cfbcab919d2fc8c4ce9dc /src/com/android/launcher2/DragController.java | |
parent | a71cb1778dc0c7e76132d21296c58da777183e26 (diff) | |
download | android_packages_apps_Trebuchet-273c1022405bcc5e0840450b9195622e7476c9dd.tar.gz android_packages_apps_Trebuchet-273c1022405bcc5e0840450b9195622e7476c9dd.tar.bz2 android_packages_apps_Trebuchet-273c1022405bcc5e0840450b9195622e7476c9dd.zip |
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.java | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/com/android/launcher2/DragController.java b/src/com/android/launcher2/DragController.java index f6058a0a2..5aecede0e 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: |