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

Commit 292494a5 authored by Adrian Roos's avatar Adrian Roos Committed by Android (Google) Code Review
Browse files

Merge "Apply transformations while offsetting focused rects"

parents 67031a12 83e725da
Loading
Loading
Loading
Loading
+42 −8
Original line number Diff line number Diff line
@@ -5359,6 +5359,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
    void offsetRectBetweenParentAndChild(View descendant, Rect rect,
            boolean offsetFromChildToParent, boolean clipToBounds) {

        final RectF rectF = mAttachInfo != null ? mAttachInfo.mTmpTransformRect1 : new RectF();
        final Matrix inverse = mAttachInfo != null ? mAttachInfo.mTmpMatrix : new Matrix();

        // already in the same coord system :)
        if (descendant == this) {
            return;
@@ -5372,8 +5375,16 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
                && (theParent != this)) {

            if (offsetFromChildToParent) {
                rect.offset(descendant.mLeft - descendant.mScrollX,
                        descendant.mTop - descendant.mScrollY);
                rect.offset(-descendant.mScrollX, -descendant.mScrollY);

                if (!descendant.hasIdentityMatrix()) {
                    rectF.set(rect);
                    descendant.getMatrix().mapRect(rectF);
                    rectF.roundOut(rect);
                }

                rect.offset(descendant.mLeft, descendant.mTop);

                if (clipToBounds) {
                    View p = (View) theParent;
                    boolean intersected = rect.intersect(0, 0, p.mRight - p.mLeft,
@@ -5391,8 +5402,16 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
                        rect.setEmpty();
                    }
                }
                rect.offset(descendant.mScrollX - descendant.mLeft,
                        descendant.mScrollY - descendant.mTop);
                rect.offset(-descendant.mLeft, -descendant.mTop);

                if (!descendant.hasIdentityMatrix()) {
                    descendant.getMatrix().invert(inverse);
                    rectF.set(rect);
                    inverse.mapRect(rectF);
                    rectF.roundOut(rect);
                }

                rect.offset(descendant.mScrollX, descendant.mScrollY);
            }

            descendant = (View) theParent;
@@ -5403,11 +5422,26 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
        // to get into our coordinate space
        if (theParent == this) {
            if (offsetFromChildToParent) {
                rect.offset(descendant.mLeft - descendant.mScrollX,
                        descendant.mTop - descendant.mScrollY);
                rect.offset(-descendant.mScrollX, -descendant.mScrollY);

                if (!descendant.hasIdentityMatrix()) {
                    rectF.set(rect);
                    descendant.getMatrix().mapRect(rectF);
                    rectF.roundOut(rect);
                }

                rect.offset(descendant.mLeft, descendant.mTop);
            } else {
                rect.offset(descendant.mScrollX - descendant.mLeft,
                        descendant.mScrollY - descendant.mTop);
                rect.offset(-descendant.mLeft, -descendant.mTop);

                if (!descendant.hasIdentityMatrix()) {
                    descendant.getMatrix().invert(inverse);
                    rectF.set(rect);
                    inverse.mapRect(rectF);
                    rectF.roundOut(rect);
                }

                rect.offset(descendant.mScrollX, descendant.mScrollY);
            }
        } else {
            throw new IllegalArgumentException("parameter must be a descendant of this view");