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

Commit dd6a3351 authored by Garfield Tan's avatar Garfield Tan
Browse files

Fix issues related to clip rect used in animations

In particular this CL fixes two things:

1. Make clip rect in the coordinates of the target surface instead of
   the absoluate screen coordinates.
2. Avoid repetitively applying insets on the same instance of Rect that
   holds clip rect.

Bug: 232459537
Test: Animations of activity launches & dismisses look OK.
Change-Id: I311552f50780a000f4ef28098a2e3cc52889b147
parent 595fa85a
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -472,8 +472,9 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
                }

                final Rect clipRect = Transitions.isClosingType(change.getMode())
                        ? mRotator.getEndBoundsInStartRotation(change)
                        : change.getEndAbsBounds();
                        ? new Rect(mRotator.getEndBoundsInStartRotation(change))
                        : new Rect(change.getEndAbsBounds());
                clipRect.offsetTo(0, 0);

                if (delayedEdgeExtension) {
                    // If the edge extension needs to happen after the startTransition has been
@@ -973,7 +974,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {

    private static void applyTransformation(long time, SurfaceControl.Transaction t,
            SurfaceControl leash, Animation anim, Transformation transformation, float[] matrix,
            Point position, float cornerRadius, @Nullable Rect clipRect) {
            Point position, float cornerRadius, @Nullable Rect immutableClipRect) {
        anim.getTransformation(time, transformation);
        if (position != null) {
            transformation.getMatrix().postTranslate(position.x, position.y);
@@ -981,6 +982,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
        t.setMatrix(leash, transformation.getMatrix(), matrix);
        t.setAlpha(leash, transformation.getAlpha());

        final Rect clipRect = immutableClipRect == null ? null : new Rect(immutableClipRect);
        Insets extensionInsets = Insets.min(transformation.getInsets(), Insets.NONE);
        if (!extensionInsets.equals(Insets.NONE) && clipRect != null && !clipRect.isEmpty()) {
            // Clip out any overflowing edge extension