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
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user