#nullable enable namespace Terminal.Gui; /// /// Represents a position that is anchored to the side of another view. /// /// /// /// This is a low-level API that is typically used internally by the layout system. Use the various static /// methods on the class to create objects instead. /// /// /// The View the position is anchored to. /// The side of the View the position is anchored to. public class PosView (View view, Side side) : Pos { /// /// Gets the View the position is anchored to. /// public View Target { get; } = view; /// /// Gets the side of the View the position is anchored to. /// public Side Side { get; } = side; /// public override bool Equals (object? other) { return other is PosView abs && abs.Target == Target && abs.Side == Side; } /// public override int GetHashCode () { return Target.GetHashCode (); } /// public override string ToString () { string sideString = Side switch { Side.Left => "left", Side.Top => "top", Side.Right => "right", Side.Bottom => "bottom", _ => "unknown" }; if (Target == null) { throw new NullReferenceException (nameof (Target)); } return $"View(side={sideString},target={Target})"; } internal override int GetAnchor (int size) { return Side switch { Side.Left => Target.Frame.X, Side.Top => Target.Frame.Y, Side.Right => Target.Frame.Right, Side.Bottom => Target.Frame.Bottom, _ => 0 }; } internal override bool ReferencesOtherViews () { return true; } }