Răsfoiți Sursa

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

Tig 11 luni în urmă
părinte
comite
4fb7d04dd9

+ 7 - 1
Terminal.Gui/View/Layout/Dim.cs

@@ -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.

+ 2 - 2
Terminal.Gui/View/Layout/DimFill.cs

@@ -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); }
 }

+ 1 - 1
UICatalog/KeyBindingsDialog.cs

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

+ 16 - 3
UnitTests/View/Layout/Dim.FillTests.cs

@@ -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]

+ 6 - 6
UnitTests/View/Layout/Dim.Tests.cs

@@ -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
 

+ 6 - 6
UnitTests/View/Layout/SetRelativeLayoutTests.cs

@@ -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);

+ 2 - 2
UnitTests/Views/ToplevelTests.cs

@@ -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);