advanced-cropper
Version:
The core of the advanced cropper libraries family
33 lines (30 loc) • 1.6 kB
JavaScript
import 'tslib';
import { ratio, moveToPositionRestrictions } from '../../service/utils.js';
import { isInitializedState, getTransformedImageSize, getAreaSizeRestrictions, getAreaPositionRestrictions } from '../../service/helpers.js';
import { copyState } from '../../state/copyState.js';
import '../../types/index.js';
import '../../state/setCoordinates.js';
import { fitCoordinates } from '../../service/fitCoordinates.js';
function preventZoom(state, settings, action) {
if (action && action.immediately && isInitializedState(state)) {
var result = copyState(state);
var imageSize = getTransformedImageSize(state);
var restrictionsSize = getAreaSizeRestrictions(state, settings);
var visibleAreaSize = {
width: Math.max(Math.min(imageSize.width, restrictionsSize.maxWidth), restrictionsSize.minWidth),
height: Math.max(Math.min(imageSize.height, restrictionsSize.maxHeight), restrictionsSize.minHeight),
};
if (ratio(result.boundary) > ratio(imageSize)) {
result.visibleArea.height = visibleAreaSize.height;
result.visibleArea.width = visibleAreaSize.height * ratio(result.boundary);
}
else {
result.visibleArea.width = visibleAreaSize.width;
result.visibleArea.height = visibleAreaSize.width / ratio(result.boundary);
}
result.visibleArea = moveToPositionRestrictions(result.visibleArea, getAreaPositionRestrictions(result, settings));
return fitCoordinates(result, settings);
}
return state;
}
export { preventZoom };