Fix tree rendering

Fixes some tree rendering problems where lines were not properly drawn
at some levels during some circumstances.

* Change the API back to only allow one root.
* Now uses a stack based approach to rendering instead of recursion.
* Removes the need for measuring the whole tree in advance.
  Leave this up to each child to render.
This commit is contained in:
Patrik Svensson
2021-01-09 18:34:07 +01:00
committed by Patrik Svensson
parent 0e0f4b4220
commit 8261b25e5c
34 changed files with 697 additions and 446 deletions

View File

@ -0,0 +1,23 @@
using System;
namespace Spectre.Console.Rendering
{
/// <summary>
/// An ASCII tree guide.
/// </summary>
public sealed class AsciiTreeGuide : TreeGuide
{
/// <inheritdoc/>
public override string GetPart(TreeGuidePart part)
{
return part switch
{
TreeGuidePart.Space => " ",
TreeGuidePart.Continue => "| ",
TreeGuidePart.Fork => "|-- ",
TreeGuidePart.End => "`-- ",
_ => throw new ArgumentOutOfRangeException(nameof(part), part, "Unknown tree part."),
};
}
}
}