public void Draw(CustomTreeNode node, bool isSelected) { double nodeSizeHalf = settings.NodeSize / 2.0f; double segmentHeightHalf = settings.SegmentHeight / 2.0f; double x, y; GetXY(node, out x, out y); // has at least one child if (node.ChildrenCount > 0) { // has at least one children draw half of vertical line above actualDrawer.DrawLine(x, x, y - segmentHeightHalf, y); // more children if (node.ChildrenCount > 1) { // horizonatal line actualDrawer.DrawLine(x, x + settings.SegmentWidth * node.ChildrenWidth, y - segmentHeightHalf, y - segmentHeightHalf); } } // not root draw half of vertical line bellow if (node.TopPadding > 0) { actualDrawer.DrawLine(x, x, y + settings.NodeSize, y + settings.NodeSize + segmentHeightHalf + (settings.SegmentHeight + settings.NodeSize) * (node.Id - node.ParentId - 1)); } if (isSelected) { actualDrawer.DrawWholeLineSelected(y - segmentHeightHalf, settings.SegmentHeight + settings.NodeSize); } actualDrawer.DrawNode(x - nodeSizeHalf, y, settings.NodeSize, false, node.Info); }