Dim.Fill now takes a Dim, instead of an int

This commit is contained in:
Tig
2024-09-01 09:26:42 -06:00
parent d4055732e6
commit 4fb7d04dd9
7 changed files with 40 additions and 21 deletions

View File

@@ -119,12 +119,18 @@ public abstract record Dim : IEqualityOperators<Dim, Dim, bool>
Style: style);
}
/// <summary>
/// Creates a <see cref="Dim"/> object that fills the dimension, leaving no margin.
/// </summary>
/// <returns>The Fill dimension.</returns>
public static Dim? Fill () { return new DimFill (0); }
/// <summary>
/// Creates a <see cref="Dim"/> object that fills the dimension, leaving the specified margin.
/// </summary>
/// <returns>The Fill dimension.</returns>
/// <param name="margin">Margin to use.</param>
public static Dim? Fill (int margin = 0) { return new DimFill (margin); }
public static Dim? Fill (Dim margin) { return new DimFill (margin); }
/// <summary>
/// Creates a function <see cref="Dim"/> object that computes the dimension by executing the provided function.

View File

@@ -9,10 +9,10 @@ namespace Terminal.Gui;
/// methods on the <see cref="Dim"/> class to create <see cref="Dim"/> objects instead.
/// </remarks>
/// <param name="Margin">The margin to not fill.</param>
public record DimFill (int Margin) : Dim
public record DimFill (Dim Margin) : Dim
{
/// <inheritdoc/>
public override string ToString () { return $"Fill({Margin})"; }
internal override int GetAnchor (int size) { return size - Margin; }
internal override int GetAnchor (int size) { return size - Margin.GetAnchor(0); }
}

View File

@@ -32,7 +32,7 @@ internal class KeyBindingsDialog : Dialog
_commandsListView = new ListView
{
Width = Dim.Percent (50),
Height = Dim.Fill () - Dim.Func (() => IsInitialized ? Subviews.First (view => view.Y.Has<PosAnchorEnd> (out _)).Frame.Height : 1),
Height = Dim.Fill (Dim.Func (() => IsInitialized ? Subviews.First (view => view.Y.Has<PosAnchorEnd> (out _)).Frame.Height : 1)),
Source = new ListWrapper<Command> (_commands),
SelectedItem = 0
};

View File

@@ -127,15 +127,28 @@ public class DimFillTests (ITestOutputHelper output)
{
var testMargin = 0;
Dim dim = Dim.Fill ();
Assert.Equal ($"Fill({testMargin})", dim.ToString ());
Assert.Equal (testMargin, dim!.GetAnchor(0));
testMargin = 0;
dim = Dim.Fill (testMargin);
Assert.Equal ($"Fill({testMargin})", dim.ToString ());
Assert.Equal (testMargin, dim!.GetAnchor (0));
testMargin = 5;
dim = Dim.Fill (testMargin);
Assert.Equal ($"Fill({testMargin})", dim.ToString ());
Assert.Equal (-testMargin, dim!.GetAnchor (0));
}
[Fact]
public void DimFill_Margin_Is_Dim_SetsValue ()
{
Dim testMargin = Dim.Func (() => 0);
Dim dim = Dim.Fill (testMargin);
Assert.Equal (0, dim!.GetAnchor (0));
testMargin = Dim.Func (() => 5);
dim = Dim.Fill (testMargin);
Assert.Equal (-5, dim!.GetAnchor (0));
}
[Fact]

View File

@@ -315,7 +315,7 @@ public class DimTests
Assert.Equal (49, f1.Frame.Width); // 50-1=49
Assert.Equal (5, f1.Frame.Height);
Assert.Equal ("Fill(0)", f2.Width.ToString ());
Assert.Equal ("Fill(Absolute(0))", f2.Width.ToString ());
Assert.Equal ("Absolute(5)", f2.Height.ToString ());
Assert.Equal (49, f2.Frame.Width); // 50-1=49
Assert.Equal (5, f2.Frame.Height);
@@ -325,7 +325,7 @@ public class DimTests
#else
Assert.Equal ($"Combine(View(Width,FrameView(){f1.Border.Frame})-Absolute(2))", v1.Width.ToString ());
#endif
Assert.Equal ("Combine(Fill(0)-Absolute(2))", v1.Height.ToString ());
Assert.Equal ("Combine(Fill(Absolute(0))-Absolute(2))", v1.Height.ToString ());
Assert.Equal (47, v1.Frame.Width); // 49-2=47
Assert.Equal (89, v1.Frame.Height); // 98-5-2-2=89
@@ -340,7 +340,7 @@ public class DimTests
#endif
);
#if DEBUG
Assert.Equal ("Combine(Fill(0)-Absolute(2))", v2.Height.ToString ());
Assert.Equal ("Combine(Fill(Absolute(0))-Absolute(2))", v2.Height.ToString ());
#else
Assert.Equal ("Combine(Fill(0)-Absolute(2))", v2.Height.ToString ());
#endif
@@ -380,7 +380,7 @@ public class DimTests
Assert.Equal (5, f1.Frame.Height);
f2.Text = "Frame2";
Assert.Equal ("Fill(0)", f2.Width.ToString ());
Assert.Equal ("Fill(Absolute(0))", f2.Width.ToString ());
Assert.Equal ("Absolute(5)", f2.Height.ToString ());
Assert.Equal (99, f2.Frame.Width); // 100-1=99
Assert.Equal (5, f2.Frame.Height);
@@ -391,7 +391,7 @@ public class DimTests
#else
Assert.Equal ($"Combine(View(Width,FrameView(){f1.Frame})-Absolute(2))", v1.Width.ToString ());
#endif
Assert.Equal ("Combine(Fill(0)-Absolute(2))", v1.Height.ToString ());
Assert.Equal ("Combine(Fill(Absolute(0))-Absolute(2))", v1.Height.ToString ());
Assert.Equal (97, v1.Frame.Width); // 99-2=97
Assert.Equal (189, v1.Frame.Height); // 198-2-7=189
@@ -402,7 +402,7 @@ public class DimTests
#else
Assert.Equal ($"Combine(View(Width,FrameView(){f2.Frame})-Absolute(2))", v2.Width.ToString ());
#endif
Assert.Equal ("Combine(Fill(0)-Absolute(2))", v2.Height.ToString ());
Assert.Equal ("Combine(Fill(Absolute(0))-Absolute(2))", v2.Height.ToString ());
Assert.Equal (97, v2.Frame.Width); // 99-2=97
Assert.Equal (189, v2.Frame.Height); // 198-2-7=189

View File

@@ -37,11 +37,11 @@ public class SetRelativeLayoutTests
Assert.Equal ("Absolute(1)", view.X.ToString ());
Assert.Equal ("Absolute(2)", view.Y.ToString ());
Assert.Equal ("Fill(0)", view.Width.ToString ());
Assert.Equal ("Fill(0)", view.Height.ToString ());
Assert.Equal ("Fill(Absolute(0))", view.Width.ToString ());
Assert.Equal ("Fill(Absolute(0))", view.Height.ToString ());
view.SetRelativeLayout (screen);
Assert.Equal ("Fill(0)", view.Width.ToString ());
Assert.Equal ("Fill(0)", view.Height.ToString ());
Assert.Equal ("Fill(Absolute(0))", view.Width.ToString ());
Assert.Equal ("Fill(Absolute(0))", view.Height.ToString ());
}
[Fact]
@@ -50,7 +50,7 @@ public class SetRelativeLayoutTests
var view = new View { X = 1, Y = 1, Width = Dim.Fill (), Height = Dim.Fill () };
view.SetRelativeLayout (new Size (80, 25));
Assert.Equal ("Fill(0)", view.Width.ToString ());
Assert.Equal ("Fill(Absolute(0))", view.Width.ToString ());
Assert.Equal (1, view.Frame.X);
Assert.Equal (1, view.Frame.Y);
Assert.Equal (79, view.Frame.Width);
@@ -63,7 +63,7 @@ public class SetRelativeLayoutTests
view.X = 0;
view.Y = 0;
Assert.Equal ("Absolute(0)", view.X.ToString ());
Assert.Equal ("Fill(0)", view.Width.ToString ());
Assert.Equal ("Fill(Absolute(0))", view.Width.ToString ());
view.SetRelativeLayout (new Size (80, 25));
Assert.Equal (0, view.Frame.X);
Assert.Equal (0, view.Frame.Y);

View File

@@ -10,8 +10,8 @@ public partial class ToplevelTests (ITestOutputHelper output)
var top = new Toplevel ();
Assert.Equal (Colors.ColorSchemes ["TopLevel"], top.ColorScheme);
Assert.Equal ("Fill(0)", top.Width.ToString ());
Assert.Equal ("Fill(0)", top.Height.ToString ());
Assert.Equal ("Fill(Absolute(0))", top.Width.ToString ());
Assert.Equal ("Fill(Absolute(0))", top.Height.ToString ());
Assert.False (top.Running);
Assert.False (top.Modal);
Assert.Null (top.MenuBar);