summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-01-28 02:27:38 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-01-28 02:27:38 -0800
commitc38b7c820af52c4d5f6f51c750136d18d9897e5e (patch)
treec40bbcd97138b1e8d465b400090ca0243de082e5
parent256a09b2fa5cc06775818428de771c7957403452 (diff)
parent811ba6c6a270f3ba248a61f12c3112d85da8b99a (diff)
downloadframeworks_base-c38b7c820af52c4d5f6f51c750136d18d9897e5e.zip
frameworks_base-c38b7c820af52c4d5f6f51c750136d18d9897e5e.tar.gz
frameworks_base-c38b7c820af52c4d5f6f51c750136d18d9897e5e.tar.bz2
Merge "Implement the double tap to zoom animation with HW accleration." into honeycomb
-rw-r--r--core/java/android/webkit/WebView.java4
-rw-r--r--core/java/android/webkit/ZoomManager.java29
2 files changed, 30 insertions, 3 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 6363299..e26fd6f 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -3734,6 +3734,10 @@ public class WebView extends AbsoluteLayout
return;
}
+ if (canvas.isHardwareAccelerated()) {
+ mZoomManager.setHardwareAccelerated();
+ }
+
int saveCount = canvas.save();
if (mInOverScrollMode && !getSettings()
.getUseWebViewBackgroundForOverscrollBackground()) {
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index b47fe86..efbcd58 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -183,6 +183,9 @@ class ZoomManager {
private ScaleGestureDetector mScaleDetector;
private boolean mPinchToZoomAnimating = false;
+ private boolean mHardwareAccelerated = false;
+ private boolean mInHWAcceleratedZoom = false;
+
public ZoomManager(WebView webView, CallbackProxy callbackProxy) {
mWebView = webView;
mCallbackProxy = callbackProxy;
@@ -384,6 +387,10 @@ class ZoomManager {
scale = getReadingLevelScale();
}
+ if (mHardwareAccelerated) {
+ mInHWAcceleratedZoom = true;
+ }
+
setZoomScale(scale, reflowText);
if (oldScale != mActualScale) {
@@ -447,8 +454,18 @@ class ZoomManager {
- titleHeight, mWebView.getViewHeight(), Math.round(mWebView.getContentHeight()
* zoomScale)) + titleHeight) + mWebView.getScrollY();
- canvas.translate(tx, ty);
- canvas.scale(zoomScale, zoomScale);
+ if (mHardwareAccelerated) {
+ mWebView.updateScrollCoordinates(mWebView.getScrollX() - tx, mWebView.getScrollY() - ty);
+ setZoomScale(zoomScale, false);
+
+ if (mZoomScale == 0) {
+ // We've reached the end of the zoom animation.
+ mInHWAcceleratedZoom = false;
+ }
+ } else {
+ canvas.translate(tx, ty);
+ canvas.scale(zoomScale, zoomScale);
+ }
}
public boolean isZoomAnimating() {
@@ -493,12 +510,14 @@ class ZoomManager {
mActualScale = scale;
mInvActualScale = 1 / scale;
- if (!mWebView.drawHistory()) {
+ if (!mWebView.drawHistory() && !mInHWAcceleratedZoom) {
// If history Picture is drawn, don't update scroll. They will
// be updated when we get out of that mode.
// update our scroll so we don't appear to jump
// i.e. keep the center of the doc in the center of the view
+ // If this is part of a zoom on a HW accelerated canvas, we
+ // have already updated the scroll so don't do it again.
int oldX = mWebView.getScrollX();
int oldY = mWebView.getScrollY();
float ratio = scale * oldInvScale;
@@ -1020,4 +1039,8 @@ class ZoomManager {
return null;
}
}
+
+ public void setHardwareAccelerated() {
+ mHardwareAccelerated = true;
+ }
}