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

Commit 8be07d91 authored by Hongwei Wang's avatar Hongwei Wang
Browse files

Fix the scale for entering PiP animation

The entering PiP animation used to overscale when entered from large
screen landscape mode.

Video: http://recall/-/aaaaaabFQoRHlzixHdtY/hMdoi9O3JEDSMvB9qqFNrc
Video: http://recall/-/aaaaaabFQoRHlzixHdtY/jpZQhYk17hPEnWnWtjeRR
Bug: 201824622
Test: Entering PiP from large screen, landscape and portrait, in both \
      button and gesture navigation mode. See also the video
Change-Id: Ic4a4c2a8e83f794a999d8a91c6ebdb03537011f3
parent 23161303
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -115,8 +115,8 @@ public class PipSurfaceTransactionHelper {
        // coordinates so offset the bounds to 0,0
        mTmpDestinationRect.offsetTo(0, 0);
        mTmpDestinationRect.inset(insets);
        // 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
        // Scale to the bounds no smaller than the destination and offset such that the top/left
        // of the scaled inset source rect aligns with the top/left of the destination bounds
        final float scale;
        if (isInPipDirection
                && sourceRectHint != null && sourceRectHint.width() < sourceBounds.width()) {
@@ -129,9 +129,8 @@ public class PipSurfaceTransactionHelper {
                    : (float) destinationBounds.height() / sourceBounds.height();
            scale = (1 - fraction) * startScale + fraction * endScale;
        } else {
            scale = sourceBounds.width() <= sourceBounds.height()
                    ? (float) destinationBounds.width() / sourceBounds.width()
                    : (float) destinationBounds.height() / sourceBounds.height();
            scale = Math.max((float) destinationBounds.width() / sourceBounds.width(),
                    (float) destinationBounds.height() / sourceBounds.height());
        }
        final float left = destinationBounds.left - insets.left * scale;
        final float top = destinationBounds.top - insets.top * scale;
+4 −5
Original line number Diff line number Diff line
@@ -85,13 +85,12 @@ public class PipSurfaceTransactionHelper {
        mTmpSourceRectF.set(sourceBounds);
        mTmpDestinationRect.set(sourceBounds);
        mTmpDestinationRect.inset(insets);
        // 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
        // Scale to the bounds no smaller than the destination and offset such that the top/left
        // of the scaled inset source rect aligns with the top/left of the destination bounds
        final float scale;
        if (sourceRectHint.isEmpty() || sourceRectHint.width() == sourceBounds.width()) {
            scale = sourceBounds.width() <= sourceBounds.height()
                    ? (float) destinationBounds.width() / sourceBounds.width()
                    : (float) destinationBounds.height() / sourceBounds.height();
            scale = Math.max((float) destinationBounds.width() / sourceBounds.width(),
                    (float) destinationBounds.height() / sourceBounds.height());
        } else {
            // scale by sourceRectHint if it's not edge-to-edge
            final float endScale = sourceRectHint.width() <= sourceRectHint.height()