From 0da1cc481353b22f76ea6e286b1a0556a632d40c Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sat, 6 May 2017 15:03:07 +0200 Subject: [PATCH] fix 3906 moved target cancellation up so (#3909) * moved target cancellation up * added tests --- src/canvas.class.js | 2 +- test/unit/canvas.js | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/canvas.class.js b/src/canvas.class.js index 68c34aba810..0ad1846ddd4 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -1101,6 +1101,7 @@ // first check current group (if one exists) // active group does not check sub targets like normal groups. // if active group just exits. + this.targets = []; if (activeGroup && !skipGroup && activeGroup === this._searchPossibleTargets([activeGroup], pointer)) { this._fireOverOutEvents(activeGroup, e); return activeGroup; @@ -1120,7 +1121,6 @@ } } - this.targets = []; var target = this._searchPossibleTargets(this._objects, pointer); if (e[this.altSelectionKey] && target && activeTarget && target !== activeTarget) { target = activeTarget; diff --git a/test/unit/canvas.js b/test/unit/canvas.js index a7137fc4b7c..3cd997f6f19 100644 --- a/test/unit/canvas.js +++ b/test/unit/canvas.js @@ -435,6 +435,37 @@ canvas.remove(group); }); + test('findTarget with subTargetCheck on activeObject', function() { + var rect = makeRect({ left: 0, top: 0 }), + rect2 = makeRect({ left: 30, top: 30}), target, + group = new fabric.Group([rect, rect2]); + + canvas.add(group); + canvas.setActiveObject(group); + group.subTargetCheck = true; + target = canvas.findTarget({ + clientX: 9, clientY: 9 + }); + equal(target, group, 'Should return the group'); + equal(canvas.targets[0], rect, 'should return the rect'); + + target = canvas.findTarget({ + clientX: 9, clientY: 9 + }); + + target = canvas.findTarget({ + clientX: 9, clientY: 9 + }); + + target = canvas.findTarget({ + clientX: 9, clientY: 9 + }); + + equal(canvas.targets.length, 1, 'multiple calls to subtarget should not add more to targets'); + + canvas.remove(group); + }); + test('findTarget with perPixelTargetFind', function() { ok(typeof canvas.findTarget == 'function'); var triangle = makeTriangle({ left: 0, top: 0 }), target;