summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChet Haase <chet@google.com>2011-01-25 09:37:18 -0800
committerChet Haase <chet@google.com>2011-01-26 22:44:52 -0800
commit678e0adbdbac5fa3f25ca8371fdff1b3182f67e9 (patch)
treeb2e047fff8eaac69b0b3d0e4b4323d8a067d3e11
parente193c4688f9062e1d4dba97413788b6ffa122a55 (diff)
downloadframeworks_base-678e0adbdbac5fa3f25ca8371fdff1b3182f67e9.zip
frameworks_base-678e0adbdbac5fa3f25ca8371fdff1b3182f67e9.tar.gz
frameworks_base-678e0adbdbac5fa3f25ca8371fdff1b3182f67e9.tar.bz2
Fix display List bugs
Various property setters in View need to invalidate the parent's cache to get redrawn properly when accelerated with display lists. Also, fix logic around display lists and old-style Animations in ViewGroup. Change-Id: I70e1c2fa49e62228ee4a1301a006ce50bda4c305
-rw-r--r--api/11.xml11
-rw-r--r--api/current.xml11
-rw-r--r--core/java/android/view/View.java13
-rw-r--r--core/java/android/view/ViewGroup.java19
-rw-r--r--libs/hwui/LayerRenderer.cpp2
5 files changed, 23 insertions, 33 deletions
diff --git a/api/11.xml b/api/11.xml
index 232f62c4..2033787 100644
--- a/api/11.xml
+++ b/api/11.xml
@@ -215665,17 +215665,6 @@
visibility="public"
>
</method>
-<method name="getOnLayoutChangeListeners"
- return="java.util.List&lt;android.view.View.OnLayoutChangeListener&gt;"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="getOverScrollMode"
return="int"
abstract="false"
diff --git a/api/current.xml b/api/current.xml
index 5c3a8e4..248a1e2 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -215687,17 +215687,6 @@
visibility="public"
>
</method>
-<method name="getOnLayoutChangeListeners"
- return="java.util.List&lt;android.view.View.OnLayoutChangeListener&gt;"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="getOverScrollMode"
return="int"
abstract="false"
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 2e6664b..e2c346f 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -2937,13 +2937,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
}
/**
- * Gets the current list of listeners for layout changes.
- */
- public List<OnLayoutChangeListener> getOnLayoutChangeListeners() {
- return mOnLayoutChangeListeners;
- }
-
- /**
* Returns the focus-change callback registered for this view.
*
* @return The callback, or null if one is not registered.
@@ -6011,6 +6004,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
invalidate(true);
}
mBackgroundSizeChanged = true;
+ invalidateParentIfNeeded();
}
}
@@ -6077,6 +6071,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
invalidate(true);
}
mBackgroundSizeChanged = true;
+ invalidateParentIfNeeded();
}
}
@@ -6137,6 +6132,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
invalidate(true);
}
mBackgroundSizeChanged = true;
+ invalidateParentIfNeeded();
}
}
@@ -6194,6 +6190,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
invalidate(true);
}
mBackgroundSizeChanged = true;
+ invalidateParentIfNeeded();
}
}
@@ -6438,6 +6435,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
mPrivateFlags |= DRAWN; // force another invalidation with the new orientation
invalidate(false);
}
+ invalidateParentIfNeeded();
}
}
@@ -6476,6 +6474,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
mPrivateFlags |= DRAWN; // force another invalidation with the new orientation
invalidate(false);
}
+ invalidateParentIfNeeded();
}
}
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 9e5b23c..d4efdb6 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -17,6 +17,7 @@
package android.view;
import android.animation.LayoutTransition;
+import android.view.animation.AlphaAnimation;
import com.android.internal.R;
import com.android.internal.util.Predicate;
@@ -2364,6 +2365,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
DisplayList displayList = null;
Bitmap cache = null;
+ boolean hasDisplayList = false;
if (caching) {
if (!canvas.isHardwareAccelerated()) {
if (layerType != LAYER_TYPE_NONE) {
@@ -2376,12 +2378,13 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
child.buildDrawingCache(true);
cache = child.getDrawingCache(true);
} else if (layerType == LAYER_TYPE_NONE) {
- displayList = child.getDisplayList();
+ // Delay getting the display list until animation-driven alpha values are
+ // set up and possibly passed on to the view
+ hasDisplayList = true;
}
}
}
- final boolean hasDisplayList = displayList != null && displayList.isReady();
final boolean hasNoCache = cache == null || hasDisplayList;
final int restoreTo = canvas.save();
@@ -2472,6 +2475,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
}
+ if (hasDisplayList) {
+ displayList = child.getDisplayList();
+ }
+
if (hasNoCache) {
boolean layerRendered = false;
if (layerType == LAYER_TYPE_HARDWARE) {
@@ -2529,7 +2536,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
canvas.restoreToCount(restoreTo);
if (a != null && !more) {
- child.onSetAlpha(255);
+ if (!canvas.isHardwareAccelerated() && !a.getFillAfter()) {
+ child.onSetAlpha(255);
+ }
finishAnimatingView(child, a);
}
@@ -2538,6 +2547,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
// display lists to render, force an invalidate to allow the animation to
// continue drawing another frame
invalidate();
+ if (a instanceof AlphaAnimation) {
+ // alpha animations should cause the child to recreate its display list
+ child.invalidate();
+ }
}
child.mRecreateDisplayList = false;
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp
index 36709dc..ddbf785 100644
--- a/libs/hwui/LayerRenderer.cpp
+++ b/libs/hwui/LayerRenderer.cpp
@@ -43,7 +43,7 @@ void LayerRenderer::finish() {
generateMesh();
- LAYER_RENDERER_LOGD("Finished rendering into layer, fbo = %d", mLayer->mFbo);
+ LAYER_RENDERER_LOGD("Finished rendering into layer, fbo = %d", mLayer->fbo);
// No need to unbind our FBO, this will be taken care of by the caller
// who will invoke OpenGLRenderer::resume()