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

Commit c9860172 authored by Riddle Hsu's avatar Riddle Hsu Committed by Android (Google) Code Review
Browse files

Merge "Make shell default animator respect clip rect" into main

parents 13c28f4b a37db3ab
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -48,6 +48,17 @@ flag {
    }
}

flag {
  name: "respect_animation_clip"
  namespace: "windowing_frontend"
  description: "Fix missing clip transformation of animation"
  bug: "376601866"
  is_fixed_read_only: true
  metadata {
    purpose: PURPOSE_BUGFIX
  }
}

flag {
  name: "edge_to_edge_by_default"
  namespace: "windowing_frontend"
+15 −5
Original line number Diff line number Diff line
@@ -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);
                }
            }
        }