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

Commit 21f9a360 authored by Chet Haase's avatar Chet Haase
Browse files

Fixes for setClipBounds()

The invalidate region when the clip bounds are set needs to encompass both
the old clip bounds and the new bounds, to make sure that the right area
of the view gets erased as well as drawn.

Also, we need to keep our own internal copy of the bounds, not just use the
instance passed into the setter.

Issue #8634060 setClipBounds() problems

Change-Id: I123c49cff16e3debe8866974a5612a4efd010de4
parent 5584737f
Loading
Loading
Loading
Loading
+18 −4
Original line number Diff line number Diff line
@@ -13380,18 +13380,32 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
    /**
     * Sets a rectangular area on this view to which the view will be clipped
     * it is drawn. Setting the value to null will remove the clip bounds
     * when it is drawn. Setting the value to null will remove the clip bounds
     * and the view will draw normally, using its full bounds.
     *
     * @param clipBounds The rectangular area, in the local coordinates of
     * this view, to which future drawing operations will be clipped.
     */
    public void setClipBounds(Rect clipBounds) {
        mClipBounds = clipBounds;
        if (clipBounds != null) {
            invalidate(clipBounds);
            if (clipBounds.equals(mClipBounds)) {
                return;
            }
            if (mClipBounds == null) {
                invalidate();
                mClipBounds = new Rect(clipBounds);
            } else {
                invalidate(Math.min(mClipBounds.left, clipBounds.left),
                        Math.min(mClipBounds.top, clipBounds.top),
                        Math.max(mClipBounds.right, clipBounds.right),
                        Math.max(mClipBounds.bottom, clipBounds.bottom));
                mClipBounds.set(clipBounds);
            }
        } else {
            if (mClipBounds != null) {
                invalidate();
                mClipBounds = null;
            }
        }
    }