#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.ToString (); 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; } }