From 634681ce2bb36cd686943102a0f071cd6a09049f Mon Sep 17 00:00:00 2001 From: Melodi <62381002+Melodi17@users.noreply.github.com> Date: Wed, 27 Aug 2025 21:22:55 +1000 Subject: fixed bugs and revolutionized the universe --- RegionVisualiser/BoxDrawer.cs | 49 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 RegionVisualiser/BoxDrawer.cs (limited to 'RegionVisualiser/BoxDrawer.cs') diff --git a/RegionVisualiser/BoxDrawer.cs b/RegionVisualiser/BoxDrawer.cs new file mode 100644 index 0000000..77d0fc7 --- /dev/null +++ b/RegionVisualiser/BoxDrawer.cs @@ -0,0 +1,49 @@ +namespace RegionVisualiser; + +public static class BoxDrawer +{ + public static void DrawBox(string title, string body, int width = 0, string head = "", string tail = "") + { + int leftPad = Math.Max(head.Length, tail.Length); + var lines = body.Split('\n'); + int maxWidth = Math.Max(Math.Max(title.Length + 2, BoxDrawer.GetMaxWidth(lines) + 1), width); + + // Top border with centered title + string top = "┌" + BoxDrawer.CenterText($" {title} ", maxWidth, '─') + "┐"; + Console.Write(head); + Console.CursorLeft = leftPad; + Console.WriteLine(top); + + // Body lines, left aligned + foreach (var line in lines) + { + Console.CursorLeft = leftPad; + Console.WriteLine("│ " + line.PadRight(maxWidth - 1) + "│"); + } + + // Bottom border + string bottom = "└" + new string('─', maxWidth) + "┘"; + Console.Write(tail); + Console.CursorLeft = leftPad; + Console.WriteLine(bottom); + } + + private static int GetMaxWidth(string[] lines) + { + int width = 0; + foreach (var l in lines) + if (l.Length + 1 > width) width = l.Length + 1; + return width; + } + + private static string CenterText(string text, int width, char fill) + { + int totalPad = width - text.Length; + if (totalPad <= 0) return text; + + int left = totalPad / 2; + int right = totalPad - left; + + return new string(fill, left) + text + new string(fill, right); + } +} \ No newline at end of file -- cgit v1.3.1