fabric.js group issues

Used in documentation (jsdoc tag)

by Hooman Askari

HTML

<script src="https://rawgithub.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="c" width="400" height="300"></canvas>

<small> select all circles and hit the button </small>
<br>
<br>
<button id="distribute">  distribute </button>

CSS

canvas {
    border: 1px solid #999;
}

JavaScript

fabric.Object.prototype.originX = "center";
fabric.Object.prototype.originY = "center";

var canvas = window._canvas = new fabric.Canvas('c');

var circle1 = new fabric.Circle({
  radius: 30,  fill: 'red',  left: 50, top: 70,  originX: "left",  originY: "top"
});

var circle2 = new fabric.Circle({
  radius: 40,  fill: 'green',  left: 200, top: 100,  originX: "left",  originY: "top"});

var circle3 = new fabric.Circle({
  radius: 30,  fill: 'blue',  left: 300, top: 150,  originX: "left",  originY: "top"
});

    canvas.add(circle1);
    canvas.add(circle2);
    canvas.add(circle3);

$('#distribute').click(function () {
   var group = canvas.getActiveObject();
    var items = canvas.getActiveObject()._objects,
    newDim = getNewViewDimensions(group, 'horizontal');
    group.set({
      // width: newDim.width + (2 * 0),
      // height: newDim.height + (items.length - 1) * 10 + (2 * 0)
    });
    for (var i = 0; i < items.length; i++) {
      if (i == 0) {
        items[i].set({
          left: -group.width / 2 + 0,
          top: -group.height / 2 + 0
        });
      } else {
        items[i].set({
          left: items[i - 1].left,
          top: items[i - 1].top + items[i - 1].height
        });
      }
    }
    group.addWithUpdate();
    canvas.renderAll();
});

 function getNewViewDimensions(group, val) {
    var objects = canvas.getActiveObject()._objects, minWidth = 0, minHeight = 0, w, h;
    switch (val) {
      case 'vertical':
        for (i = 0; i < objects.length; i++) {
          minWidth += objects[i].width * objects[i].scaleX;
          h = objects[i].height * objects[i].scaleY;
          if (h > minHeight) {
            minHeight = h;
          }
        }
        break;
      case 'horizontal':
        for (var i = 0; i < objects.length; i++) {
          minHeight += objects[i].height * objects[i].scaleY;
          w = objects[i].width * objects[i].scaleX;
          if (w > minWidth) {
            minWidth = w;
          }
        }
       ...