diff options
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultSurfaceAnimator.java | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultSurfaceAnimator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultSurfaceAnimator.java index a1a9ca9fd2bd..4ea4613185e1 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultSurfaceAnimator.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultSurfaceAnimator.java @@ -136,6 +136,7 @@ public class DefaultSurfaceAnimator { @NonNull final Animation mAnim; @Nullable final Point mPosition; @Nullable final Rect mClipRect; + @Nullable private final Rect mAnimClipRect; final float mCornerRadius; final boolean mIsActivity; @@ -147,6 +148,7 @@ public class DefaultSurfaceAnimator { mPosition = (position != null && (position.x != 0 || position.y != 0)) ? position : null; mClipRect = (clipRect != null && !clipRect.isEmpty()) ? clipRect : null; + mAnimClipRect = mClipRect != null ? new Rect() : null; mCornerRadius = cornerRadius; mIsActivity = isActivity; } @@ -169,18 +171,26 @@ public class DefaultSurfaceAnimator { t.setAlpha(leash, transformation.getAlpha()); if (mClipRect != null) { - Rect clipRect = mClipRect; + boolean needCrop = false; + mAnimClipRect.set(mClipRect); + if (transformation.hasClipRect() + && com.android.window.flags.Flags.respectAnimationClip()) { + mAnimClipRect.intersectUnchecked(transformation.getClipRect()); + needCrop = true; + } final Insets extensionInsets = Insets.min(transformation.getInsets(), Insets.NONE); if (!extensionInsets.equals(Insets.NONE)) { // Clip out any overflowing edge extension. - clipRect = new Rect(mClipRect); - clipRect.inset(extensionInsets); - t.setCrop(leash, clipRect); + mAnimClipRect.inset(extensionInsets); + needCrop = true; } if (mCornerRadius > 0 && mAnim.hasRoundedCorners()) { // Rounded corner can only be applied if a crop is set. - t.setCrop(leash, clipRect); t.setCornerRadius(leash, mCornerRadius); + needCrop = true; + } + if (needCrop) { + t.setCrop(leash, mAnimClipRect); } } } |