drawArrowsLeftToRight method
dynamic
drawArrowsLeftToRight(
- Node<E> node,
- Canvas canvas
)
Implementation
drawArrowsLeftToRight(Node<E> node, Canvas canvas) {
List<Node<E>> subNodes = controller.getSubNodes(node);
if (node.hideNodes == false) {
if (allLeaf(subNodes)) {
for (var n in subNodes) {
final bool horizontal = n.position.dx > node.position.dx;
final bool vertical = n.position.dy > node.position.dy;
final bool c = vertical ? horizontal : !horizontal;
linePath.moveTo(
node.position.dx + controller.boxSize.width / 2,
node.position.dy + controller.boxSize.height / 2,
);
linePath.lineTo(
n.position.dx +
controller.boxSize.width / 2 +
(horizontal ? -1 : 1) * cornerRadius,
node.position.dy + controller.boxSize.height / 2,
);
linePath.arcToPoint(
Offset(
n.position.dx + controller.boxSize.width / 2,
node.position.dy +
controller.boxSize.height / 2 +
(vertical ? 1 : -1) * cornerRadius,
),
radius: Radius.circular(cornerRadius),
clockwise: c,
);
linePath.lineTo(
n.position.dx + controller.boxSize.width / 2,
n.position.dy + controller.boxSize.height / 2,
);
}
} else {
for (var n in subNodes) {
final minx = math.min(node.position.dx, n.position.dx);
final maxx = math.max(node.position.dx, n.position.dx);
final miny = math.min(node.position.dy, n.position.dy);
final maxy = math.max(node.position.dy, n.position.dy);
final dx = (maxx - minx) / 2 + controller.boxSize.width / 2;
bool horizontal = maxx == node.position.dx;
bool vertical = maxy == node.position.dy;
bool clockwise = horizontal ? !vertical : vertical;
linePath.moveTo(
node.position.dx + controller.boxSize.width / 2,
node.position.dy + controller.boxSize.height / 2,
);
linePath.lineTo(
minx + dx + (horizontal ? 1 : -1) * cornerRadius, //
node.position.dy + controller.boxSize.height / 2,
);
if (maxy - miny > cornerRadius * 2) {
linePath.arcToPoint(
Offset(
minx + dx,
node.position.dy +
controller.boxSize.height / 2 +
(vertical ? -1 : 1) * cornerRadius,
),
radius: Radius.circular(cornerRadius),
clockwise: !clockwise);
linePath.lineTo(
minx + dx,
n.position.dy +
controller.boxSize.height / 2 +
(vertical ? 1 : -1) * cornerRadius,
);
linePath.arcToPoint(
Offset(
minx + dx + (!horizontal ? 1 : -1) * cornerRadius,
n.position.dy + controller.boxSize.height / 2,
),
radius: Radius.circular(cornerRadius),
clockwise: clockwise);
}
linePath.lineTo(
n.position.dx + controller.boxSize.width / 2,
n.position.dy + controller.boxSize.height / 2,
);
drawArrowsLeftToRight(n, canvas);
}
}
}
}