lock resize in group with a object mask

This commit is contained in:
hamid zarghami
2026-01-06 15:54:24 +03:30
parent 0b8d9ebddd
commit ff6912449e
2 changed files with 48 additions and 40 deletions
@@ -319,8 +319,12 @@ const ObjectRenderer = ({
}
};
// بررسی آیا object با mask گروه شده است
const isGroupedWithMask = obj.groupId && maskShape && maskShape.groupId === obj.groupId;
const handleGroupTransformEnd = () => {
if (!groupRef.current || !maskShape) return;
const node = groupRef.current;
const scaleX = node.scaleX();
const scaleY = node.scaleY();
@@ -398,25 +402,6 @@ const ObjectRenderer = ({
width: newWidth,
height: newHeight,
});
// اگر mask و object در یک گروه هستند، mask را هم scale کن
if (obj.groupId && maskShape.groupId === obj.groupId) {
// محاسبه موقعیت جدید mask
// موقعیت نسبی را scale می‌کنم و به موقعیت جدید object اضافه می‌کنم
// این باعث می‌شود که موقعیت نسبی mask نسبت به object حفظ شود
const newMaskX = finalX + (relativeX * scaleX);
const newMaskY = finalY + (relativeY * scaleY);
const newMaskWidth = (maskShape.width || 100) * scaleX;
const newMaskHeight = (maskShape.height || 100) * scaleY;
// به‌روزرسانی mask
onUpdate(maskShape.id, {
x: newMaskX,
y: newMaskY,
width: newMaskWidth,
height: newMaskHeight,
});
}
};
return (
@@ -434,7 +419,7 @@ const ObjectRenderer = ({
}}
onDragEnd={handleGroupDragEnd}
onDragMove={handleGroupDragMove}
onTransformEnd={handleGroupTransformEnd}
{...(!isGroupedWithMask && { onTransformEnd: handleGroupTransformEnd })}
>
{shapeElement}
<Group globalCompositeOperation={compositeOp} listening={false}>