summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Romain Guy <romainguy@google.com> 2011-02-01 23:53:34 -0800
committer Romain Guy <romainguy@google.com> 2011-02-01 23:53:34 -0800
commitbeff8d83ef062975459f149ad0c632a3797d78ce (patch)
treec385cc6dc79a61c2e68cf9c72464ca038142caae
parent3a3133d876caf60ebff2176ad75c3dcf0259148d (diff)
Fix incorrect dirty rectangle transformation in hardware layers.
Bug #3413433 Change-Id: Iba201c7c4b4f11937797f3afcbf20c5a7395be25
-rw-r--r--core/java/android/view/ViewGroup.java14
-rw-r--r--libs/hwui/LayerRenderer.cpp1
2 files changed, 8 insertions, 7 deletions
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 5d5a09a484d2..09e1d89bb8a2 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -3537,6 +3537,12 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
// Make sure we do not set both flags at the same time
int opaqueFlag = isOpaque ? DIRTY_OPAQUE : DIRTY;
+ if (child.mLayerType != LAYER_TYPE_NONE) {
+ mPrivateFlags |= INVALIDATED;
+ mPrivateFlags &= ~DRAWING_CACHE_VALID;
+ child.mLocalDirtyRect.union(dirty);
+ }
+
final int[] location = attachInfo.mInvalidateChildLocation;
location[CHILD_LEFT_INDEX] = child.mLeft;
location[CHILD_TOP_INDEX] = child.mTop;
@@ -3550,12 +3556,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
(int) (boundingRect.bottom + 0.5f));
}
- if (child.mLayerType != LAYER_TYPE_NONE) {
- mPrivateFlags |= INVALIDATED;
- mPrivateFlags &= ~DRAWING_CACHE_VALID;
- child.mLocalDirtyRect.union(dirty);
- }
-
do {
View view = null;
if (parent instanceof View) {
@@ -3639,7 +3639,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
if (mLayerType != LAYER_TYPE_NONE) {
mLocalDirtyRect.union(dirty);
}
-
+
return mParent;
}
} else {
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp
index aebd2b7c696d..7379b639eed1 100644
--- a/libs/hwui/LayerRenderer.cpp
+++ b/libs/hwui/LayerRenderer.cpp
@@ -39,6 +39,7 @@ void LayerRenderer::prepareDirty(float left, float top, float right, float botto
mLayer->region.clear();
dirty.set(0.0f, 0.0f, mLayer->width, mLayer->height);
} else {
+ dirty.intersect(0.0f, 0.0f, mLayer->width, mLayer->height);
android::Rect r(dirty.left, dirty.top, dirty.right, dirty.bottom);
mLayer->region.subtractSelf(r);
}