Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
const y2 = event.touches[1].clientY - Math.round(top);
const pinchPointDistance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
const previousPointDistance = hasPinchPointDistance(value) ? value.pinchPointDistance : pinchPointDistance;
const svgPoint = getSVGPoint(value, (x1 + x2) / 2, (y1 + y2) / 2);
let distanceFactor = pinchPointDistance/previousPointDistance;
if (isZoomLevelGoingOutOfBounds(value, distanceFactor)) {
// Do not change translation and scale of value
return value;
}
if (event.cancelable) {
event.preventDefault();
}
let matrix = transform(
fromObject(value),
translate(svgPoint.x, svgPoint.y),
scale(distanceFactor, distanceFactor),
translate(-svgPoint.x, -svgPoint.y)
);
return set(value, set({
mode: MODE_ZOOMING,
...limitZoomLevel(value, matrix),
startX: null,
startY: null,
endX: null,
endY: null,
prePinchMode: value.prePinchMode ? value.prePinchMode : value.mode,
pinchPointDistance
}));
export function fitSelection(value, selectionSVGPointX, selectionSVGPointY, selectionWidth, selectionHeight) {
let {viewerWidth, viewerHeight} = value;
let scaleX = viewerWidth / selectionWidth;
let scaleY = viewerHeight / selectionHeight;
let scaleLevel = Math.min(scaleX, scaleY);
const matrix = transform(
scale(scaleLevel, scaleLevel), //2
translate(-selectionSVGPointX, -selectionSVGPointY) //1
);
if(isZoomLevelGoingOutOfBounds(value, scaleLevel / value.d)) {
// Do not allow scale and translation
return set(value, {
mode: MODE_IDLE,
startX: null,
startY: null,
endX: null,
endY: null
});
}
return set(value, {
zoom(factor: number): void {
this.transformationMatrix = transform(this.transformationMatrix, scale(factor, factor));
this.zoomChange.emit(this.zoomLevel);
this.updateTransform();
}
export function fitSelection(value, selectionSVGPointX, selectionSVGPointY, selectionWidth, selectionHeight) {
var viewerWidth = value.viewerWidth,
viewerHeight = value.viewerHeight;
var scaleX = viewerWidth / selectionWidth;
var scaleY = viewerHeight / selectionHeight;
var scaleLevel = Math.min(scaleX, scaleY);
var matrix = transform(scale(scaleLevel, scaleLevel), //2
translate(-selectionSVGPointX, -selectionSVGPointY) //1
);
return set(value, _extends({
mode: MODE_IDLE
}, matrix, {
startX: null,
startY: null,
endX: null,
endY: null
}));
}
function getRotationAround(image, angle) {
const middle = { x: image.width / 2, y: image.height / 2 };
return transform(
translate(middle.x, middle.y),
rotateDEG(angle),
translate(-middle.x, -middle.y)
);
}
y: (mrzRoi.roi.minY + y) * originalToTreatedRatio
}));
if (regionTransform) {
hull = applyToPoints(regionTransform, hull);
}
const beforeRotate = toCrop;
const afterRotate = beforeRotate.rotate(angle, {
interpolation: 'bilinear'
});
const widthDiff = (afterRotate.width - beforeRotate.width) / 2;
const heightDiff = (afterRotate.height - beforeRotate.height) / 2;
const transformation = transform(
translate(widthDiff, heightDiff),
getRotationAround(beforeRotate, angle)
);
const rotatedHull = applyToPoints(transformation, hull);
let minX = Infinity;
let minY = Infinity;
let maxX = -Infinity;
let maxY = -Infinity;
for (const point of rotatedHull) {
if (point.x < minX) minX = point.x;
if (point.x > maxX) maxX = point.x;
if (point.y < minY) minY = point.y;
if (point.y > maxY) maxY = point.y;
}
export default ({x, y, angle, scaleX, scaleY, width, height, disableScale = false}) => {
const changedWidth = width * (1 - scaleX);
const newWidth = width - changedWidth;
const changedHeight = height * (1 - scaleY);
const newHeight = height - changedHeight;
let transformMatrix;
if(disableScale === false){
transformMatrix = transform(
translate(roundTo(x + changedWidth / 2), roundTo(y + changedHeight / 2)),
rotate(angle * (Math.PI / 180)),
scale(scaleX, scaleY)
);
}else{
transformMatrix = transform(
translate(roundTo(x + changedWidth ), roundTo(y + changedHeight )),
rotate(angle * (Math.PI / 180)),
);
width = newWidth;
height = newHeight;
}
return {
element: {
width,
//x limit
let moveX = 0;
if (value.viewerWidth - x1 < 0)
moveX = value.viewerWidth - x1;
else if (x2 < 0) moveX = -x2;
//y limit
let moveY = 0;
if (value.viewerHeight - y1 < 0)
moveY = value.viewerHeight - y1;
else if (y2 < 0) moveY = -y2;
//apply limits
matrix = transform(
translate(moveX, moveY),
matrix
)
}
return set(value, {
mode: MODE_IDLE,
...matrix,
}, ACTION_PAN);
}