mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-30 01:38:01 +01:00
Implemented AnchorEnd(); added .UseDimForOffset property
This commit is contained in:
@@ -139,8 +139,7 @@ public class Pos
|
||||
/// </example>
|
||||
public static Pos AnchorEnd ()
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
//return new PosAnchorEnd (0);
|
||||
return new PosAnchorEnd ();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -336,11 +335,30 @@ public class Pos
|
||||
internal class PosAnchorEnd : Pos
|
||||
{
|
||||
private readonly int _offset;
|
||||
public PosAnchorEnd () { UseDimForOffset = true; }
|
||||
public PosAnchorEnd (int offset) { _offset = offset; }
|
||||
public override bool Equals (object other) { return other is PosAnchorEnd anchorEnd && anchorEnd._offset == _offset; }
|
||||
public override int GetHashCode () { return _offset.GetHashCode (); }
|
||||
public override string ToString () { return $"AnchorEnd({_offset})"; }
|
||||
internal override int Anchor (int width) { return width - _offset; }
|
||||
|
||||
public bool UseDimForOffset { get; set; }
|
||||
|
||||
public override string ToString ()
|
||||
{
|
||||
if (UseDimForOffset)
|
||||
{
|
||||
return "AnchorEnd()";
|
||||
}
|
||||
return $"AnchorEnd({_offset})";
|
||||
}
|
||||
|
||||
internal override int Anchor (int width)
|
||||
{
|
||||
if (UseDimForOffset)
|
||||
{
|
||||
return width;
|
||||
}
|
||||
return width - _offset;
|
||||
}
|
||||
}
|
||||
|
||||
internal class PosCenter : Pos
|
||||
|
||||
@@ -1109,7 +1109,6 @@ public partial class View
|
||||
GetNewDimension (dim, newLocation, superviewDimension, autosizeDimension),
|
||||
0
|
||||
);
|
||||
|
||||
break;
|
||||
|
||||
case Pos.PosCombine combine:
|
||||
@@ -1148,7 +1147,19 @@ public partial class View
|
||||
|
||||
break;
|
||||
|
||||
case Pos.PosAnchorEnd:
|
||||
case Pos.PosAnchorEnd anchorEnd:
|
||||
newLocation = anchorEnd.Anchor (superviewDimension);
|
||||
if (anchorEnd.UseDimForOffset)
|
||||
{
|
||||
newLocation -= dim.Anchor (0);
|
||||
}
|
||||
|
||||
newDimension = Math.Max (
|
||||
GetNewDimension (dim, newLocation, superviewDimension, autosizeDimension),
|
||||
0
|
||||
);
|
||||
break;
|
||||
|
||||
case Pos.PosAbsolute:
|
||||
case Pos.PosFactor:
|
||||
case Pos.PosFunc:
|
||||
|
||||
@@ -107,6 +107,23 @@ public class AnchorEndTests (ITestOutputHelper output)
|
||||
Assert.Equal (expectedXPosition, view.Frame.X);
|
||||
}
|
||||
|
||||
// UseDimForOffset tests
|
||||
|
||||
[Fact]
|
||||
public void AnchorEnd_UseDimForOffset_CreatesCorrectInstance ()
|
||||
{
|
||||
var pos = Pos.AnchorEnd ();
|
||||
Assert.IsType<PosAnchorEnd> (pos);
|
||||
Assert.True (((PosAnchorEnd)pos).UseDimForOffset);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AnchorEnd_UseDimForOffset_SetsValue_Anchor_Is_Negative ()
|
||||
{
|
||||
Pos pos = Pos.AnchorEnd ();
|
||||
Assert.Equal (-10, -pos.Anchor (10));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData (0, 25)]
|
||||
[InlineData (10, 15)]
|
||||
@@ -114,14 +131,14 @@ public class AnchorEndTests (ITestOutputHelper output)
|
||||
[InlineData (11, 14)]
|
||||
[InlineData (25, 0)]
|
||||
[InlineData (26, -1)]
|
||||
public void AnchorEnd_No_Offset_PositionsViewOffsetByWidth (int width, int expectedXPosition)
|
||||
public void AnchorEnd_UseDimForOffset_PositionsViewOffsetByDim (int dim, int expectedXPosition)
|
||||
{
|
||||
// Arrange
|
||||
var superView = new View { Width = 25, Height = 25 };
|
||||
var view = new View
|
||||
{
|
||||
X = Pos.AnchorEnd (),
|
||||
Width = width,
|
||||
Width = dim,
|
||||
Height = 1
|
||||
};
|
||||
superView.Add (view);
|
||||
|
||||
Reference in New Issue
Block a user