diff options
| author | Adam Powell <adamp@google.com> | 2010-09-12 10:28:50 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2010-09-12 10:28:50 -0700 |
| commit | 12e08f3a8853ef4248ee9c18583c3b4917dd0c40 (patch) | |
| tree | aa8c58c4c7f2db370f7b4575397d979dda687302 /core/java/android/webkit/WebView.java | |
| parent | ec06144c9ddd5eb06ab77b885bc5312e74b38415 (diff) | |
| parent | 26cab06472badee374ac854f5a210991c37c4493 (diff) | |
| download | frameworks_base-12e08f3a8853ef4248ee9c18583c3b4917dd0c40.zip frameworks_base-12e08f3a8853ef4248ee9c18583c3b4917dd0c40.tar.gz frameworks_base-12e08f3a8853ef4248ee9c18583c3b4917dd0c40.tar.bz2 | |
am 26cab064: Merge "Allow two finger pan and scale on touchscreens with FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT." into gingerbread
Merge commit '26cab06472badee374ac854f5a210991c37c4493' into gingerbread-plus-aosp
* commit '26cab06472badee374ac854f5a210991c37c4493':
Allow two finger pan and scale on touchscreens with
Diffstat (limited to 'core/java/android/webkit/WebView.java')
| -rw-r--r-- | core/java/android/webkit/WebView.java | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index bf528e0..a745702 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -463,6 +463,11 @@ public class WebView extends AbsoluteLayout private static final int TOUCH_DONE_MODE = 7; private static final int TOUCH_PINCH_DRAG = 8; + /** + * True if we have a touch panel capable of detecting smooth pan/scale at the same time + */ + private boolean mAllowPanAndScale; + // Whether to forward the touch events to WebCore private boolean mForwardTouchEvents = false; @@ -976,9 +981,11 @@ public class WebView extends AbsoluteLayout void updateMultiTouchSupport(Context context) { WebSettings settings = getSettings(); - mSupportMultiTouch = context.getPackageManager().hasSystemFeature( - PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH) + final PackageManager pm = context.getPackageManager(); + mSupportMultiTouch = pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH) && settings.supportZoom() && settings.getBuiltInZoomControls(); + mAllowPanAndScale = pm.hasSystemFeature( + PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT); if (mSupportMultiTouch && (mScaleDetector == null)) { mScaleDetector = new ScaleGestureDetector(context, new ScaleDetectorListener()); @@ -5018,11 +5025,13 @@ public class WebView extends AbsoluteLayout // FIXME: we may consider to give WebKit an option to handle multi-touch // events later. if (mSupportMultiTouch && ev.getPointerCount() > 1) { - if (mMinZoomScale < mMaxZoomScale) { + if (mAllowPanAndScale || mMinZoomScale < mMaxZoomScale) { mScaleDetector.onTouchEvent(ev); if (mScaleDetector.isInProgress()) { mLastTouchTime = eventTime; - return true; + if (!mAllowPanAndScale) { + return true; + } } x = mScaleDetector.getFocusX(); y = mScaleDetector.getFocusY(); @@ -5224,15 +5233,21 @@ public class WebView extends AbsoluteLayout mLastTouchTime = eventTime; break; } - // if it starts nearly horizontal or vertical, enforce it - int ax = Math.abs(deltaX); - int ay = Math.abs(deltaY); - if (ax > MAX_SLOPE_FOR_DIAG * ay) { - mSnapScrollMode = SNAP_X; - mSnapPositive = deltaX > 0; - } else if (ay > MAX_SLOPE_FOR_DIAG * ax) { - mSnapScrollMode = SNAP_Y; - mSnapPositive = deltaY > 0; + + // Only lock dragging to one axis if we don't have a scale in progress. + // Scaling implies free-roaming movement. Note we'll only ever get here + // if mAllowPanAndScale is true. + if (mScaleDetector != null && !mScaleDetector.isInProgress()) { + // if it starts nearly horizontal or vertical, enforce it + int ax = Math.abs(deltaX); + int ay = Math.abs(deltaY); + if (ax > MAX_SLOPE_FOR_DIAG * ay) { + mSnapScrollMode = SNAP_X; + mSnapPositive = deltaX > 0; + } else if (ay > MAX_SLOPE_FOR_DIAG * ax) { + mSnapScrollMode = SNAP_Y; + mSnapPositive = deltaY > 0; + } } mTouchMode = TOUCH_DRAG_MODE; |
