am e38ba4ac: Fix gmail crossfade artifacts.

* commit 'e38ba4acbe6f1536997ffb98d662fc3eff07add8':
  Fix gmail crossfade artifacts.
This commit is contained in:
Chet Haase
2011-01-27 01:30:09 -08:00
committed by Android Git Automerger

View File

@@ -2263,13 +2263,14 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
boolean scalingRequired = false; boolean scalingRequired = false;
boolean caching; boolean caching;
int layerType = child.getLayerType(); int layerType = child.getLayerType();
final boolean hardwareAccelerated = canvas.isHardwareAccelerated();
if ((flags & FLAG_CHILDREN_DRAWN_WITH_CACHE) == FLAG_CHILDREN_DRAWN_WITH_CACHE || if ((flags & FLAG_CHILDREN_DRAWN_WITH_CACHE) == FLAG_CHILDREN_DRAWN_WITH_CACHE ||
(flags & FLAG_ALWAYS_DRAWN_WITH_CACHE) == FLAG_ALWAYS_DRAWN_WITH_CACHE) { (flags & FLAG_ALWAYS_DRAWN_WITH_CACHE) == FLAG_ALWAYS_DRAWN_WITH_CACHE) {
caching = true; caching = true;
if (mAttachInfo != null) scalingRequired = mAttachInfo.mScalingRequired; if (mAttachInfo != null) scalingRequired = mAttachInfo.mScalingRequired;
} else { } else {
caching = (layerType != LAYER_TYPE_NONE) || canvas.isHardwareAccelerated(); caching = (layerType != LAYER_TYPE_NONE) || hardwareAccelerated;
} }
if (a != null) { if (a != null) {
@@ -2351,7 +2352,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
return more; return more;
} }
if (canvas.isHardwareAccelerated()) { if (hardwareAccelerated) {
// Clear INVALIDATED flag to allow invalidation to occur during rendering, but // Clear INVALIDATED flag to allow invalidation to occur during rendering, but
// retain the flag's value temporarily in the mRecreateDisplayList flag // retain the flag's value temporarily in the mRecreateDisplayList flag
child.mRecreateDisplayList = (child.mPrivateFlags & INVALIDATED) == INVALIDATED; child.mRecreateDisplayList = (child.mPrivateFlags & INVALIDATED) == INVALIDATED;
@@ -2367,7 +2368,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
Bitmap cache = null; Bitmap cache = null;
boolean hasDisplayList = false; boolean hasDisplayList = false;
if (caching) { if (caching) {
if (!canvas.isHardwareAccelerated()) { if (!hardwareAccelerated) {
if (layerType != LAYER_TYPE_NONE) { if (layerType != LAYER_TYPE_NONE) {
layerType = LAYER_TYPE_SOFTWARE; layerType = LAYER_TYPE_SOFTWARE;
child.buildDrawingCache(true); child.buildDrawingCache(true);
@@ -2506,11 +2507,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
} }
} else { } else {
child.mPrivateFlags &= ~DIRTY_MASK; child.mPrivateFlags &= ~DIRTY_MASK;
// Skip drawing the display list into ours if we were just refreshing ((HardwareCanvas) canvas).drawDisplayList(displayList);
// it's content; we already have a reference to it in our display list
if (mRecreateDisplayList || mLayerType != LAYER_TYPE_NONE) {
((HardwareCanvas) canvas).drawDisplayList(displayList);
}
} }
} }
} else if (cache != null) { } else if (cache != null) {
@@ -2536,13 +2533,13 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
canvas.restoreToCount(restoreTo); canvas.restoreToCount(restoreTo);
if (a != null && !more) { if (a != null && !more) {
if (!canvas.isHardwareAccelerated() && !a.getFillAfter()) { if (!hardwareAccelerated && !a.getFillAfter()) {
child.onSetAlpha(255); child.onSetAlpha(255);
} }
finishAnimatingView(child, a); finishAnimatingView(child, a);
} }
if (more && canvas.isHardwareAccelerated()) { if (more && hardwareAccelerated) {
// invalidation is the trigger to recreate display lists, so if we're using // invalidation is the trigger to recreate display lists, so if we're using
// display lists to render, force an invalidate to allow the animation to // display lists to render, force an invalidate to allow the animation to
// continue drawing another frame // continue drawing another frame