From d643bb56fdf21973ea75984f0816b7dc024698df Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Tue, 1 Mar 2011 14:55:21 -0800 Subject: Correctly mark layers dirty when drawing WebView. Change-Id: I7ae0c3cfa0916d8fbeaf01e8da127c621a06a0f4 --- core/java/android/view/ViewGroup.java | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'core') diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 5c06151..7ecf281 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -2447,21 +2447,26 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } cache = child.getDrawingCache(true); } else { - if (layerType == LAYER_TYPE_SOFTWARE) { - child.buildDrawingCache(true); - cache = child.getDrawingCache(true); - } else if (layerType == LAYER_TYPE_NONE) { - // Delay getting the display list until animation-driven alpha values are - // set up and possibly passed on to the view - hasDisplayList = child.canHaveDisplayList(); + switch (layerType) { + case LAYER_TYPE_SOFTWARE: + child.buildDrawingCache(true); + cache = child.getDrawingCache(true); + break; + case LAYER_TYPE_NONE: + // Delay getting the display list until animation-driven alpha values are + // set up and possibly passed on to the view + hasDisplayList = child.canHaveDisplayList(); + break; } } } final boolean hasNoCache = cache == null || hasDisplayList; + final boolean offsetForScroll = cache == null && !hasDisplayList && + layerType != LAYER_TYPE_HARDWARE; final int restoreTo = canvas.save(); - if (cache == null && !hasDisplayList) { + if (offsetForScroll) { canvas.translate(cl - sx, ct - sy); } else { canvas.translate(cl, ct); @@ -2477,7 +2482,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager int transX = 0; int transY = 0; - if (cache == null && !hasDisplayList) { + if (offsetForScroll) { transX = -sx; transY = -sy; } @@ -2532,7 +2537,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } if ((flags & FLAG_CLIP_CHILDREN) == FLAG_CLIP_CHILDREN) { - if (cache == null && !hasDisplayList) { + if (offsetForScroll) { canvas.clipRect(sx, sy, sx + (cr - cl), sy + (cb - ct)); } else { if (!scalingRequired || cache == null) { -- cgit v1.1