From 90c08eafad72454a31282fd887ec23d357c904a4 Mon Sep 17 00:00:00 2001 From: George Mount Date: Tue, 10 Apr 2012 13:14:48 -0700 Subject: [PATCH] Revert "Keep selection handles in edit fields." This reverts commit 5d84368a7577c5d53ce885cd2d095cc5ba40d924 --- .../android/webkit/AutoCompletePopup.java | 8 +-- core/java/android/webkit/WebViewClassic.java | 70 +++++++------------ core/java/android/webkit/WebViewCore.java | 12 +--- 3 files changed, 32 insertions(+), 58 deletions(-) diff --git a/core/java/android/webkit/AutoCompletePopup.java b/core/java/android/webkit/AutoCompletePopup.java index 21d5e02484455..b26156ce40273 100644 --- a/core/java/android/webkit/AutoCompletePopup.java +++ b/core/java/android/webkit/AutoCompletePopup.java @@ -129,13 +129,13 @@ class AutoCompletePopup implements OnItemClickListener, Filter.FilterListener { } public void resetRect() { - int left = mWebView.contentToViewX(mWebView.mEditTextContentBounds.left); - int right = mWebView.contentToViewX(mWebView.mEditTextContentBounds.right); + int left = mWebView.contentToViewX(mWebView.mEditTextBounds.left); + int right = mWebView.contentToViewX(mWebView.mEditTextBounds.right); int width = right - left; mPopup.setWidth(width); - int bottom = mWebView.contentToViewY(mWebView.mEditTextContentBounds.bottom); - int top = mWebView.contentToViewY(mWebView.mEditTextContentBounds.top); + int bottom = mWebView.contentToViewY(mWebView.mEditTextBounds.bottom); + int top = mWebView.contentToViewY(mWebView.mEditTextBounds.top); int height = bottom - top; AbsoluteLayout.LayoutParams lp = diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java index ab6ac1d6145f3..586fcb1c35826 100644 --- a/core/java/android/webkit/WebViewClassic.java +++ b/core/java/android/webkit/WebViewClassic.java @@ -846,7 +846,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc private int mFieldPointer; private PastePopupWindow mPasteWindow; private AutoCompletePopup mAutoCompletePopup; - Rect mEditTextContentBounds = new Rect(); + Rect mEditTextBounds = new Rect(); Rect mEditTextContent = new Rect(); int mEditTextLayerId; boolean mIsEditingText = false; @@ -1230,7 +1230,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc static final int ANIMATE_TEXT_SCROLL = 149; static final int EDIT_TEXT_SIZE_CHANGED = 150; static final int SHOW_CARET_HANDLE = 151; - static final int UPDATE_CONTENT_BOUNDS = 152; private static final int FIRST_PACKAGE_MSG_ID = SCROLL_TO_MSG_ID; private static final int LAST_PACKAGE_MSG_ID = HIT_TEST_RESULT; @@ -3866,7 +3865,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } if (mAutoCompletePopup != null && mCurrentScrollingLayerId == mEditTextLayerId) { - mEditTextContentBounds.offset(dx, dy); + mEditTextBounds.offset(dx, dy); mAutoCompletePopup.resetRect(); } nativeScrollLayer(mCurrentScrollingLayerId, x, y); @@ -6095,8 +6094,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } startTouch(x, y, eventTime); if (mIsEditingText) { - mTouchInEditText = mEditTextContentBounds - .contains(contentX, contentY); + mTouchInEditText = mEditTextBounds.contains(contentX, contentY); } break; } @@ -6122,23 +6120,8 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc parent.requestDisallowInterceptTouchEvent(true); } if (deltaX != 0 || deltaY != 0) { - int handleX = contentX + - viewToContentDimension(mSelectDraggingOffset.x); - int handleY = contentY + - viewToContentDimension(mSelectDraggingOffset.y); - mSelectDraggingCursor.set(handleX, handleY); - boolean inCursorText = - mSelectDraggingTextQuad.containsPoint(handleX, handleY); - boolean inEditBounds = mEditTextContentBounds - .contains(handleX, handleY); - if (inCursorText || (mIsEditingText && !inEditBounds)) { - snapDraggingCursor(); - } + snapDraggingCursor(contentX, contentY); updateWebkitSelection(); - if (!inCursorText && mIsEditingText && inEditBounds) { - // Visually snap even if we have moved the handle. - snapDraggingCursor(); - } mLastTouchX = x; mLastTouchY = y; invalidate(); @@ -6752,22 +6735,23 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc mTouchMode = TOUCH_DONE_MODE; } - private void snapDraggingCursor() { - float scale = scaleAlongSegment( - mSelectDraggingCursor.x, mSelectDraggingCursor.y, - mSelectDraggingTextQuad.p4, mSelectDraggingTextQuad.p3); - // clamp scale to ensure point is on the bottom segment - scale = Math.max(0.0f, scale); - scale = Math.min(scale, 1.0f); - float newX = scaleCoordinate(scale, - mSelectDraggingTextQuad.p4.x, mSelectDraggingTextQuad.p3.x); - float newY = scaleCoordinate(scale, - mSelectDraggingTextQuad.p4.y, mSelectDraggingTextQuad.p3.y); - int x = Math.max(mEditTextContentBounds.left, - Math.min(mEditTextContentBounds.right, Math.round(newX))); - int y = Math.max(mEditTextContentBounds.top, - Math.min(mEditTextContentBounds.bottom, Math.round(newY))); - mSelectDraggingCursor.set(x, y); + private void snapDraggingCursor(int x, int y) { + x += viewToContentDimension(mSelectDraggingOffset.x); + y += viewToContentDimension(mSelectDraggingOffset.y); + if (mSelectDraggingTextQuad.containsPoint(x, y)) { + float scale = scaleAlongSegment(x, y, + mSelectDraggingTextQuad.p4, mSelectDraggingTextQuad.p3); + // clamp scale to ensure point is on the bottom segment + scale = Math.max(0.0f, scale); + scale = Math.min(scale, 1.0f); + float newX = scaleCoordinate(scale, + mSelectDraggingTextQuad.p4.x, mSelectDraggingTextQuad.p3.x); + float newY = scaleCoordinate(scale, + mSelectDraggingTextQuad.p4.y, mSelectDraggingTextQuad.p3.y); + mSelectDraggingCursor.set(Math.round(newX), Math.round(newY)); + } else { + mSelectDraggingCursor.set(x, y); + } } private static float scaleCoordinate(float scale, float coord1, float coord2) { @@ -7559,11 +7543,11 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } private int getMaxTextScrollX() { - return Math.max(0, mEditTextContent.width() - mEditTextContentBounds.width()); + return Math.max(0, mEditTextContent.width() - mEditTextBounds.width()); } private int getMaxTextScrollY() { - return Math.max(0, mEditTextContent.height() - mEditTextContentBounds.height()); + return Math.max(0, mEditTextContent.height() - mEditTextBounds.height()); } /** @@ -8471,10 +8455,10 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc mFieldPointer = initData.mFieldPointer; mInputConnection.initEditorInfo(initData); mInputConnection.setTextAndKeepSelection(initData.mText); - mEditTextContentBounds.set(initData.mContentBounds); + mEditTextBounds.set(initData.mNodeBounds); mEditTextLayerId = initData.mNodeLayerId; nativeMapLayerRect(mNativeClass, mEditTextLayerId, - mEditTextContentBounds); + mEditTextBounds); mEditTextContent.set(initData.mContentRect); relocateAutoCompletePopup(); } @@ -8547,10 +8531,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } break; - case UPDATE_CONTENT_BOUNDS: - mEditTextContentBounds.set((Rect) msg.obj); - break; - default: super.handleMessage(msg); break; diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index ec2cd5c4283ce..5549d890ca948 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -949,7 +949,7 @@ public final class WebViewCore { public String mName; public String mLabel; public int mMaxLength; - public Rect mContentBounds; + public Rect mNodeBounds; public int mNodeLayerId; public Rect mContentRect; } @@ -1299,13 +1299,7 @@ public final class WebViewCore { } else { xPercent = ((Float) msg.obj).floatValue(); } - Rect contentBounds = new Rect(); - nativeScrollFocusedTextInput(mNativeClass, xPercent, - msg.arg2, contentBounds); - Message.obtain( - mWebViewClassic.mPrivateHandler, - WebViewClassic.UPDATE_CONTENT_BOUNDS, - contentBounds).sendToTarget(); + nativeScrollFocusedTextInput(mNativeClass, xPercent, msg.arg2); break; case LOAD_URL: { @@ -2851,7 +2845,7 @@ public final class WebViewCore { * Scroll the focused textfield to (xPercent, y) in document space */ private native void nativeScrollFocusedTextInput(int nativeClass, - float xPercent, int y, Rect contentBounds); + float xPercent, int y); // these must be in document space (i.e. not scaled/zoomed). private native void nativeSetScrollOffset(int nativeClass,