summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2014-02-20 15:06:17 -0800
committerChris Craik <ccraik@google.com>2014-02-21 16:59:56 -0800
commitff641477a75b7318a936f048e2bd87a1ae114b98 (patch)
tree424ea2afe48ae35e8e7fc23d70a64d0197bb89ab /core/java
parent550267f72b6217f797e7f93bb312ecbe6541ff49 (diff)
downloadframeworks_base-ff641477a75b7318a936f048e2bd87a1ae114b98.zip
frameworks_base-ff641477a75b7318a936f048e2bd87a1ae114b98.tar.gz
frameworks_base-ff641477a75b7318a936f048e2bd87a1ae114b98.tar.bz2
Damage IsolatedZVolume when shadows change
bug:12874322 Change-Id: I3dd92f551dfb00965ccd08647586f378f8949b1c
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/view/View.java35
1 files changed, 34 insertions, 1 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 0665264..e9082c3 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -11554,6 +11554,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
receiver.damageInParent();
}
}
+
+ // Damage the entire IsolatedZVolume recieving this view's shadow.
+ if (getCastsShadow() && getTranslationZ() != 0) {
+ damageIsolatedZVolume();
+ }
}
}
@@ -11581,6 +11586,29 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
/**
+ * Damage area of the screen covered by the current isolated Z volume
+ *
+ * This method will guarantee that any changes to shadows cast by a View
+ * are damaged on the screen for future redraw.
+ */
+ private void damageIsolatedZVolume() {
+ final AttachInfo ai = mAttachInfo;
+ if (ai != null) {
+ ViewParent p = getParent();
+ while (p != null) {
+ if (p instanceof ViewGroup) {
+ final ViewGroup vg = (ViewGroup) p;
+ if (vg.hasIsolatedZVolume()) {
+ vg.damageInParent();
+ return;
+ }
+ }
+ p = p.getParent();
+ }
+ }
+ }
+
+ /**
* Quick invalidation for View property changes (alpha, translationXY, etc.). We don't want to
* set any flags or handle all of the cases handled by the default invalidation methods.
* Instead, we just want to schedule a traversal in ViewRootImpl with the appropriate
@@ -11608,12 +11636,17 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
} else {
damageInParent();
}
+ if (invalidateParent && getCastsShadow() && getTranslationZ() != 0) {
+ damageIsolatedZVolume();
+ }
}
/**
* Tells the parent view to damage this view's bounds.
+ *
+ * @hide
*/
- private void damageInParent() {
+ protected void damageInParent() {
final AttachInfo ai = mAttachInfo;
final ViewParent p = mParent;
if (p != null && ai != null) {