#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; }
}