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

Commit 5c4558fd authored by Aurélien Pomini's avatar Aurélien Pomini Committed by Android (Google) Code Review
Browse files

Merge "Correctly compute diffWidth and diffHeight." into main

parents eceb0e43 2cc2c57d
Loading
Loading
Loading
Loading
+27 −15
Original line number Diff line number Diff line
@@ -349,7 +349,7 @@ class WallpaperController {
        final Rect lastWallpaperBounds = wallpaperWin.getParentFrame();
        int screenWidth = lastWallpaperBounds.width();
        int screenHeight = lastWallpaperBounds.height();
        float screenRatio = ((float) screenWidth) / screenHeight;
        float screenRatio = (float) screenWidth / screenHeight;
        Point screenSize = new Point(screenWidth, screenHeight);

        WallpaperWindowToken token = wallpaperWin.mToken.asWallpaperToken();
@@ -399,20 +399,32 @@ class WallpaperController {
            Point bitmapSize = new Point(
                    wallpaperWin.mRequestedWidth, wallpaperWin.mRequestedHeight);
            SparseArray<Rect> cropHints = token.getCropHints();
            wallpaperFrame = mWallpaperCropUtils.getCrop(
                    screenSize, bitmapSize, cropHints, wallpaperWin.isRtl());

            cropZoom = wallpaperFrame.isEmpty() ? 1f
                    : ((float) screenHeight) / wallpaperFrame.height() / wallpaperWin.mVScale;

            // A positive x / y offset shifts the wallpaper to the right / bottom respectively.
            cropOffsetX = -wallpaperFrame.left
                    + (int) ((cropZoom - 1f) * wallpaperFrame.height() * screenRatio / 2f);
            cropOffsetY = -wallpaperFrame.top
                    + (int) ((cropZoom - 1f) * wallpaperFrame.height() / 2f);

            diffWidth = (int) (wallpaperFrame.width() * wallpaperWin.mHScale) - screenWidth;
            diffHeight = (int) (wallpaperFrame.height() * wallpaperWin.mVScale) - screenHeight;
            wallpaperFrame = bitmapSize.x <= 0 || bitmapSize.y <= 0 ? wallpaperWin.getFrame()
                    : mWallpaperCropUtils.getCrop(screenSize, bitmapSize, cropHints,
                            wallpaperWin.isRtl());
            int frameWidth = wallpaperFrame.width();
            int frameHeight = wallpaperFrame.height();
            float frameRatio = (float) frameWidth / frameHeight;

            // If the crop is proportionally wider/taller than the screen, scale it so that its
            // height/width matches the screen height/width, and use the additional width/height
            // for parallax (respectively).
            boolean scaleHeight = frameRatio >= screenRatio;
            cropZoom = wallpaperFrame.isEmpty() ? 1f : scaleHeight
                    ? (float) screenHeight / frameHeight / wallpaperWin.mVScale
                    : (float) screenWidth / frameWidth / wallpaperWin.mHScale;

            // The dimensions of the frame, without the additional width or height for parallax.
            float w = scaleHeight ? frameHeight * screenRatio : frameWidth;
            float h = scaleHeight ? frameHeight : frameWidth / screenRatio;

            // Note: a positive x/y offset shifts the wallpaper to the right/bottom respectively.
            cropOffsetX = -wallpaperFrame.left + (int) ((cropZoom - 1f) * w / 2f);
            cropOffsetY = -wallpaperFrame.top + (int) ((cropZoom - 1f) * h / 2f);

            // Available width or height for parallax
            diffWidth = (int) ((frameWidth - w) * wallpaperWin.mHScale);
            diffHeight = (int) ((frameHeight - h) * wallpaperWin.mVScale);
        } else {
            wallpaperFrame = wallpaperWin.getFrame();
            cropZoom = 1f;