diff options
author | Mangesh Ghiware <mghiware@google.com> | 2012-02-06 15:27:08 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-02-06 15:27:08 -0800 |
commit | 5bd41b2949fe25e19ba8ec62da7e204403c51061 (patch) | |
tree | 244dcf17269c04293b520b318d9bfa34d38d88bd | |
parent | cb6831d7b6b9f5ef940e79e5dddc022f35d4b4c7 (diff) | |
parent | 5fe6f951ac0b013be76f2b34b8e87ca6d11010b3 (diff) | |
download | frameworks_base-5bd41b2949fe25e19ba8ec62da7e204403c51061.zip frameworks_base-5bd41b2949fe25e19ba8ec62da7e204403c51061.tar.gz frameworks_base-5bd41b2949fe25e19ba8ec62da7e204403c51061.tar.bz2 |
Merge "Use WebKit hit testing result for centering on double-tap zoom."
-rw-r--r-- | core/java/android/webkit/WebView.java | 28 | ||||
-rw-r--r-- | core/java/android/webkit/WebViewCore.java | 1 | ||||
-rw-r--r-- | core/java/android/webkit/ZoomManager.java | 2 |
3 files changed, 30 insertions, 1 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 3f5b45e..fbafc64 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -2822,6 +2822,34 @@ public class WebView extends AbsoluteLayout return result; } + int getBlockLeftEdge(int x, int y, float readingScale) { + if (!sDisableNavcache) { + return nativeGetBlockLeftEdge(x, y, readingScale); + } + + float invReadingScale = 1.0f / readingScale; + int readingWidth = (int) (getViewWidth() * invReadingScale); + int left = NO_LEFTEDGE; + if (mFocusedNode != null) { + final int length = mFocusedNode.mEnclosingParentRects.length; + for (int i = 0; i < length; i++) { + Rect rect = mFocusedNode.mEnclosingParentRects[i]; + if (rect.width() < mFocusedNode.mHitTestSlop) { + // ignore bounding boxes that are too small + continue; + } else if (left != NO_LEFTEDGE && rect.width() > readingWidth) { + // stop when bounding box doesn't fit the screen width + // at reading scale + break; + } + + left = rect.left; + } + } + + return left; + } + // Called by JNI when the DOM has changed the focus. Clear the focus so // that new keys will go to the newly focused field private void domChangedFocus() { diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index ebf3e21..8a9c12d 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -872,6 +872,7 @@ public final class WebViewCore { Rect[] mTouchRects; boolean mEditable; int mTapHighlightColor = WebView.HIGHLIGHT_COLOR; + Rect[] mEnclosingParentRects; // These are the input values that produced this hit test int mHitTestX; diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java index 8ffba64..ae2d617 100644 --- a/core/java/android/webkit/ZoomManager.java +++ b/core/java/android/webkit/ZoomManager.java @@ -717,7 +717,7 @@ class ZoomManager { private void zoomToReadingLevel() { final float readingScale = getReadingLevelScale(); - int left = mWebView.nativeGetBlockLeftEdge(mAnchorX, mAnchorY, mActualScale); + int left = mWebView.getBlockLeftEdge(mAnchorX, mAnchorY, readingScale); if (left != WebView.NO_LEFTEDGE) { // add a 5pt padding to the left edge. int viewLeft = mWebView.contentToViewX(left < 5 ? 0 : (left - 5)) |