Skip to content

Commit dd0db32

Browse files
authored
feat(elementTools.Control): add pointer event to setPosition() and resetPosition() signature (#2742)
1 parent 5168a3a commit dd0db32

File tree

3 files changed

+40
-6
lines changed

3 files changed

+40
-6
lines changed

packages/joint-core/src/elementTools/Control.mjs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ export const Control = ToolView.extend({
133133
const { clientX, clientY } = util.normalizeEvent(evt);
134134
const coords = paper.clientToLocalPoint(clientX, clientY);
135135
const relativeCoords = model.getRelativePointFromAbsolute(coords);
136-
this.setPosition(relatedView, relativeCoords, this);
136+
this.setPosition(relatedView, relativeCoords, evt);
137137
this.update();
138138
},
139139
onPointerUp: function(_evt) {
@@ -144,9 +144,9 @@ export const Control = ToolView.extend({
144144
this.toggleExtras(false);
145145
relatedView.model.stopBatch('control-move', { ui: true, tool: this.cid });
146146
},
147-
onPointerDblClick: function() {
147+
onPointerDblClick: function(evt) {
148148
const { relatedView } = this;
149-
this.resetPosition(relatedView, this);
149+
this.resetPosition(relatedView, evt);
150150
this.update();
151151
}
152152

packages/joint-core/test/jointjs/dia/elementTools.js

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,12 @@ QUnit.module('elementTools', function(hooks) {
154154
QUnit.test('position (angle ' + testCase.angle + ')', function(assert) {
155155
var angle = testCase.angle;
156156
var position = { x: 10, y: 10 };
157+
const setPositionSpy = sinon.spy();
158+
const resetPositionSpy = sinon.spy();
157159
var CustomControl = joint.elementTools.Control.extend({
158-
getPosition: function() { return position; }
160+
getPosition: function() { return position; },
161+
setPosition: setPositionSpy,
162+
resetPosition: resetPositionSpy
159163
});
160164
var control = new CustomControl;
161165
element.rotate(angle);
@@ -172,6 +176,36 @@ QUnit.module('elementTools', function(hooks) {
172176
resultingPosition = control.vel.getBBox({ target: paper.svg }).center();
173177
expectedPosition = element.position().offset(position).rotate(bbox.center(), -angle);
174178
assert.ok(resultingPosition.round().equals(expectedPosition.round()));
179+
// 3. `setPosition()`
180+
const clientX = 11;
181+
const clientY = 13;
182+
const relativePosition = element.getRelativePointFromAbsolute(
183+
paper.clientToLocalPoint(clientX, clientY)
184+
);
185+
simulate.mousedown({ clientX: 0, clientY: 0, el: control.el });
186+
simulate.mousemove({ clientX, clientY, el: control.el });
187+
simulate.mouseup({ clientX, clientY, el: control.el });
188+
assert.ok(setPositionSpy.calledOnce);
189+
assert.ok(
190+
setPositionSpy.calledWithExactly(
191+
elementView,
192+
sinon.match(relativePosition.toJSON()),
193+
sinon.match.instanceOf(joint.mvc.Event)
194+
)
195+
);
196+
assert.notOk(resetPositionSpy.called);
197+
// 4. `resetPosition()`
198+
setPositionSpy.resetHistory();
199+
resetPositionSpy.resetHistory();
200+
simulate.mouseevent({ type: 'dblclick', el: control.el });
201+
assert.ok(resetPositionSpy.calledOnce);
202+
assert.ok(
203+
resetPositionSpy.calledWithExactly(
204+
elementView,
205+
sinon.match.instanceOf(joint.mvc.Event)
206+
)
207+
);
208+
assert.notOk(setPositionSpy.called);
175209
});
176210
});
177211
});

packages/joint-core/types/joint.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4223,8 +4223,8 @@ export namespace elementTools {
42234223
constructor(opt?: T);
42244224

42254225
protected getPosition(view: dia.ElementView): dia.Point;
4226-
protected setPosition(view: dia.ElementView, coordinates: g.Point): void;
4227-
protected resetPosition(view: dia.ElementView): void;
4226+
protected setPosition(view: dia.ElementView, coordinates: g.Point, evt: dia.Event): void;
4227+
protected resetPosition(view: dia.ElementView, evt: dia.Event): void;
42284228

42294229
protected updateHandle(handleNode: SVGElement): void;
42304230
protected updateExtras(extrasNode: SVGElement): void;

0 commit comments

Comments
 (0)