fixed NodeResizer for various NodeOrigins
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { CoordinateExtent } from '../types';
|
||||
import { CoordinateExtent, NodeOrigin } from '../types';
|
||||
import { getPointerPosition } from '../utils';
|
||||
import { ControlPosition } from './types';
|
||||
|
||||
@@ -115,6 +115,7 @@ export function getDimensionsAfterResize(
|
||||
pointerPosition: ReturnType<typeof getPointerPosition>,
|
||||
boundaries: { minWidth: number; maxWidth: number; minHeight: number; maxHeight: number },
|
||||
keepAspectRatio: boolean,
|
||||
nodeOrigin: NodeOrigin,
|
||||
extent?: CoordinateExtent,
|
||||
childExtent?: CoordinateExtent
|
||||
) {
|
||||
@@ -132,6 +133,9 @@ export function getDimensionsAfterResize(
|
||||
const newWidth = startWidth + (affectsX ? -distX : distX);
|
||||
const newHeight = startHeight + (affectsY ? -distY : distY);
|
||||
|
||||
const originOffsetX = -nodeOrigin[0] * startWidth;
|
||||
const originOffsetY = -nodeOrigin[1] * startHeight;
|
||||
|
||||
// Check if maxWidth, minWWidth, maxHeight, minHeight are restricting the resize
|
||||
let clampX = getSizeClamp(newWidth, minWidth, maxWidth);
|
||||
let clampY = getSizeClamp(newHeight, minHeight, maxHeight);
|
||||
@@ -141,15 +145,15 @@ export function getDimensionsAfterResize(
|
||||
let xExtentClamp = 0;
|
||||
let yExtentClamp = 0;
|
||||
if (affectsX && distX < 0) {
|
||||
xExtentClamp = getLowerExtentClamp(startX + distX, extent[0][0]);
|
||||
xExtentClamp = getLowerExtentClamp(startX + distX + originOffsetX, extent[0][0]);
|
||||
} else if (!affectsX && distX > 0) {
|
||||
xExtentClamp = getUpperExtentClamp(startX + newWidth, extent[1][0]);
|
||||
xExtentClamp = getUpperExtentClamp(startX + newWidth + originOffsetX, extent[1][0]);
|
||||
}
|
||||
|
||||
if (affectsY && distY < 0) {
|
||||
yExtentClamp = getLowerExtentClamp(startY + distY, extent[0][1]);
|
||||
yExtentClamp = getLowerExtentClamp(startY + distY + originOffsetY, extent[0][1]);
|
||||
} else if (!affectsY && distY > 0) {
|
||||
yExtentClamp = getUpperExtentClamp(startY + newHeight, extent[1][1]);
|
||||
yExtentClamp = getUpperExtentClamp(startY + newHeight + originOffsetY, extent[1][1]);
|
||||
}
|
||||
|
||||
clampX = Math.max(clampX, xExtentClamp);
|
||||
@@ -187,10 +191,12 @@ export function getDimensionsAfterResize(
|
||||
if (extent) {
|
||||
let aspectExtentClamp = 0;
|
||||
if ((!affectsX && !affectsY) || (affectsX && !affectsY && isDiagonal)) {
|
||||
aspectExtentClamp = getUpperExtentClamp(startY + newWidth / aspectRatio, extent[1][1]) * aspectRatio;
|
||||
aspectExtentClamp =
|
||||
getUpperExtentClamp(startY + originOffsetY + newWidth / aspectRatio, extent[1][1]) * aspectRatio;
|
||||
} else {
|
||||
aspectExtentClamp =
|
||||
getLowerExtentClamp(startY + (affectsX ? distX : -distX) / aspectRatio, extent[0][1]) * aspectRatio;
|
||||
getLowerExtentClamp(startY + originOffsetY + (affectsX ? distX : -distX) / aspectRatio, extent[0][1]) *
|
||||
aspectRatio;
|
||||
}
|
||||
clampX = Math.max(clampX, aspectExtentClamp);
|
||||
}
|
||||
@@ -216,10 +222,12 @@ export function getDimensionsAfterResize(
|
||||
if (extent) {
|
||||
let aspectExtentClamp = 0;
|
||||
if ((!affectsX && !affectsY) || (affectsY && !affectsX && isDiagonal)) {
|
||||
aspectExtentClamp = getUpperExtentClamp(startX + newHeight * aspectRatio, extent[1][0]) / aspectRatio;
|
||||
aspectExtentClamp =
|
||||
getUpperExtentClamp(startX + newHeight * aspectRatio + originOffsetX, extent[1][0]) / aspectRatio;
|
||||
} else {
|
||||
aspectExtentClamp =
|
||||
getLowerExtentClamp(startX + (affectsY ? distY : -distY) * aspectRatio, extent[0][0]) / aspectRatio;
|
||||
getLowerExtentClamp(startX + (affectsY ? distY : -distY) * aspectRatio + originOffsetX, extent[0][0]) /
|
||||
aspectRatio;
|
||||
}
|
||||
clampY = Math.max(clampY, aspectExtentClamp);
|
||||
}
|
||||
@@ -258,10 +266,16 @@ export function getDimensionsAfterResize(
|
||||
}
|
||||
}
|
||||
|
||||
const width = startWidth + (affectsX ? -distX : distX);
|
||||
const height = startHeight + (affectsY ? -distY : distY);
|
||||
|
||||
const x = affectsX ? startX + distX : startX;
|
||||
const y = affectsY ? startY + distY : startY;
|
||||
|
||||
return {
|
||||
width: startWidth + (affectsX ? -distX : distX),
|
||||
height: startHeight + (affectsY ? -distY : distY),
|
||||
x: affectsX ? startX + distX : startX,
|
||||
y: affectsY ? startY + distY : startY,
|
||||
width: width,
|
||||
height: height,
|
||||
x: nodeOrigin[0] * distX * (!affectsX ? 1 : -1) + x,
|
||||
y: nodeOrigin[1] * distY * (!affectsY ? 1 : -1) + y,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user