Skip to content

Commit

Permalink
change events order for transformer. fix #1724
Browse files Browse the repository at this point in the history
  • Loading branch information
lavrton committed Mar 3, 2024
1 parent fe8b7e0 commit b09ceb3
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 2 deletions.
7 changes: 5 additions & 2 deletions src/shapes/Transformer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1109,11 +1109,14 @@ export class Transformer extends Group {

const attrs = newLocalTransform.decompose();
node.setAttrs(attrs);
this._fire('transform', { evt: evt, target: node });
node._fire('transform', { evt: evt, target: node });
node.getLayer()?.batchDraw();
});
this.rotation(Util._getRotation(newAttrs.rotation));
// trigger transform event AFTER we update rotation
this._nodes.forEach((node) => {
this._fire('transform', { evt: evt, target: node });
node._fire('transform', { evt: evt, target: node });
});
this._resetTransformCache();
this.update();
this.getLayer()!.batchDraw();
Expand Down
74 changes: 74 additions & 0 deletions test/unit/Transformer-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4929,4 +4929,78 @@ describe('Transformer', function () {
assertAlmostEqual(rect.scaleX(), 1);
assertAlmostEqual(rect.scaleY(), 1);
});

it('should be able to prevent rotation in transform event', function () {
var stage = addStage();
var layer = new Konva.Layer();
stage.add(layer);

var rect = new Konva.Rect({
x: 55,
y: 55,
draggable: true,
width: 100,
height: 100,
fill: 'yellow',
});
layer.add(rect);

var tr = new Konva.Transformer({
nodes: [rect],
});
layer.add(tr);
layer.draw();

tr.on('transform', function (e) {
tr.rotation(0);
});

simulateMouseDown(tr, {
x: 100,
y: 2,
});
simulateMouseMove(tr, {
x: 110,
y: 2,
});
assert.equal(tr.rotation(), 0);
simulateMouseUp(tr, { x: 110, y: 2 });
});

// it('skip render on hit graph while transforming', function () {
// var stage = addStage();
// var layer = new Konva.Layer();
// stage.add(layer);

// var rect = new Konva.Rect({
// x: 55,
// y: 55,
// draggable: true,
// width: 100,
// height: 100,
// fill: 'yellow',
// });
// layer.add(rect);

// var tr = new Konva.Transformer({
// nodes: [rect],
// });
// layer.add(tr);
// layer.draw();

// simulateMouseDown(tr, {
// x: 100,
// y: 2,
// });
// simulateMouseMove(tr, {
// x: 110,
// y: 2,
// });
// const shape = layer.getIntersection({
// x: 100,
// y: 100,
// });
// assert.equal(shape, null);
// simulateMouseUp(tr, { x: 110, y: 2 });
// });
});

0 comments on commit b09ceb3

Please sign in to comment.