doLayout method

  1. @override
void doLayout(
  1. Context context,
  2. TreeLayoutNode root,
  3. num width,
  4. num height,
)
override

Implementation

@override
void doLayout(Context context, TreeLayoutNode root, num width, num height) {
  num dx = width;
  num dy = height;
  _InnerNode t = _treeRoot(root);
  t.eachAfter(_firstWalk);
  t.parent!.m = -t.z;
  t.eachBefore(_secondWalk);

  if (diff) {
    root.eachBefore((node, b, c) {
      _sizeNode(node, dx, dy);
      return false;
    });
  } else {
    var left = root, right = root, bottom = root;
    root.eachBefore((node, b, c) {
      if (node.x < left.x) left = node;
      if (node.x > right.x) right = node;
      if (node.deep > bottom.deep) bottom = node;
      return false;
    });
    var s = left == right ? 1 : splitFun.call(left, right) / 2,
        tx = s - left.x,
        kx = dx / (right.x + s + tx),
        ky = dy / (jsOr(bottom.deep, 1));
    root.eachBefore((node, b, c) {
      node.x = (node.x + tx) * kx;
      node.y = node.deep * ky;
      return false;
    });
  }
}