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
This commit is contained in:
Robert Carr
2021-06-16 21:27:45 -07:00
parent 0a9650dcde
commit 0900271a8d

View File

@@ -5508,7 +5508,19 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
mSurfacePlacementNeeded = false;
transformFrameToSurfacePosition(mWindowFrames.mFrame.left, mWindowFrames.mFrame.top,
mSurfacePosition);
mSurfacePosition.offset(mXOffset, mYOffset);
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.