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

Commit 0900271a authored by Robert Carr's avatar Robert Carr
Browse files

WindowState: Correct wallpaper scaling

A recent CL moved wallpaper scaling to the WindowState level
to avoid fighting with the BLAST adapter at the WindowState level.
It mistaken scaled from the top left corner of the wallpaper instead
of the center. This CL restores the old logic.

Bug: 190532253
Test: Existing tests pass
Change-Id: Ic809e69d1a2b57b771e0657ba98b508d062e58c9
parent 0a9650dc
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -5508,7 +5508,19 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
        mSurfacePlacementNeeded = false;
        transformFrameToSurfacePosition(mWindowFrames.mFrame.left, mWindowFrames.mFrame.top,
                mSurfacePosition);

        if (mWallpaperScale != 1f) {
            DisplayInfo displayInfo = getDisplayInfo();
            Matrix matrix = mTmpMatrix;
            matrix.setTranslate(mXOffset, mYOffset);
            matrix.postScale(mWallpaperScale, mWallpaperScale, displayInfo.logicalWidth / 2f,
                displayInfo.logicalHeight / 2f);
            matrix.getValues(mTmpMatrixArray);
            mSurfacePosition.offset(Math.round(mTmpMatrixArray[Matrix.MTRANS_X]),
                Math.round(mTmpMatrixArray[Matrix.MTRANS_Y]));
        } else {
            mSurfacePosition.offset(mXOffset, mYOffset);
        }

        // Freeze position while we're unrotated, so the surface remains at the position it was
        // prior to the rotation.