diff options
| author | 2011-09-21 18:20:30 -0700 | |
|---|---|---|
| committer | 2011-10-03 14:14:33 -0700 | |
| commit | bdfb3c5a69af0ae8ee725efff405ac13a66070bf (patch) | |
| tree | 159e7740c10adcde3737b59a3e49b953fc158bc7 | |
| parent | 7b1c30dfda65adfaf15fc03daf800b8d99a86f79 (diff) | |
Hardware accelerated button focus rings
Bug: 5353510
Change-Id: Ie6a2c509b5890d3d091465a36804648999228553
| -rw-r--r-- | core/java/android/webkit/WebView.java | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 370cce40b704..6421f96cf89e 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -4078,8 +4078,8 @@ public class WebView extends AbsoluteLayout boolean pressed = (mTouchMode == TOUCH_SHORTPRESS_START_MODE || mTouchMode == TOUCH_INIT_MODE || mTouchMode == TOUCH_SHORTPRESS_MODE); - nativeRecordButtons(hasFocus() && hasWindowFocus(), - (pressed && !USE_WEBKIT_RINGS) + recordButtons(canvas, + hasFocus() && hasWindowFocus(), (pressed && !USE_WEBKIT_RINGS) || mTrackballDown || mGotCenterDown, false); drawCoreAndCursorRing(canvas, mBackgroundColor, mDrawCursorRing && drawRings); @@ -5133,7 +5133,7 @@ public class WebView extends AbsoluteLayout .obtainMessage(LONG_PRESS_CENTER), LONG_PRESS_TIMEOUT); // Already checked mNativeClass, so we do not need to check it // again. - nativeRecordButtons(hasFocus() && hasWindowFocus(), true, true); + recordButtons(null, hasFocus() && hasWindowFocus(), true, true); if (!wantsKeyEvents) return true; } // Bubble up the key event as WebView doesn't handle it @@ -5561,7 +5561,7 @@ public class WebView extends AbsoluteLayout mDrawCursorRing = true; setFocusControllerActive(true); if (mNativeClass != 0) { - nativeRecordButtons(true, false, true); + recordButtons(null, true, false, true); } } else { if (!inEditingMode()) { @@ -5570,7 +5570,7 @@ public class WebView extends AbsoluteLayout mDrawCursorRing = false; setFocusControllerActive(false); } - // We do not call nativeRecordButtons here because we assume + // We do not call recordButtons here because we assume // that when we lost focus, or window focus, it got called with // false for the first parameter } @@ -5589,7 +5589,7 @@ public class WebView extends AbsoluteLayout mPrivateHandler.removeMessages(SWITCH_TO_LONGPRESS); mTouchMode = TOUCH_DONE_MODE; if (mNativeClass != 0) { - nativeRecordButtons(false, false, true); + recordButtons(null, false, false, true); } setFocusControllerActive(false); } @@ -5647,13 +5647,13 @@ public class WebView extends AbsoluteLayout if (hasWindowFocus()) { mDrawCursorRing = true; if (mNativeClass != 0) { - nativeRecordButtons(true, false, true); + recordButtons(null, true, false, true); } setFocusControllerActive(true); //} else { // The WebView has gained focus while we do not have // windowfocus. When our window lost focus, we should have - // called nativeRecordButtons(false...) + // called recordButtons(false...) } } else { // When we lost focus, unless focus went to the TextView (which is @@ -5661,7 +5661,7 @@ public class WebView extends AbsoluteLayout if (!inEditingMode()) { mDrawCursorRing = false; if (mNativeClass != 0) { - nativeRecordButtons(false, false, true); + recordButtons(null, false, false, true); } setFocusControllerActive(false); } @@ -6762,7 +6762,7 @@ public class WebView extends AbsoluteLayout if (mNativeClass == 0) { return false; } - nativeRecordButtons(hasFocus() && hasWindowFocus(), true, true); + recordButtons(null, hasFocus() && hasWindowFocus(), true, true); if (time - mLastCursorTime <= TRACKBALL_TIMEOUT && !mLastCursorBounds.equals(nativeGetCursorRingBounds())) { nativeSelectBestAt(mLastCursorBounds); @@ -9349,6 +9349,24 @@ public class WebView extends AbsoluteLayout return nativeTileProfilingGetFloat(frame, tile, key); } + /** + * Helper method to deal with differences between hardware and software rendering + */ + private void recordButtons(Canvas canvas, boolean focus, boolean pressed, + boolean inval) { + boolean isHardwareAccel = canvas != null + ? canvas.isHardwareAccelerated() + : isHardwareAccelerated(); + if (isHardwareAccel) { + // We never want to change button state if we are hardware accelerated, + // but we DO want to invalidate as necessary so that the GL ring + // can be drawn + nativeRecordButtons(false, false, inval); + } else { + nativeRecordButtons(focus, pressed, inval); + } + } + private native int nativeCacheHitFramePointer(); private native boolean nativeCacheHitIsPlugin(); private native Rect nativeCacheHitNodeBounds(); |