summaryrefslogtreecommitdiff
path: root/RegionVisualiser/BoxDrawer.cs
diff options
context:
space:
mode:
authorMelodi <62381002+Melodi17@users.noreply.github.com>2025-08-27 21:22:55 +1000
committerMelodi <62381002+Melodi17@users.noreply.github.com>2025-08-27 21:22:55 +1000
commit634681ce2bb36cd686943102a0f071cd6a09049f (patch)
tree6710047aa231d50f57114bdd54a27c559fb20a73 /RegionVisualiser/BoxDrawer.cs
parent94ddc02e03ab942d0c881e29053e8df3d2940c30 (diff)
fixed bugs and revolutionized the universe
Diffstat (limited to 'RegionVisualiser/BoxDrawer.cs')
-rw-r--r--RegionVisualiser/BoxDrawer.cs49
1 files changed, 49 insertions, 0 deletions
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