diff options
author | Cary Clark <cary@android.com> | 2010-01-27 17:03:05 -0500 |
---|---|---|
committer | Cary Clark <cary@android.com> | 2010-02-17 13:18:45 -0500 |
commit | 855dd9e074c4dcb9c90deaeff1eb33d6394dd5da (patch) | |
tree | 20281771e75de017898ea04a129af4d8f47056c2 /core/java/android/webkit | |
parent | 900ec77d62ad1813ec7c38ddf13519a2f21e23f8 (diff) | |
download | frameworks_base-855dd9e074c4dcb9c90deaeff1eb33d6394dd5da.zip frameworks_base-855dd9e074c4dcb9c90deaeff1eb33d6394dd5da.tar.gz frameworks_base-855dd9e074c4dcb9c90deaeff1eb33d6394dd5da.tar.bz2 |
Add UI considerations to layers
companion fix is in external/webkit
- Add class to return view metrics.
- Draw cursor rings and find matches in proper order.
http://b/2369549
Diffstat (limited to 'core/java/android/webkit')
-rw-r--r-- | core/java/android/webkit/WebView.java | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index ae6c666..acb64aa 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -3105,11 +3105,26 @@ public class WebView extends AbsoluteLayout } } + private static class Metrics { + int mScrollX; + int mScrollY; + int mWidth; + int mHeight; + float mScale; + } + + private Metrics getViewMetrics() { + Metrics metrics = new Metrics(); + metrics.mScrollX = mScrollX; + metrics.mScrollY = computeVerticalScrollOffset(); + metrics.mWidth = getWidth(); + metrics.mHeight = getHeight() - getVisibleTitleHeight(); + metrics.mScale = mActualScale; + return metrics; + } + private void drawLayers(Canvas canvas) { if (mRootLayer != 0) { - int scrollY = computeVerticalScrollOffset(); - int viewHeight = getHeight() - getVisibleTitleHeight(); - // Currently for each draw we compute the animation values; // We may in the future decide to do that independently. if (nativeEvaluateLayersAnimations(mRootLayer)) { @@ -3119,9 +3134,7 @@ public class WebView extends AbsoluteLayout } // We can now draw the layers. - nativeDrawLayers(mRootLayer, mScrollX, scrollY, - getWidth(), viewHeight, - mActualScale, canvas); + nativeDrawLayers(mRootLayer, canvas); } } @@ -3209,7 +3222,15 @@ public class WebView extends AbsoluteLayout mWebViewCore.drawContentPicture(canvas, color, (animateZoom || mPreviewZoomOnly), animateScroll); - + boolean cursorIsInLayer = nativeCursorIsInLayer(); + if (drawCursorRing && !cursorIsInLayer) { + nativeDrawCursorRing(canvas); + } + // When the FindDialog is up, only draw the matches if we are not in + // the process of scrolling them into view. + if (mFindIsUp && !animateScroll) { + nativeDrawMatches(canvas); + } drawLayers(canvas); if (mNativeClass == 0) return; @@ -3232,12 +3253,7 @@ public class WebView extends AbsoluteLayout LONG_PRESS_TIMEOUT); } } - nativeDrawCursorRing(canvas); - } - // When the FindDialog is up, only draw the matches if we are not in - // the process of scrolling them into view. - if (mFindIsUp && !animateScroll) { - nativeDrawMatches(canvas); + if (cursorIsInLayer) nativeDrawCursorRing(canvas); } if (mFocusSizeChanged) { mFocusSizeChanged = false; @@ -5952,6 +5968,7 @@ public class WebView extends AbsoluteLayout case SET_ROOT_LAYER_MSG_ID: { int oldLayer = mRootLayer; mRootLayer = msg.arg1; + nativeSetRootLayer(mRootLayer); if (oldLayer > 0) { nativeDestroyLayer(oldLayer); } @@ -6715,6 +6732,7 @@ public class WebView extends AbsoluteLayout /* package */ native boolean nativeCursorMatchesFocus(); private native boolean nativeCursorIntersects(Rect visibleRect); private native boolean nativeCursorIsAnchor(); + private native boolean nativeCursorIsInLayer(); private native boolean nativeCursorIsTextInput(); private native Point nativeCursorPosition(); private native String nativeCursorText(); @@ -6728,10 +6746,7 @@ public class WebView extends AbsoluteLayout private native void nativeDrawCursorRing(Canvas content); private native void nativeDestroyLayer(int layer); private native boolean nativeEvaluateLayersAnimations(int layer); - private native void nativeDrawLayers(int layer, - int scrollX, int scrollY, - int width, int height, - float scale, Canvas canvas); + private native void nativeDrawLayers(int layer, Canvas canvas); private native void nativeDrawMatches(Canvas canvas); private native void nativeDrawSelectionPointer(Canvas content, float scale, int x, int y, boolean extendSelection); @@ -6781,6 +6796,7 @@ public class WebView extends AbsoluteLayout private native void nativeSetFindIsUp(); private native void nativeSetFollowedLink(boolean followed); private native void nativeSetHeightCanMeasure(boolean measure); + private native void nativeSetRootLayer(int layer); private native int nativeTextGeneration(); // Never call this version except by updateCachedTextfield(String) - // we always want to pass in our generation number. |