From 5e7f766e99c679110fa95501728bb81a8e396e58 Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Mon, 24 Jan 2011 22:35:56 -0800 Subject: [PATCH] Make nested hardware layers work again Change-Id: I97bde694ec1b712a1e010c8137919e6d64af3148 --- core/java/android/view/View.java | 9 ++++++--- core/java/android/view/ViewGroup.java | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 5538007965ace..65d2e11ae0e67 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -8087,7 +8087,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * * @return A HardwareLayer ready to render, or null if an error occurred. */ - HardwareLayer getHardwareLayer(Canvas currentCanvas) { + HardwareLayer getHardwareLayer() { if (mAttachInfo == null || mAttachInfo.mHardwareRenderer == null) { return null; } @@ -8107,7 +8107,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility mHardwareLayer.resize(width, height); } - final HardwareCanvas canvas = mHardwareLayer.start(mAttachInfo.mHardwareCanvas); + Canvas currentCanvas = mAttachInfo.mHardwareCanvas; + final HardwareCanvas canvas = mHardwareLayer.start(currentCanvas); + mAttachInfo.mHardwareCanvas = canvas; try { canvas.setViewport(width, height); // TODO: We should pass the dirty rect @@ -8131,7 +8133,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility canvas.restoreToCount(restoreCount); } finally { canvas.onPostDraw(); - mHardwareLayer.end(mAttachInfo.mHardwareCanvas); + mHardwareLayer.end(currentCanvas); + mAttachInfo.mHardwareCanvas = currentCanvas; } } diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 7c39201f34aa2..f198c4678daef 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -2475,7 +2475,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if (hasNoCache) { boolean layerRendered = false; if (layerType == LAYER_TYPE_HARDWARE) { - final HardwareLayer layer = child.getHardwareLayer(canvas); + final HardwareLayer layer = child.getHardwareLayer(); if (layer != null && layer.isValid()) { ((HardwareCanvas) canvas).drawHardwareLayer(layer, 0, 0, child.mLayerPaint); layerRendered = true;