Dependencies/Pixie/Pixie.Terminal/Render/PrefixBoxRenderer.cs
using WasmBox.Pixie.Markup;
using WasmBox.Pixie.Terminal.Devices;
namespace WasmBox.Pixie.Terminal.Render {
/// <summary>
/// A renderer for prefix-box nodes.
/// </summary>
public sealed class PrefixBoxRenderer : NodeRenderer {
private PrefixBoxRenderer() { }
/// <summary>
/// An instance of a prefix-box node renderer.
/// </summary>
public static readonly PrefixBoxRenderer Instance = new PrefixBoxRenderer();
/// <inheritdoc/>
public override bool CanRender(MarkupNode node) {
return node is PrefixBox;
}
/// <inheritdoc/>
public override void Render(MarkupNode node, RenderState state) {
var boxNode = (PrefixBox)node;
var newState = state;
var newTerm = LayoutTerminal.Align(
state.Terminal, Alignment.Left);
newState = newTerm.StartLayoutBox(state);
newState.Render(boxNode.Prefix);
int lineLength = newTerm.BufferedLineLength;
newTerm.Flush();
newTerm = LayoutTerminal.AddHorizontalMargin(
state.Terminal,
lineLength,
0);
newTerm.SuppressPadding();
newState = newState.WithTerminal(newTerm);
newState.Render(boxNode.Contents);
newTerm.EndLayoutBox();
}
}
}