Skip to content

Commit a783674

Browse files
committed
fix(canvas): commit ImageObject drag only on end, snap during move
Image drag fired onChange on every onDragMove, hammering the store with one update per mouse pixel and inconsistent with the shape/text/serial renderers in KonvaObjectInner. Split into a snap-during-drag handler and a single commit on drag end. The behavior now matches the rest of the canvas: visual feedback while dragging, one store update when the user releases.
1 parent 01ef568 commit a783674

1 file changed

Lines changed: 17 additions & 2 deletions

File tree

‎src/components/Canvas/ImageObject.tsx‎

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export function ImageObject({
2222
isSelected,
2323
onSelect,
2424
onChange,
25+
snap,
2526
}: Props) {
2627
const p = obj.props;
2728
const cached = getImage(p.imageId);
@@ -54,7 +55,21 @@ export function ImageObject({
5455
};
5556
}, [cached]);
5657

58+
// Snap during drag for visual feedback; commit only on dragEnd so
59+
// the store doesn't update on every mouse pixel. Mirrors the
60+
// pattern KonvaObjectInner uses for shape/text objects.
5761
const handleDragMove = (e: Konva.KonvaEventObject<DragEvent>) => {
62+
e.target.position({
63+
x:
64+
offsetX +
65+
dotsToPx(snap(pxToDots(e.target.x() - offsetX, scale, dpmm)), scale, dpmm),
66+
y:
67+
offsetY +
68+
dotsToPx(snap(pxToDots(e.target.y() - offsetY, scale, dpmm)), scale, dpmm),
69+
});
70+
};
71+
72+
const handleDragEnd = (e: Konva.KonvaEventObject<DragEvent>) => {
5873
onChange({
5974
x: pxToDots(e.target.x() - offsetX, scale, dpmm),
6075
y: pxToDots(e.target.y() - offsetY, scale, dpmm),
@@ -78,7 +93,7 @@ export function ImageObject({
7893
}
7994
onTap={() => onSelect(false)}
8095
onDragMove={handleDragMove}
81-
onDragEnd={handleDragMove}
96+
onDragEnd={handleDragEnd}
8297
/>
8398
);
8499
}
@@ -94,7 +109,7 @@ export function ImageObject({
94109
}
95110
onTap={() => onSelect(false)}
96111
onDragMove={handleDragMove}
97-
onDragEnd={handleDragMove}
112+
onDragEnd={handleDragEnd}
98113
>
99114
<Rect
100115
width={w}

0 commit comments

Comments
 (0)