Merge "Revert "Keep selection handles in edit fields.""

This commit is contained in:
George Mount
2012-04-10 13:16:03 -07:00
committed by Android (Google) Code Review
3 changed files with 32 additions and 58 deletions

View File

@@ -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 =

View File

@@ -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;

View File

@@ -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,