Skip to content

Commit 56db1a9

Browse files
hippalectryon-0psychedelicious
authored andcommitted
Use proxyrect and setEntityPosition to sync transformer position
1 parent cf50e5e commit 56db1a9

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

invokeai/frontend/web/src/features/controlLayers/konva/CanvasEntity/CanvasEntityTransformer.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -548,14 +548,18 @@ export class CanvasEntityTransformer extends CanvasModuleBase {
548548
}
549549

550550
const pixelRect = this.$pixelRect.get();
551+
this.nudgePosition(-pixelRect.x, -pixelRect.y);
552+
};
551553

554+
nudgePosition = (x: number, y: number) => {
555+
// Nudge the position by (x, y) pixels
552556
const position = {
553-
x: this.konva.proxyRect.x() - pixelRect.x,
554-
y: this.konva.proxyRect.y() - pixelRect.y,
557+
x: this.konva.proxyRect.x() + x,
558+
y: this.konva.proxyRect.y() + y,
555559
};
556-
557-
this.log.trace({ position }, 'Position changed');
560+
// Push state to redux
558561
this.manager.stateApi.setEntityPosition({ entityIdentifier: this.parent.entityIdentifier, position });
562+
this.log.trace({ position }, 'Position changed');
559563
};
560564

561565
syncObjectGroupWithProxyRect = () => {

invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasMoveToolModule.ts

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ export class CanvasMoveToolModule extends CanvasModuleBase {
2020
this.manager = this.parent.manager;
2121
this.path = this.manager.buildPath(this);
2222
this.log = this.manager.buildLogger(this);
23-
2423
this.log.debug('Creating module');
2524
}
2625

@@ -45,18 +44,15 @@ export class CanvasMoveToolModule extends CanvasModuleBase {
4544
};
4645
const { key } = e;
4746
const selectedEntity = this.manager.stateApi.getSelectedEntityAdapter();
47+
const { x: offsetX = 0, y: offsetY = 0 } = offsets[key] || {};
4848

49-
if (!(selectedEntity && selectedEntity.$isInteractable.get() && $focusedRegion.get() === 'canvas')) {
49+
if (
50+
!(selectedEntity && selectedEntity.$isInteractable.get() && $focusedRegion.get() === 'canvas') ||
51+
(offsetX === 0 && offsetY === 0)
52+
) {
5053
return; // Early return if no entity is selected or it is disabled or canvas is not focused
5154
}
5255

53-
const { x: offsetX = 0, y: offsetY = 0 } = offsets[key] || {};
54-
55-
if (offsetX) {
56-
selectedEntity.konva.layer.x(selectedEntity.konva.layer.x() + offsetX);
57-
}
58-
if (offsetY) {
59-
selectedEntity.konva.layer.y(selectedEntity.konva.layer.y() + offsetY);
60-
}
56+
selectedEntity.transformer.nudgePosition(offsetX, offsetY);
6157
};
6258
}

0 commit comments

Comments
 (0)