Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 002d43d2 authored by George Mount's avatar George Mount
Browse files

Fix getChildVisibleRect to clip correctly.

Bug 18292516

getClipVisibleRect now takes into account clipChildren,
clipBounds, and clipToPadding.

Change-Id: I181cd68354e70767868e9edd56bf82a58357391d
parent 7d3d5feb
Loading
Loading
Loading
Loading
+23 −7
Original line number Diff line number Diff line
@@ -5039,14 +5039,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;
    }

    /**