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

Commit 9736081c authored by Hongwei Wang's avatar Hongwei Wang Committed by Automerger Merge Worker
Browse files

Merge "Fix the animation position when launch into PiP" into tm-dev am: 83979ad7

parents 692c6cb1 83979ad7
Loading
Loading
Loading
Loading
+9 −4
Original line number Original line Diff line number Diff line
@@ -132,7 +132,11 @@ public abstract class PipContentOverlay {
            tx.show(mLeash);
            tx.show(mLeash);
            tx.setLayer(mLeash, Integer.MAX_VALUE);
            tx.setLayer(mLeash, Integer.MAX_VALUE);
            tx.setBuffer(mLeash, mSnapshot.getHardwareBuffer());
            tx.setBuffer(mLeash, mSnapshot.getHardwareBuffer());
            tx.setCrop(mLeash, mSourceRectHint);
            // Relocate the content to parentLeash's coordinates.
            tx.setPosition(mLeash, -mSourceRectHint.left, -mSourceRectHint.top);
            tx.setWindowCrop(mLeash,
                    (int) (mSourceRectHint.width() * mTaskSnapshotScaleX),
                    (int) (mSourceRectHint.height() * mTaskSnapshotScaleY));
            tx.setScale(mLeash, mTaskSnapshotScaleX, mTaskSnapshotScaleY);
            tx.setScale(mLeash, mTaskSnapshotScaleX, mTaskSnapshotScaleY);
            tx.reparent(mLeash, parentLeash);
            tx.reparent(mLeash, parentLeash);
            tx.apply();
            tx.apply();
@@ -149,10 +153,11 @@ public abstract class PipContentOverlay {
            // the atomicTx is committed along with the final WindowContainerTransaction.
            // the atomicTx is committed along with the final WindowContainerTransaction.
            final SurfaceControl.Transaction nonAtomicTx = new SurfaceControl.Transaction();
            final SurfaceControl.Transaction nonAtomicTx = new SurfaceControl.Transaction();
            final float scaleX = (float) destinationBounds.width()
            final float scaleX = (float) destinationBounds.width()
                    / mSnapshot.getHardwareBuffer().getWidth();
                    / mSourceRectHint.width();
            final float scaleY = (float) destinationBounds.height()
            final float scaleY = (float) destinationBounds.height()
                    / mSnapshot.getHardwareBuffer().getHeight();
                    / mSourceRectHint.height();
            final float scale = Math.max(scaleX, scaleY);
            final float scale = Math.max(
                    scaleX * mTaskSnapshotScaleX, scaleY * mTaskSnapshotScaleY);
            nonAtomicTx.setScale(mLeash, scale, scale);
            nonAtomicTx.setScale(mLeash, scale, scale);
            nonAtomicTx.setPosition(mLeash,
            nonAtomicTx.setPosition(mLeash,
                    -scale * mSourceRectHint.left / mTaskSnapshotScaleX,
                    -scale * mSourceRectHint.left / mTaskSnapshotScaleX,
+3 −1
Original line number Original line Diff line number Diff line
@@ -105,8 +105,10 @@ public class PipSurfaceTransactionHelper {
            SurfaceControl leash, Rect sourceRectHint,
            SurfaceControl leash, Rect sourceRectHint,
            Rect sourceBounds, Rect destinationBounds, Rect insets,
            Rect sourceBounds, Rect destinationBounds, Rect insets,
            boolean isInPipDirection) {
            boolean isInPipDirection) {
        mTmpSourceRectF.set(sourceBounds);
        mTmpDestinationRect.set(sourceBounds);
        mTmpDestinationRect.set(sourceBounds);
        // Similar to {@link #scale}, we want to position the surface relative to the screen
        // coordinates so offset the bounds to 0,0
        mTmpDestinationRect.offsetTo(0, 0);
        mTmpDestinationRect.inset(insets);
        mTmpDestinationRect.inset(insets);
        // Scale by the shortest edge and offset such that the top/left of the scaled inset source
        // Scale by the shortest edge and offset such that the top/left of the scaled inset source
        // rect aligns with the top/left of the destination bounds
        // rect aligns with the top/left of the destination bounds