Merge "Revert "Keep selection handles in edit fields.""
This commit is contained in:
@@ -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 =
|
||||
|
||||
@@ -847,7 +847,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;
|
||||
@@ -1231,7 +1231,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;
|
||||
@@ -3867,7 +3866,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);
|
||||
@@ -6096,8 +6095,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;
|
||||
}
|
||||
@@ -6123,23 +6121,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();
|
||||
@@ -6753,22 +6736,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) {
|
||||
@@ -7560,11 +7544,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());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -8472,10 +8456,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();
|
||||
}
|
||||
@@ -8548,10 +8532,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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user