diff --git a/Terminal.Gui/View/Layout/Dim.cs b/Terminal.Gui/View/Layout/Dim.cs index 0d2526dcb..9168bc863 100644 --- a/Terminal.Gui/View/Layout/Dim.cs +++ b/Terminal.Gui/View/Layout/Dim.cs @@ -255,7 +255,7 @@ public class Dim /// subclass of Dim that is used. For example, DimAbsolute returns a fixed dimension, DimFactor returns a /// dimension that is a certain percentage of the super view's size, and so on. /// - internal virtual int Anchor (int size) { return 0; } + internal virtual int GetAnchor (int size) { return 0; } /// /// Calculates and returns the dimension of a object. It takes into account the location of the @@ -275,7 +275,7 @@ public class Dim /// internal virtual int Calculate (int location, int superviewContentSize, View us, Dimension dimension) { - return Math.Max (Anchor (superviewContentSize - location), 0); + return Math.Max (GetAnchor (superviewContentSize - location), 0); } #endregion virtual methods @@ -290,7 +290,7 @@ public class Dim { if (left is DimAbsolute && right is DimAbsolute) { - return new DimAbsolute (left.Anchor (0) + right.Anchor (0)); + return new DimAbsolute (left.GetAnchor (0) + right.GetAnchor (0)); } var newDim = new DimCombine (true, left, right); @@ -315,7 +315,7 @@ public class Dim { if (left is DimAbsolute && right is DimAbsolute) { - return new DimAbsolute (left.Anchor (0) - right.Anchor (0)); + return new DimAbsolute (left.GetAnchor (0) - right.GetAnchor (0)); } var newDim = new DimCombine (false, left, right); @@ -338,7 +338,7 @@ public class Dim public override bool Equals (object? other) { return other is Dim abs && abs == this; } /// - public override int GetHashCode () { return Anchor (0).GetHashCode (); } + public override int GetHashCode () { return GetAnchor (0).GetHashCode (); } #endregion overrides } @@ -369,12 +369,12 @@ public class DimAbsolute (int size) : Dim /// public override string ToString () { return $"Absolute({Size})"; } - internal override int Anchor (int size) { return Size; } + internal override int GetAnchor (int size) { return Size; } internal override int Calculate (int location, int superviewContentSize, View us, Dimension dimension) { // DimAbsolute.Anchor (int size) ignores width and returns n - return Math.Max (Anchor (0), 0); + return Math.Max (GetAnchor (0), 0); } } @@ -428,13 +428,13 @@ public class DimAuto (DimAutoStyle style, Dim? minimumContentDim, Dim? maximumCo { if (us == null) { - return MaximumContentDim?.Anchor (0) ?? 0; + return MaximumContentDim?.GetAnchor (0) ?? 0; } var textSize = 0; var subviewsSize = 0; - int autoMin = MinimumContentDim?.Anchor (superviewContentSize) ?? 0; + int autoMin = MinimumContentDim?.GetAnchor (superviewContentSize) ?? 0; if (superviewContentSize < autoMin) { @@ -548,7 +548,7 @@ public class DimAuto (DimAutoStyle style, Dim? minimumContentDim, Dim? maximumCo } // If max: is set, clamp the return - BUGBUG: Not tested - return int.Min (max, MaximumContentDim?.Anchor (superviewContentSize) ?? max); + return int.Min (max, MaximumContentDim?.GetAnchor (superviewContentSize) ?? max); } internal override bool ReferencesOtherViews () @@ -591,10 +591,10 @@ public class DimCombine (bool add, Dim? left, Dim? right) : Dim /// public override string ToString () { return $"Combine({Left}{(Add ? '+' : '-')}{Right})"; } - internal override int Anchor (int size) + internal override int GetAnchor (int size) { - int la = Left!.Anchor (size); - int ra = Right!.Anchor (size); + int la = Left!.GetAnchor (size); + int ra = Right!.GetAnchor (size); if (Add) { @@ -679,11 +679,11 @@ public class DimPercent (float percent, bool usePosition = false) : Dim /// public bool UsePosition { get; } = usePosition; - internal override int Anchor (int size) { return (int)(size * Percent); } + internal override int GetAnchor (int size) { return (int)(size * Percent); } internal override int Calculate (int location, int superviewContentSize, View us, Dimension dimension) { - return UsePosition ? Math.Max (Anchor (superviewContentSize - location), 0) : Anchor (superviewContentSize); + return UsePosition ? Math.Max (GetAnchor (superviewContentSize - location), 0) : GetAnchor (superviewContentSize); } } @@ -711,7 +711,7 @@ public class DimFill (int margin) : Dim /// public override string ToString () { return $"Fill({Margin})"; } - internal override int Anchor (int size) { return size - Margin; } + internal override int GetAnchor (int size) { return size - Margin; } } /// @@ -738,7 +738,7 @@ public class DimFunc (Func dim) : Dim /// public override string ToString () { return $"DimFunc({Func ()})"; } - internal override int Anchor (int size) { return Func (); } + internal override int GetAnchor (int size) { return Func (); } } /// @@ -795,7 +795,7 @@ public class DimView : Dim return $"View({dimString},{Target})"; } - internal override int Anchor (int size) + internal override int GetAnchor (int size) { return Dimension switch { diff --git a/Terminal.Gui/View/Layout/Pos.cs b/Terminal.Gui/View/Layout/Pos.cs index 5b07fa215..77a96e516 100644 --- a/Terminal.Gui/View/Layout/Pos.cs +++ b/Terminal.Gui/View/Layout/Pos.cs @@ -288,7 +288,7 @@ public class Pos #region virtual methods /// - /// Calculates and returns the starting point of an element based on the size of the parent element (typically + /// Gets the starting point of an element based on the size of the parent element (typically /// Superview.ContentSize). /// This method is meant to be overridden by subclasses to provide different ways of calculating the starting point. /// This method is used @@ -300,7 +300,7 @@ public class Pos /// subclass of Pos that is used. For example, PosAbsolute returns a fixed position, PosAnchorEnd returns a /// position that is anchored to the end of the layout, and so on. /// - internal virtual int Anchor (int size) { return 0; } + internal virtual int GetAnchor (int size) { return 0; } /// /// Calculates and returns the final position of a object. It takes into account the dimension of @@ -321,7 +321,7 @@ public class Pos /// that /// is used. /// - internal virtual int Calculate (int superviewDimension, Dim dim, View us, Dimension dimension) { return Anchor (superviewDimension); } + internal virtual int Calculate (int superviewDimension, Dim dim, View us, Dimension dimension) { return GetAnchor (superviewDimension); } /// /// Diagnostics API to determine if this Pos object references other views. @@ -341,7 +341,7 @@ public class Pos { if (left is PosAbsolute && right is PosAbsolute) { - return new PosAbsolute (left.Anchor (0) + right.Anchor (0)); + return new PosAbsolute (left.GetAnchor (0) + right.GetAnchor (0)); } var newPos = new PosCombine (true, left, right); @@ -370,7 +370,7 @@ public class Pos { if (left is PosAbsolute && right is PosAbsolute) { - return new PosAbsolute (left.Anchor (0) - right.Anchor (0)); + return new PosAbsolute (left.GetAnchor (0) - right.GetAnchor (0)); } var newPos = new PosCombine (false, left, right); @@ -392,7 +392,7 @@ public class Pos /// Serves as the default hash function. /// A hash code for the current object. - public override int GetHashCode () { return Anchor (0).GetHashCode (); } + public override int GetHashCode () { return GetAnchor (0).GetHashCode (); } #endregion overrides } @@ -423,7 +423,7 @@ public class PosAbsolute (int position) : Pos /// public override string ToString () { return $"Absolute({Position})"; } - internal override int Anchor (int size) { return Position; } + internal override int GetAnchor (int size) { return Position; } } /// @@ -469,7 +469,7 @@ public class PosAnchorEnd : Pos /// public override string ToString () { return UseDimForOffset ? "AnchorEnd()" : $"AnchorEnd({Offset})"; } - internal override int Anchor (int size) + internal override int GetAnchor (int size) { if (UseDimForOffset) { @@ -481,11 +481,11 @@ public class PosAnchorEnd : Pos internal override int Calculate (int superviewDimension, Dim dim, View us, Dimension dimension) { - int newLocation = Anchor (superviewDimension); + int newLocation = GetAnchor (superviewDimension); if (UseDimForOffset) { - newLocation -= dim.Anchor (superviewDimension); + newLocation -= dim.GetAnchor (superviewDimension); } return newLocation; @@ -500,13 +500,13 @@ public class PosCenter : Pos /// public override string ToString () { return "Center"; } - internal override int Anchor (int size) { return size / 2; } + internal override int GetAnchor (int size) { return size / 2; } internal override int Calculate (int superviewDimension, Dim dim, View us, Dimension dimension) { int newDimension = Math.Max (dim.Calculate (0, superviewDimension, us, dimension), 0); - return Anchor (superviewDimension - newDimension); + return GetAnchor (superviewDimension - newDimension); } } @@ -546,10 +546,10 @@ public class PosCombine (bool add, Pos left, Pos right) : Pos /// public override string ToString () { return $"Combine({Left}{(Add ? '+' : '-')}{Right})"; } - internal override int Anchor (int size) + internal override int GetAnchor (int size) { - int la = Left.Anchor (size); - int ra = Right.Anchor (size); + int la = Left.GetAnchor (size); + int ra = Right.GetAnchor (size); if (Add) { @@ -614,7 +614,7 @@ public class PosPercent (float percent) : Pos /// public override string ToString () { return $"Percent({Percent})"; } - internal override int Anchor (int size) { return (int)(size * Percent); } + internal override int GetAnchor (int size) { return (int)(size * Percent); } } /// @@ -643,7 +643,7 @@ public class PosFunc (Func pos) : Pos /// public override string ToString () { return $"PosFunc({Func ()})"; } - internal override int Anchor (int size) { return Func (); } + internal override int GetAnchor (int size) { return Func (); } } /// @@ -695,7 +695,7 @@ public class PosView (View view, Side side) : Pos return $"View(side={sideString},target={Target})"; } - internal override int Anchor (int size) + internal override int GetAnchor (int size) { return Side switch { diff --git a/Terminal.Gui/Views/TabView.cs b/Terminal.Gui/Views/TabView.cs index 42e3ef96d..52036e1e9 100644 --- a/Terminal.Gui/Views/TabView.cs +++ b/Terminal.Gui/Views/TabView.cs @@ -1265,7 +1265,7 @@ public class TabView : View tab.Margin.Thickness = new Thickness (0, 0, 0, 0); } - tab.Width = Math.Max (tab.Width.Anchor (0) - 1, 1); + tab.Width = Math.Max (tab.Width.GetAnchor (0) - 1, 1); } else { @@ -1280,7 +1280,7 @@ public class TabView : View tab.Margin.Thickness = new Thickness (0, 0, 0, 0); } - tab.Width = Math.Max (tab.Width.Anchor (0) - 1, 1); + tab.Width = Math.Max (tab.Width.GetAnchor (0) - 1, 1); } tab.Text = toRender.TextToRender; diff --git a/Terminal.Gui/Views/TileView.cs b/Terminal.Gui/Views/TileView.cs index b0d4aba6b..9dbbf4c9c 100644 --- a/Terminal.Gui/Views/TileView.cs +++ b/Terminal.Gui/Views/TileView.cs @@ -601,11 +601,11 @@ public class TileView : View TileViewLineView nextSplitter = visibleSplitterLines [i]; Pos nextSplitterPos = Orientation == Orientation.Vertical ? nextSplitter.X : nextSplitter.Y; - int nextSplitterDistance = nextSplitterPos.Anchor (space); + int nextSplitterDistance = nextSplitterPos.GetAnchor (space); TileViewLineView lastSplitter = i >= 1 ? visibleSplitterLines [i - 1] : null; Pos lastSplitterPos = Orientation == Orientation.Vertical ? lastSplitter?.X : lastSplitter?.Y; - int lastSplitterDistance = lastSplitterPos?.Anchor (space) ?? 0; + int lastSplitterDistance = lastSplitterPos?.GetAnchor (space) ?? 0; int distance = nextSplitterDistance - lastSplitterDistance; @@ -656,8 +656,8 @@ public class TileView : View private bool IsValidNewSplitterPos (int idx, Pos value, int fullSpace) { - int newSize = value.Anchor (fullSpace); - bool isGettingBigger = newSize > _splitterDistances [idx].Anchor (fullSpace); + int newSize = value.GetAnchor (fullSpace); + bool isGettingBigger = newSize > _splitterDistances [idx].GetAnchor (fullSpace); int lastSplitterOrBorder = HasBorder () ? 1 : 0; int nextSplitterOrBorder = HasBorder () ? fullSpace - 1 : fullSpace; @@ -682,7 +682,7 @@ public class TileView : View // Do not allow splitter to move left of the one before if (idx > 0) { - int posLeft = _splitterDistances [idx - 1].Anchor (fullSpace); + int posLeft = _splitterDistances [idx - 1].GetAnchor (fullSpace); if (newSize <= posLeft) { @@ -695,7 +695,7 @@ public class TileView : View // Do not allow splitter to move right of the one after if (idx + 1 < _splitterDistances.Count) { - int posRight = _splitterDistances [idx + 1].Anchor (fullSpace); + int posRight = _splitterDistances [idx + 1].GetAnchor (fullSpace); if (newSize >= posRight) { @@ -848,7 +848,7 @@ public class TileView : View { Dim spaceDim = Tile.ContentView.Width; - int spaceAbs = spaceDim.Anchor (Parent.Viewport.Width); + int spaceAbs = spaceDim.GetAnchor (Parent.Viewport.Width); var title = $" {Tile.Title} "; @@ -1005,7 +1005,7 @@ public class TileView : View private Pos ConvertToPosFactor (Pos p, int parentLength) { // calculate position in the 'middle' of the cell at p distance along parentLength - float position = p.Anchor (parentLength) + 0.5f; + float position = p.GetAnchor (parentLength) + 0.5f; return new PosPercent (position / parentLength); } @@ -1066,7 +1066,7 @@ public class TileView : View private Pos Offset (Pos pos, int delta) { - int posAbsolute = pos.Anchor ( + int posAbsolute = pos.GetAnchor ( Orientation == Orientation.Horizontal ? Parent.Viewport.Height : Parent.Viewport.Width diff --git a/Terminal.Gui/Views/Toplevel.cs b/Terminal.Gui/Views/Toplevel.cs index 05ea81d98..0b5bd14ad 100644 --- a/Terminal.Gui/Views/Toplevel.cs +++ b/Terminal.Gui/Views/Toplevel.cs @@ -419,7 +419,7 @@ public partial class Toplevel : View && !top.Subviews.Contains (sb) && ny + top.Frame.Height != superView.Frame.Height - (sb.Visible ? 1 : 0) && top.Height is DimFill - && -top.Height.Anchor (0) < 1) + && -top.Height.GetAnchor (0) < 1) { top.Height = Dim.Fill (sb.Visible ? 1 : 0); layoutSubviews = true; diff --git a/UnitTests/View/Layout/Dim.Tests.cs b/UnitTests/View/Layout/Dim.Tests.cs index 32599a776..124f1bde9 100644 --- a/UnitTests/View/Layout/Dim.Tests.cs +++ b/UnitTests/View/Layout/Dim.Tests.cs @@ -286,24 +286,24 @@ public class DimTests public void Internal_Tests () { var dimFactor = new DimPercent (0.10F); - Assert.Equal (10, dimFactor.Anchor (100)); + Assert.Equal (10, dimFactor.GetAnchor (100)); var dimAbsolute = new DimAbsolute (10); - Assert.Equal (10, dimAbsolute.Anchor (0)); + Assert.Equal (10, dimAbsolute.GetAnchor (0)); var dimFill = new DimFill (1); - Assert.Equal (99, dimFill.Anchor (100)); + Assert.Equal (99, dimFill.GetAnchor (100)); var dimCombine = new DimCombine (true, dimFactor, dimAbsolute); Assert.Equal (dimCombine.Left, dimFactor); Assert.Equal (dimCombine.Right, dimAbsolute); - Assert.Equal (20, dimCombine.Anchor (100)); + Assert.Equal (20, dimCombine.GetAnchor (100)); var view = new View { Frame = new Rectangle (20, 10, 20, 1) }; var dimViewHeight = new DimView (view, Dimension.Height); - Assert.Equal (1, dimViewHeight.Anchor (0)); + Assert.Equal (1, dimViewHeight.GetAnchor (0)); var dimViewWidth = new DimView (view, Dimension.Width); - Assert.Equal (20, dimViewWidth.Anchor (0)); + Assert.Equal (20, dimViewWidth.GetAnchor (0)); view.Dispose (); } diff --git a/UnitTests/View/Layout/Pos.AnchorEndTests.cs b/UnitTests/View/Layout/Pos.AnchorEndTests.cs index 8f23e0c8e..9c16f45a0 100644 --- a/UnitTests/View/Layout/Pos.AnchorEndTests.cs +++ b/UnitTests/View/Layout/Pos.AnchorEndTests.cs @@ -46,13 +46,13 @@ public class PosAnchorEndTests (ITestOutputHelper output) } [Fact] - public void PosAnchorEnd_Anchor () + public void PosAnchorEnd_GetAnchor () { var posAnchorEnd = new PosAnchorEnd (10); var width = 50; var expectedAnchor = width - 10; - Assert.Equal (expectedAnchor, posAnchorEnd.Anchor (width)); + Assert.Equal (expectedAnchor, posAnchorEnd.GetAnchor (width)); } [Fact] @@ -73,10 +73,10 @@ public class PosAnchorEndTests (ITestOutputHelper output) [Theory] [InlineData (0)] [InlineData (1)] - public void PosAnchorEnd_SetsValue_Anchor_Is_Negative (int offset) + public void PosAnchorEnd_SetsValue_GetAnchor_Is_Negative (int offset) { Pos pos = Pos.AnchorEnd (offset); - Assert.Equal (offset, -pos.Anchor (0)); + Assert.Equal (offset, -pos.GetAnchor (0)); } [Theory] @@ -119,10 +119,10 @@ public class PosAnchorEndTests (ITestOutputHelper output) } [Fact] - public void PosAnchorEnd_UseDimForOffset_SetsValue_Anchor_Is_Negative () + public void PosAnchorEnd_UseDimForOffset_SetsValue_GetAnchor_Is_Negative () { Pos pos = Pos.AnchorEnd (); - Assert.Equal (-10, -pos.Anchor (10)); + Assert.Equal (-10, -pos.GetAnchor (10)); } [Theory] diff --git a/UnitTests/View/Layout/Pos.CenterTests.cs b/UnitTests/View/Layout/Pos.CenterTests.cs index ee0f9b370..ca3900d7b 100644 --- a/UnitTests/View/Layout/Pos.CenterTests.cs +++ b/UnitTests/View/Layout/Pos.CenterTests.cs @@ -38,13 +38,13 @@ public class PosCenterTests (ITestOutputHelper output) } [Fact] - public void PosCenter_Anchor () + public void PosCenter_GetAnchor () { var posCenter = new PosCenter (); var width = 50; var expectedAnchor = width / 2; - Assert.Equal (expectedAnchor, posCenter.Anchor (width)); + Assert.Equal (expectedAnchor, posCenter.GetAnchor (width)); } [Fact] diff --git a/UnitTests/View/Layout/Pos.Tests.cs b/UnitTests/View/Layout/Pos.Tests.cs index 00cfecb23..85b76be10 100644 --- a/UnitTests/View/Layout/Pos.Tests.cs +++ b/UnitTests/View/Layout/Pos.Tests.cs @@ -181,36 +181,36 @@ public class PosTests () public void Internal_Tests () { var posFactor = new PosPercent (0.10F); - Assert.Equal (10, posFactor.Anchor (100)); + Assert.Equal (10, posFactor.GetAnchor (100)); var posAnchorEnd = new PosAnchorEnd (1); - Assert.Equal (99, posAnchorEnd.Anchor (100)); + Assert.Equal (99, posAnchorEnd.GetAnchor (100)); var posCenter = new PosCenter (); - Assert.Equal (50, posCenter.Anchor (100)); + Assert.Equal (50, posCenter.GetAnchor (100)); var posAbsolute = new PosAbsolute (10); - Assert.Equal (10, posAbsolute.Anchor (0)); + Assert.Equal (10, posAbsolute.GetAnchor (0)); var posCombine = new PosCombine (true, posFactor, posAbsolute); Assert.Equal (posCombine.Left, posFactor); Assert.Equal (posCombine.Right, posAbsolute); - Assert.Equal (20, posCombine.Anchor (100)); + Assert.Equal (20, posCombine.GetAnchor (100)); posCombine = new (true, posAbsolute, posFactor); Assert.Equal (posCombine.Left, posAbsolute); Assert.Equal (posCombine.Right, posFactor); - Assert.Equal (20, posCombine.Anchor (100)); + Assert.Equal (20, posCombine.GetAnchor (100)); var view = new View { Frame = new (20, 10, 20, 1) }; var posViewX = new PosView (view, Side.Left); - Assert.Equal (20, posViewX.Anchor (0)); + Assert.Equal (20, posViewX.GetAnchor (0)); var posViewY = new PosView (view, Side.Top); - Assert.Equal (10, posViewY.Anchor (0)); + Assert.Equal (10, posViewY.GetAnchor (0)); var posRight = new PosView (view, Side.Right); - Assert.Equal (40, posRight.Anchor (0)); + Assert.Equal (40, posRight.GetAnchor (0)); var posViewBottom = new PosView (view, Side.Bottom); - Assert.Equal (11, posViewBottom.Anchor (0)); + Assert.Equal (11, posViewBottom.GetAnchor (0)); view.Dispose (); } diff --git a/docfx/docs/migratingfromv1.md b/docfx/docs/migratingfromv1.md index 3b080e39b..a58f5449e 100644 --- a/docfx/docs/migratingfromv1.md +++ b/docfx/docs/migratingfromv1.md @@ -81,9 +81,11 @@ In v1, `Application.Init` automatically created a toplevel view and set `Applica * Update any code that assumed `Application.Init` automatically created a toplevel view and set `Applicaton.Top`. * Update any code that assumed `Application.Init` automatically disposed of the toplevel view when the application exited. -## `Pos` and `Dim` types are no-longer internal nested classes +## `Pos` and `Dim` types now adhere to standard C# idioms * In v1, the `Pos` and `Dim` types (e.g. `Pos.PosView`) were nested classes and marked `internal`. In v2, they are no longer nested, and have appropriate public APIs. +* Nullabilty is enabled. +* Methods & properties follow standards. * The static method that creates a `PosAbsolute`, `Pos.At`, was renamed to `Pos.Absolute` for consistency. * The static method that crates as `DimAbsoulte`, `Dim.Sized`, was renamed to `Dim.Absolute` for consistency. @@ -93,6 +95,8 @@ In v1, `Application.Init` automatically created a toplevel view and set `Applica * Search and replace `Dim.Dim` -> `Dim`. * Search and replace `Pos.At` -> `Pos.Absolute` * Search and replace `Dim.Sized` -> `Dim.Absolute` +* Search and replace `Dim.Anchor` -> `Dim.GetAnchor` +* Search and replace `Pos.Anchor` -> `Pos.GetAnchor` ## Layout Improvements