summaryrefslogtreecommitdiffstats
path: root/core/java/android/view/ViewGroup.java
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2014-11-12 22:11:36 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-11-12 22:11:45 +0000
commit70cb4f3e7131cda1e58c1f6d422e296c4935289d (patch)
tree756494f5b4b79081281910cf2d5f7d17746dc3a7 /core/java/android/view/ViewGroup.java
parentc3631b985f51fcce97b0111cdd8297a58c44a5ec (diff)
parent002d43d29b84e8a4e55c995a350783e80132d61a (diff)
downloadframeworks_base-70cb4f3e7131cda1e58c1f6d422e296c4935289d.zip
frameworks_base-70cb4f3e7131cda1e58c1f6d422e296c4935289d.tar.gz
frameworks_base-70cb4f3e7131cda1e58c1f6d422e296c4935289d.tar.bz2
Merge "Fix getChildVisibleRect to clip correctly." into lmp-mr1-dev
Diffstat (limited to 'core/java/android/view/ViewGroup.java')
-rw-r--r--core/java/android/view/ViewGroup.java30
1 files changed, 23 insertions, 7 deletions
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 5c433c1..b47ca37 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -5023,7 +5023,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
rect.set(r);
if (!child.hasIdentityMatrix()) {
- child.getMatrix().mapRect(rect);
+ child.getMatrix().mapRect(rect);
}
int dx = child.mLeft - mScrollX;
@@ -5045,14 +5045,30 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
offset.y += dy;
}
- if (rect.intersect(0, 0, mRight - mLeft, mBottom - mTop)) {
- if (mParent == null) return true;
- r.set((int) (rect.left + 0.5f), (int) (rect.top + 0.5f),
- (int) (rect.right + 0.5f), (int) (rect.bottom + 0.5f));
- return mParent.getChildVisibleRect(this, r, offset);
+ boolean rectIsVisible = true;
+ if (mParent instanceof ViewGroup && ((ViewGroup)mParent).getClipChildren()) {
+ // clipChildren clips to the child's bounds
+ rectIsVisible = rect.intersect(0, 0, mRight - mLeft, mBottom - mTop);
}
- return false;
+ if (rectIsVisible && (mGroupFlags & CLIP_TO_PADDING_MASK) == CLIP_TO_PADDING_MASK) {
+ // Clip to padding
+ rectIsVisible = rect.intersect(mPaddingLeft, mPaddingTop,
+ mRight - mLeft - mPaddingLeft - mPaddingRight,
+ mBottom - mTop - mPaddingTop - mPaddingBottom);
+ }
+
+ if (rectIsVisible && mClipBounds != null) {
+ // Clip to clipBounds
+ rectIsVisible = rect.intersect(mClipBounds.left, mClipBounds.top, mClipBounds.right,
+ mClipBounds.bottom);
+ }
+ r.set((int) (rect.left + 0.5f), (int) (rect.top + 0.5f), (int) (rect.right + 0.5f),
+ (int) (rect.bottom + 0.5f));
+ if (rectIsVisible && mParent != null) {
+ rectIsVisible = mParent.getChildVisibleRect(this, r, offset);
+ }
+ return rectIsVisible;
}
/**