diff options
author | George Mount <mount@google.com> | 2014-11-12 22:11:36 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-11-12 22:11:45 +0000 |
commit | 70cb4f3e7131cda1e58c1f6d422e296c4935289d (patch) | |
tree | 756494f5b4b79081281910cf2d5f7d17746dc3a7 /core/java/android/view/ViewGroup.java | |
parent | c3631b985f51fcce97b0111cdd8297a58c44a5ec (diff) | |
parent | 002d43d29b84e8a4e55c995a350783e80132d61a (diff) | |
download | frameworks_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.java | 30 |
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; } /** |