From ba726cb0cc2a6d6731b56e1de5accd830f32cc1c Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sun, 28 Jun 2020 13:26:13 +0200 Subject: [PATCH 1/3] render in case of single drag selection --- src/mixins/canvas_events.mixin.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mixins/canvas_events.mixin.js b/src/mixins/canvas_events.mixin.js index 3f6f4ca4f95..03a2ad68824 100644 --- a/src/mixins/canvas_events.mixin.js +++ b/src/mixins/canvas_events.mixin.js @@ -441,8 +441,14 @@ shouldRender = transform.actionPerformed; } if (!isClick) { + var targetWasActive = target === this._activeObject; this._maybeGroupObjects(e); - shouldRender || (shouldRender = this._shouldRender(target)); + if (!shouldRender) { + shouldRender = ( + this._shouldRender(target) || + (!targetWasActive && target === this._activeObject) + ); + } } if (target) { var corner = target._findTargetCorner( From 25b6f123c24ee5208fdae6300699e5deda64a7b6 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sun, 28 Jun 2020 14:39:37 +0200 Subject: [PATCH 2/3] a fix --- test/unit/canvas_events.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/test/unit/canvas_events.js b/test/unit/canvas_events.js index 5df84472062..eafb81cb1a4 100644 --- a/test/unit/canvas_events.js +++ b/test/unit/canvas_events.js @@ -239,6 +239,29 @@ canvas.__onMouseUp(e4); }); + QUnit.test('specific bug #6314 for partial intersection with drag', function(assert) { + var canvas = this.canvas = new fabric.Canvas(null, {enableRetinaScaling: false, width: 600, height: 600}); + var renderRequested = false; + var greenRect = new fabric.Rect({ + width: 300, + height: 300, + left: 50, + top: 0, + fill: 'green', + selectable: false + }); + canvas.add(greenRect); + canvas.__onMouseDown({ clientX: 25, clientY: 25, which: 1, target: canvas.upperCanvasEl }); + canvas.__onMouseMove({ clientX: 30, clientY: 30, which: 1, target: canvas.upperCanvasEl }); + canvas.requestRenderAll = function() { + console.log(arguments); + renderRequested = true; + }; + canvas.__onMouseUp({ clientX: 100, clientY: 50, which: 1, target: canvas.upperCanvasEl }); + assert.equal(renderRequested, true, 'a render has been requested'); + }); + + QUnit.test('mouse:up isClick = true', function(assert) { var e = { clientX: 30, clientY: 30, which: 1, target: canvas.upperCanvasEl }; var isClick = false; From 6965513b0f004a7e2df85edfe0a704e8d6d5fd45 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sun, 28 Jun 2020 15:01:17 +0200 Subject: [PATCH 3/3] ok test can also fail --- test/unit/canvas_events.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/test/unit/canvas_events.js b/test/unit/canvas_events.js index eafb81cb1a4..a2ad5bdc620 100644 --- a/test/unit/canvas_events.js +++ b/test/unit/canvas_events.js @@ -248,16 +248,15 @@ left: 50, top: 0, fill: 'green', - selectable: false }); canvas.add(greenRect); - canvas.__onMouseDown({ clientX: 25, clientY: 25, which: 1, target: canvas.upperCanvasEl }); - canvas.__onMouseMove({ clientX: 30, clientY: 30, which: 1, target: canvas.upperCanvasEl }); + canvas._onMouseDown({ clientX: 25, clientY: 25, which: 1, target: canvas.upperCanvasEl }); + canvas._onMouseMove({ clientX: 30, clientY: 30, which: 1, target: canvas.upperCanvasEl }); + canvas._onMouseMove({ clientX: 100, clientY: 50, which: 1, target: canvas.upperCanvasEl }); canvas.requestRenderAll = function() { - console.log(arguments); renderRequested = true; }; - canvas.__onMouseUp({ clientX: 100, clientY: 50, which: 1, target: canvas.upperCanvasEl }); + canvas._onMouseUp({ clientX: 100, clientY: 50, which: 1, target: canvas.upperCanvasEl }); assert.equal(renderRequested, true, 'a render has been requested'); });