From ca945a98715af28e5e3f92eb575ae24e3b5b8463 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Sat, 2 Nov 2024 11:09:12 +0000 Subject: [PATCH] More foolproof calculation --- src/view/com/lightbox/ImageViewing/index.tsx | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/view/com/lightbox/ImageViewing/index.tsx b/src/view/com/lightbox/ImageViewing/index.tsx index f5841427e4..e42ff34e6a 100644 --- a/src/view/com/lightbox/ImageViewing/index.tsx +++ b/src/view/com/lightbox/ImageViewing/index.tsx @@ -343,16 +343,25 @@ function interpolateTransform( const screenCenterY = screenSize.height / 2 const thumbnailCenterX = thumbnailDims.pageX + thumbnailDims.width / 2 const thumbnailCenterY = thumbnailDims.pageY + thumbnailDims.height / 2 - const initialTranslateX = thumbnailCenterX - screenCenterX const initialTranslateY = thumbnailCenterY - screenCenterY - let initialScale = thumbnailDims.width / screenSize.width const imageAspect = imageDims.width / imageDims.height const thumbAspect = thumbnailDims.width / thumbnailDims.height - if (imageAspect > 1 && thumbAspect < 1) { - initialScale = initialScale * imageAspect - } + const initialWidth = + imageAspect > thumbAspect + ? thumbnailDims.height * imageAspect + : thumbnailDims.width + const initialHeight = + imageAspect > thumbAspect + ? thumbnailDims.height + : thumbnailDims.width / imageAspect + const finalWidth = screenSize.width + const finalHeight = screenSize.width / imageAspect + const initialScale = Math.min( + initialWidth / finalWidth, + initialHeight / finalHeight, + ) const translateX = interpolate(progress, [0, 1], [initialTranslateX, 0]) const translateY = interpolate(progress, [0, 1], [initialTranslateY, 0])