From 09d13c6e7c8d3a99526a608ca2aff1554c5b4b91 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Mon, 20 Apr 2015 12:48:37 +0200 Subject: [PATCH 1/4] Fix sortedObjects --- src/static_canvas.class.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index 286927d0..47905ee6 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -902,7 +902,7 @@ sortedObjects.push(object); } }); - activeGroup._set('objects', sortedObjects); + activeGroup._set('_objects', sortedObjects); this._draw(ctx, activeGroup); } }, From a5e9ae8372e6efc609489fb1b7ffabf4b15aba65 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Tue, 21 Apr 2015 00:45:46 +0200 Subject: [PATCH 2/4] Added test for object sorting --- test/unit/canvas.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/unit/canvas.js b/test/unit/canvas.js index 3b66ec3d..b508db6c 100644 --- a/test/unit/canvas.js +++ b/test/unit/canvas.js @@ -853,6 +853,30 @@ equal(svg, svgWithActiveGroup); }); + test('active group objects reordering', function() { + var rect1 = new fabric.Rect({ width: 30, height: 30, left: 130, top: 130 }); + var rect2 = new fabric.Rect({ width: 50, height: 50, left: 100, top: 100 }); + var circle1 = new fabric.Circle({ radius: 10, left: 60, top: 60 }); + var circle2 = new fabric.Circle({ radius: 50, left: 50, top: 50 }); + canvas.add(rect1, rect2, circle1, circle2); + equal(canvas._objects[0], rect1); + equal(canvas._objects[1], rect2); + equal(canvas._objects[2], circle1); + equal(canvas._objects[3], circle2); + var aGroup = new fabric.Group([ rect2, circle2, rect1, circle1 ]);c + // before rendering objects are ordered in insert order + equal(aGroup._objects[0], rect2); + equal(aGroup._objects[1], circle2); + equal(aGroup._objects[2], rect1); + equal(aGroup._objects[3], circle1); + canvas.setActiveGroup(aGroup).renderAll(); + // after rendering objects are ordered in canvas stack order + equal(aGroup._objects[0], rect1); + equal(aGroup._objects[1], rect2); + equal(aGroup._objects[2], circle1); + equal(aGroup._objects[3], circle2); + }); + // test('dispose', function() { // function invokeEventsOnCanvas() { // // nextSibling because we need to invoke events on upper canvas From 344f4c9f416db19e54c975d61cf70b60a0734551 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Tue, 21 Apr 2015 08:56:38 +0200 Subject: [PATCH 3/4] Update static_canvas.class.js --- src/static_canvas.class.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index 47905ee6..6d1af43a 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -902,7 +902,8 @@ sortedObjects.push(object); } }); - activeGroup._set('_objects', sortedObjects); + // forEachObject reverses the object, so we reverse again + activeGroup._set('_objects', , sortedObjects.reverse()); this._draw(ctx, activeGroup); } }, From 906ee8684e2d6dbe8f759ad87a1b1054821cbad8 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Tue, 21 Apr 2015 09:09:16 +0200 Subject: [PATCH 4/4] Update static_canvas.class.js --- src/static_canvas.class.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index 6d1af43a..e7180d37 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -903,7 +903,7 @@ } }); // forEachObject reverses the object, so we reverse again - activeGroup._set('_objects', , sortedObjects.reverse()); + activeGroup._set('_objects', sortedObjects.reverse()); this._draw(ctx, activeGroup); } },