1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-27 15:54:39 +00:00

change drag move image scale (#8075)

This commit is contained in:
Michael An
2025-07-23 18:30:09 +08:00
committed by GitHub
parent 7e746d3269
commit 5c78232363
5 changed files with 31 additions and 12 deletions

View File

@@ -75,21 +75,29 @@ class FileContent extends React.Component {
if (transforms.length > 0) {
style.transform = transforms.join(' ');
}
if (scale > 1 && offset && typeof offset === 'object') {
if (offset.x !== undefined) style.left = offset.x;
if (offset.y !== undefined) style.top = offset.y;
if (offset && typeof offset === 'object') {
if (offset.x !== undefined) {
style.left = offset.x;
}
if (offset.y !== undefined) {
style.top = offset.y;
}
style.position = 'relative';
}
return (
<div className="file-view-content flex-1 image-file-view d-flex align-items-center justify-content-center">
{previousImage && (
<a href={previousImageUrl} id="img-prev" title={gettext('you can also press ← ')}><span className="sf3-font sf3-font-down rotate-90 d-inline-block"></span></a>
<a href={previousImageUrl} id="img-prev" title={gettext('you can also press ← ')}>
<span className="sf3-font sf3-font-down rotate-90 d-inline-block"></span>
</a>
)}
{nextImage && (
<a href={nextImageUrl} id="img-next" title={gettext('you can also press →')}><span className="sf3-font sf3-font-down rotate-270 d-inline-block"></span></a>
<a href={nextImageUrl} id="img-next" title={gettext('you can also press →')}>
<span className="sf3-font sf3-font-down rotate-270 d-inline-block"></span>
</a>
)}
<img src={thumbnailURL || rawPath} alt={fileName} id="image-view" onError={this.handleLoadFailure} style={ style } />
<img src={thumbnailURL || rawPath} alt={fileName} id="image-view" onError={this.handleLoadFailure} style={style} />
</div>
);
}

View File

@@ -139,7 +139,10 @@ class FileToolbar extends React.Component {
<div className="d-none d-md-flex justify-content-between align-items-center flex-shrink-0 ml-4">
{(fileType == 'Image' && !err) && (
<>
<ImageZoomer setImageScale={this.props.setImageScale} />
<ImageZoomer
setImageScale={this.props.setImageScale}
setDefaultPageFitScale={this.props.setDefaultPageFitScale}
/>
{['psd', 'heic'].indexOf(fileExt) == -1 && (
<IconButton
id="rotate-image"

View File

@@ -158,6 +158,7 @@ class FileView extends React.Component {
rotateImage={this.props.rotateImage}
lineWrapping={this.props.lineWrapping}
updateLineWrapping={this.props.updateLineWrapping}
setDefaultPageFitScale={this.props.setDefaultPageFitScale}
/>
}
</div>

View File

@@ -13,7 +13,7 @@ const SCALE_OPTIONS_2 = [
];
const DEFAULT_SCALE = SCALE_OPTIONS_2[0];
const ImageZoomer = ({ setImageScale }) => {
const ImageZoomer = ({ setImageScale, setDefaultPageFitScale }) => {
const [curScale, setScale] = useState(1);
const [curScaleText, setScaleText] = useState(DEFAULT_SCALE.text); // for the text shown in the input
@@ -59,7 +59,7 @@ const ImageZoomer = ({ setImageScale }) => {
if (!imageElement || (imageElement.clientWidth === 2 && imageElement.clientHeight === 2)) {
setTimeout(() => {
scaleImageToPageFit();
}, 100);
}, 1);
return;
}
const borderWidth = 1;
@@ -77,7 +77,8 @@ const ImageZoomer = ({ setImageScale }) => {
const scale = Math.min(hScale, vScale);
setScale(scale);
scaleImage(scale);
}, [setScale, scaleImage]);
setDefaultPageFitScale(scale);
}, [setScale, scaleImage, setDefaultPageFitScale]);
const onMenuItemClick = useCallback((value) => {
setSelectedScale(value);

View File

@@ -29,6 +29,7 @@ class InnerFileView extends React.Component {
dragOrigin: null,
};
this.imageContainerRef = React.createRef();
this.defaultPageFitScale = 1;
}
setImageScale = (scale) => {
@@ -38,6 +39,10 @@ class InnerFileView extends React.Component {
}));
};
setDefaultPageFitScale = (scale) => {
this.defaultPageFitScale = scale;
};
rotateImage = () => {
this.setState({
imageAngle: (this.state.imageAngle - 90) % 360 // counter-clockwise
@@ -53,7 +58,7 @@ class InnerFileView extends React.Component {
};
handleImageMouseDown = (e) => {
if (this.state.imageScale <= 1) return;
if (this.state.imageScale < this.defaultPageFitScale) return;
e.preventDefault();
this.setState({
isDragging: true,
@@ -97,7 +102,7 @@ class InnerFileView extends React.Component {
<div
ref={this.imageContainerRef}
className="d-flex w-100 h-100"
style={{ cursor: imageScale > 1 ? 'move' : 'default' }}
style={{ cursor: imageScale >= this.defaultPageFitScale ? 'move' : 'default' }}
onMouseDown={this.handleImageMouseDown}
onMouseMove={this.handleImageMouseMove}
onMouseUp={this.handleImageMouseUp}
@@ -131,6 +136,7 @@ class InnerFileView extends React.Component {
<FileView
content={content}
setImageScale={this.setImageScale}
setDefaultPageFitScale={this.setDefaultPageFitScale}
rotateImage={this.rotateImage}
/>
);