Skip to content

Commit

Permalink
6326: fix bug reported at Expensify#6518
Browse files Browse the repository at this point in the history
  • Loading branch information
railway17 committed Nov 30, 2021
1 parent 6d37102 commit 73afc16
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 13 deletions.
14 changes: 11 additions & 3 deletions src/components/ImageView/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class ImageView extends PureComponent {
this.canUseTouchScreen = canUseTouchScreen();
this.state = {
containerHeight: 0,
containerWidth: 0,
isZoomed: false,
isDragging: false,
isMouseDown: false,
Expand Down Expand Up @@ -68,6 +69,7 @@ class ImageView extends PureComponent {
const isScreenWiderThanImage = (this.props.windowWidth / width) > 1;
const isScreenTallerThanImage = (this.props.windowHeight / height) > 1;
const aspect = width / height;
let scale = this.state.zoomScale;
if (aspect > 1 && !isScreenWiderThanImage) {
// In case Width fit Screen width and Height not fit the Screen height
const fitRate = this.props.windowWidth / width;
Expand All @@ -84,8 +86,13 @@ class ImageView extends PureComponent {
imgRight = imgLeft + (fitRate * width);
}

//In case image loading is delayed than onLayout callback of the root View caused internet speed
if (scale == 0) {
scale = Math.min(this.state.containerWidth / width, this.state.containerHeight / height);
}

this.setState({
imgWidth: width, imgHeight: height, imageLeft: imgLeft, imageTop: imgTop, imageRight: imgRight, imageBottom: imgBottom,
imgWidth: width, zoomScale: scale, imgHeight: height, imageLeft: imgLeft, imageTop: imgTop, imageRight: imgRight, imageBottom: imgBottom,
});
}

Expand Down Expand Up @@ -168,6 +175,7 @@ class ImageView extends PureComponent {
const scale = imageHeight && imageWidth ? Math.min(width / imageWidth, height / imageHeight) : 0;
this.setState({
containerHeight: height,
containerWidth: width,
zoomScale: scale,
});
}}
Expand All @@ -180,9 +188,9 @@ class ImageView extends PureComponent {
>
<Pressable
style={{
...getZoomSizingStyle(this.state.isZoomed, this.state.imgWidth, this.state.imgHeight, this.state.zoomScale, this.state.containerHeight),
...getZoomSizingStyle(this.state.isZoomed, this.state.imgWidth, this.state.imgHeight, this.state.zoomScale, this.state.containerHeight, this.state.containerWidth),
...getZoomCursorStyle(this.state.isZoomed, this.state.isDragging),
...this.state.isZoomed ? styles.pRelative : styles.pAbsolute,
...this.state.isZoomed && this.state.zoomScale > 1 ? styles.pRelative : styles.pAbsolute,
...styles.flex1,
}}
onPressIn={(e) => {
Expand Down
36 changes: 26 additions & 10 deletions src/styles/styles.js
Original file line number Diff line number Diff line change
Expand Up @@ -2297,29 +2297,45 @@ function getZoomCursorStyle(isZoomed, isDragging) {
* @param {Number} imgHeight
* @param {Number} zoomScale
* @param {Number} containerHeight
* @param {Number} containerWidth
* @return {Object}
*/
function getZoomSizingStyle(isZoomed, imgWidth, imgHeight, zoomScale, containerHeight) {
function getZoomSizingStyle(isZoomed, imgWidth, imgHeight, zoomScale, containerHeight, containerWidth) {
if (imgWidth === 0 || imgHeight === 0) {
return {
height: isZoomed ? '250%' : '100%',
width: isZoomed ? '250%' : '100%',
};
}
const top = `${Math.max((containerHeight - imgHeight) / 2, 0)}px`;
const left = `${Math.max((containerWidth - imgWidth) / 2, 0)}px`;

// Return different size and offset style based on zoomScale and isZoom
if (isZoomed) {
if (zoomScale > 1) {
return {
height: `${imgHeight * zoomScale}px`,
width: `${imgWidth * zoomScale}px`,
};
}
return {
height: `${(imgHeight * zoomScale)}px`,
width: `${(imgWidth * zoomScale)}px`,
height: `${imgHeight}px`,
width: `${imgWidth}px`,
top,
left,
};
}
if (zoomScale > 1) {
return {
height: `${imgHeight}px`,
width: `${imgWidth}px`,
top,
left,
};
}

const top = `${(containerHeight - imgHeight) / 2}px`;
const left = `calc(50% - ${imgWidth / 2}px)`;
return {
height: `${imgHeight}px`,
width: `${imgWidth}px`,
top,
left,
height: `${imgHeight * zoomScale}px`,
width: `${imgWidth * zoomScale}px`,
};
}

Expand Down

0 comments on commit 73afc16

Please sign in to comment.