diff options
| author | Melodi <62381002+Melodi17@users.noreply.github.com> | 2025-08-27 21:22:55 +1000 |
|---|---|---|
| committer | Melodi <62381002+Melodi17@users.noreply.github.com> | 2025-08-27 21:22:55 +1000 |
| commit | 634681ce2bb36cd686943102a0f071cd6a09049f (patch) | |
| tree | 6710047aa231d50f57114bdd54a27c559fb20a73 /RegionVisualiser/BoxDrawer.cs | |
| parent | 94ddc02e03ab942d0c881e29053e8df3d2940c30 (diff) | |
fixed bugs and revolutionized the universe
Diffstat (limited to 'RegionVisualiser/BoxDrawer.cs')
| -rw-r--r-- | RegionVisualiser/BoxDrawer.cs | 49 |
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 |
