diff --git a/Terminal.Gui/Drawing/Thickness.cs b/Terminal.Gui/Drawing/Thickness.cs index b787738ab..03f95d76f 100644 --- a/Terminal.Gui/Drawing/Thickness.cs +++ b/Terminal.Gui/Drawing/Thickness.cs @@ -196,8 +196,8 @@ public record struct Thickness Text = text, Alignment = Alignment.Center, VerticalAlignment = Alignment.End, - Width = text.GetColumns (), - Height = 1 + ConstrainToWidth = text.GetColumns (), + ConstrainToHeight = 1 }; tf.Draw (rect, Application.Driver.CurrentAttribute, Application.Driver.CurrentAttribute, rect); } diff --git a/Terminal.Gui/Text/TextFormatter.cs b/Terminal.Gui/Text/TextFormatter.cs index fc5e65d9c..838ad4f2d 100644 --- a/Terminal.Gui/Text/TextFormatter.cs +++ b/Terminal.Gui/Text/TextFormatter.cs @@ -21,10 +21,6 @@ public class TextFormatter private Alignment _textVerticalAlignment = Alignment.Start; private bool _wordWrap = true; - private int? _width; - - private int? _height; - /// Get or sets the horizontal text alignment. /// The text alignment. public Alignment Alignment @@ -44,10 +40,7 @@ public class TextFormatter public TextDirection Direction { get => _textDirection; - set - { - _textDirection = EnableNeedsFormat (value); - } + set => _textDirection = EnableNeedsFormat (value); } /// Draws the text held by to using the colors specified. @@ -450,7 +443,7 @@ public class TextFormatter /// public bool FillRemaining { get; set; } - /// Returns the formatted text, constrained to . + /// Returns the formatted text, constrained to . /// /// If is , causes a format, resetting /// to . @@ -469,9 +462,12 @@ public class TextFormatter return sb.ToString ().TrimEnd (Environment.NewLine.ToCharArray ()); } - /// Gets the size required to hold the formatted text, given the constraints placed by . + /// Gets the size required to hold the formatted text, given the constraints placed by . /// Causes a format, resetting to . - /// If provided, will cause the text to be constrained to the provided size instead of and . + /// + /// If provided, will cause the text to be constrained to the provided size instead of and + /// . + /// /// The size required to hold the formatted text. public Size FormatAndGetSize (Size? constrainSize = null) { @@ -480,13 +476,13 @@ public class TextFormatter return System.Drawing.Size.Empty; } - int? prevWidth = _width; - int? prevHeight = _height; + int? prevWidth = _constrainToWidth; + int? prevHeight = _constrainToHeight; if (constrainSize is { }) { - _width = constrainSize?.Width; - _height = constrainSize?.Height; + _constrainToWidth = constrainSize?.Width; + _constrainToHeight = constrainSize?.Height; } // HACK: Fill normally will fill the entire constraint size, but we need to know the actual size of the text. @@ -513,8 +509,8 @@ public class TextFormatter if (constrainSize is { }) { - _width = prevWidth ?? null; - _height = prevHeight ?? null; + _constrainToWidth = prevWidth ?? null; + _constrainToHeight = prevHeight ?? null; } if (lines.Count == 0) @@ -569,7 +565,7 @@ public class TextFormatter : 0; } - /// Gets a list of formatted lines, constrained to . + /// Gets a list of formatted lines, constrained to . /// /// /// If the text needs to be formatted (if is ) @@ -577,14 +573,14 @@ public class TextFormatter /// will be . /// /// - /// If either of the dimensions of are zero, the text will not be formatted and no lines will + /// If either of the dimensions of are zero, the text will not be formatted and no lines will /// be returned. /// /// public List GetLines () { - int width = _width.GetValueOrDefault (); - int height = _height.GetValueOrDefault (); + int width = _constrainToWidth.GetValueOrDefault (); + int height = _constrainToHeight.GetValueOrDefault (); // With this check, we protect against subclasses with overrides of Text if (string.IsNullOrEmpty (Text) || width == 0 || height == 0) @@ -657,6 +653,40 @@ public class TextFormatter return _lines; } + private int? _constrainToWidth; + + /// Gets or sets the width will be constrained to when formatted. + /// + /// + /// Does not return the width of the formatted text but the width that will be used to constrain the text when + /// formatted. + /// + /// + /// If the height will be unconstrained. if both and are the text will be formatted to the size of the text. + /// + /// + /// Use to get the size of the formatted text. + /// + /// When set, is set to . + /// + public int? ConstrainToWidth + { + get => _constrainToWidth; + set + { + if (_constrainToWidth == value) + { + return; + } + + ArgumentOutOfRangeException.ThrowIfNegative (value.GetValueOrDefault (), nameof (ConstrainToWidth)); + + _constrainToWidth = EnableNeedsFormat (value); + } + } + + private int? _constrainToHeight; + /// Gets or sets the height will be constrained to when formatted. /// /// @@ -664,31 +694,65 @@ public class TextFormatter /// formatted. /// /// + /// If the height will be unconstrained. if both and are the text will be formatted to the size of the text. + /// + /// /// Use to get the size of the formatted text. /// /// When set, is set to . /// - public int? Height + public int? ConstrainToHeight { - get => _height; + get => _constrainToHeight; set { - if (_height == value) + if (_constrainToHeight == value) { return; } - ArgumentOutOfRangeException.ThrowIfNegative (value.GetValueOrDefault (), nameof (Height)); + ArgumentOutOfRangeException.ThrowIfNegative (value.GetValueOrDefault (), nameof (ConstrainToHeight)); - _height = value; + _constrainToHeight = EnableNeedsFormat (value); + } + } - if (_width is null || _height is null) + /// Gets or sets the width and height will be constrained to when formatted. + /// + /// + /// Does not return the size of the formatted text but the size that will be used to constrain the text when + /// formatted. + /// + /// + /// Use to get the size of the formatted text. + /// + /// When set, is set to . + /// + public Size? ConstrainToSize + { + get + { + if (_constrainToWidth is null || _constrainToHeight is null) { - return; + return null; } - _height = EnableNeedsFormat (value); + return new Size (_constrainToWidth.Value, _constrainToHeight.Value); + } + set + { + if (value is null) + { + _constrainToWidth = null; + _constrainToHeight = null; + EnableNeedsFormat (true); + } + else + { + _constrainToWidth = EnableNeedsFormat (value.Value.Width); + _constrainToHeight = EnableNeedsFormat (value.Value.Height); + } } } @@ -751,45 +815,6 @@ public class TextFormatter set => _preserveTrailingSpaces = EnableNeedsFormat (value); } - /// Gets or sets the width and height will be constrained to when formatted. - /// - /// - /// Does not return the size of the formatted text but the size that will be used to constrain the text when - /// formatted. - /// - /// - /// Use to get the size of the formatted text. - /// - /// When set, is set to . - /// - public Size? Size - { - get - { - if (_width is null || _height is null) - { - return null; - } - - return new Size (_width.Value, _height.Value); - } - set - { - if (value is null) - { - _width = null; - _height = null; - EnableNeedsFormat (true); - } - else - { - Size size = EnableNeedsFormat (value.Value); - _width = size.Width; - _height = size.Height; - } - } - } - /// Gets or sets the number of columns used for a tab. public int TabWidth { @@ -812,41 +837,7 @@ public class TextFormatter set => _textVerticalAlignment = EnableNeedsFormat (value); } - /// Gets or sets the width will be constrained to when formatted. - /// - /// - /// Does not return the width of the formatted text but the width that will be used to constrain the text when - /// formatted. - /// - /// - /// Use to get the size of the formatted text. - /// - /// When set, is set to . - /// - public int? Width - { - get => _width; - set - { - if (_width == value) - { - return; - } - - ArgumentOutOfRangeException.ThrowIfNegative (value.GetValueOrDefault (), nameof (Width)); - - _width = value; - - if (_width is null || _height is null) - { - return; - } - - _width = EnableNeedsFormat (value); - } - } - - /// Gets or sets whether word wrap will be used to fit to . + /// Gets or sets whether word wrap will be used to fit to . public bool WordWrap { get => _wordWrap; @@ -870,48 +861,48 @@ public class TextFormatter public static bool IsHorizontalDirection (TextDirection textDirection) { return textDirection switch - { - TextDirection.LeftRight_TopBottom => true, - TextDirection.LeftRight_BottomTop => true, - TextDirection.RightLeft_TopBottom => true, - TextDirection.RightLeft_BottomTop => true, - _ => false - }; + { + TextDirection.LeftRight_TopBottom => true, + TextDirection.LeftRight_BottomTop => true, + TextDirection.RightLeft_TopBottom => true, + TextDirection.RightLeft_BottomTop => true, + _ => false + }; } /// Check if it is a vertical direction public static bool IsVerticalDirection (TextDirection textDirection) { return textDirection switch - { - TextDirection.TopBottom_LeftRight => true, - TextDirection.TopBottom_RightLeft => true, - TextDirection.BottomTop_LeftRight => true, - TextDirection.BottomTop_RightLeft => true, - _ => false - }; + { + TextDirection.TopBottom_LeftRight => true, + TextDirection.TopBottom_RightLeft => true, + TextDirection.BottomTop_LeftRight => true, + TextDirection.BottomTop_RightLeft => true, + _ => false + }; } /// Check if it is Left to Right direction public static bool IsLeftToRight (TextDirection textDirection) { return textDirection switch - { - TextDirection.LeftRight_TopBottom => true, - TextDirection.LeftRight_BottomTop => true, - _ => false - }; + { + TextDirection.LeftRight_TopBottom => true, + TextDirection.LeftRight_BottomTop => true, + _ => false + }; } /// Check if it is Top to Bottom direction public static bool IsTopToBottom (TextDirection textDirection) { return textDirection switch - { - TextDirection.TopBottom_LeftRight => true, - TextDirection.TopBottom_RightLeft => true, - _ => false - }; + { + TextDirection.TopBottom_LeftRight => true, + TextDirection.TopBottom_RightLeft => true, + _ => false + }; } // TODO: Move to StringExtensions? @@ -1300,21 +1291,21 @@ public class TextFormatter case ' ': return GetNextWhiteSpace (to + 1, cWidth, out incomplete, length); case '\t': + { + length += tabWidth + 1; + + if (length == tabWidth && tabWidth > cWidth) { - length += tabWidth + 1; - - if (length == tabWidth && tabWidth > cWidth) - { - return to + 1; - } - - if (length > cWidth && tabWidth > cWidth) - { - return to; - } - - return GetNextWhiteSpace (to + 1, cWidth, out incomplete, length); + return to + 1; } + + if (length > cWidth && tabWidth > cWidth) + { + return to; + } + + return GetNextWhiteSpace (to + 1, cWidth, out incomplete, length); + } default: to++; @@ -1323,11 +1314,11 @@ public class TextFormatter } return cLength switch - { - > 0 when to < runes.Count && runes [to].Value != ' ' && runes [to].Value != '\t' => from, - > 0 when to < runes.Count && (runes [to].Value == ' ' || runes [to].Value == '\t') => from, - _ => to - }; + { + > 0 when to < runes.Count && runes [to].Value != ' ' && runes [to].Value != '\t' => from, + > 0 when to < runes.Count && (runes [to].Value == ' ' || runes [to].Value == '\t') => from, + _ => to + }; } if (start < text.GetRuneCount ()) @@ -1511,7 +1502,6 @@ public class TextFormatter { ArgumentOutOfRangeException.ThrowIfNegative (width, nameof (width)); - if (string.IsNullOrEmpty (text)) { return text; @@ -1655,7 +1645,6 @@ public class TextFormatter { ArgumentOutOfRangeException.ThrowIfNegative (width, nameof (width)); - List lineResult = new (); if (string.IsNullOrEmpty (text) || width == 0) @@ -1765,13 +1754,13 @@ public class TextFormatter private static string PerformCorrectFormatDirection (TextDirection textDirection, string line) { return textDirection switch - { - TextDirection.RightLeft_BottomTop - or TextDirection.RightLeft_TopBottom - or TextDirection.BottomTop_LeftRight - or TextDirection.BottomTop_RightLeft => StringExtensions.ToString (line.EnumerateRunes ().Reverse ()), - _ => line - }; + { + TextDirection.RightLeft_BottomTop + or TextDirection.RightLeft_TopBottom + or TextDirection.BottomTop_LeftRight + or TextDirection.BottomTop_RightLeft => StringExtensions.ToString (line.EnumerateRunes ().Reverse ()), + _ => line + }; } private static List PerformCorrectFormatDirection (TextDirection textDirection, List runes) @@ -1782,13 +1771,13 @@ public class TextFormatter private static List PerformCorrectFormatDirection (TextDirection textDirection, List lines) { return textDirection switch - { - TextDirection.TopBottom_RightLeft - or TextDirection.LeftRight_BottomTop - or TextDirection.RightLeft_BottomTop - or TextDirection.BottomTop_RightLeft => lines.ToArray ().Reverse ().ToList (), - _ => lines - }; + { + TextDirection.TopBottom_RightLeft + or TextDirection.LeftRight_BottomTop + or TextDirection.RightLeft_BottomTop + or TextDirection.BottomTop_RightLeft => lines.ToArray ().Reverse ().ToList (), + _ => lines + }; } /// @@ -1998,7 +1987,6 @@ public class TextFormatter /// The number of columns used for a tab. /// [Obsolete ("CalcRect is deprecated, FormatAndGetSize instead.")] - internal static Rectangle CalcRect ( int x, int y, diff --git a/Terminal.Gui/View/Adornment/Adornment.cs b/Terminal.Gui/View/Adornment/Adornment.cs index a1db317cb..e7cff5e8b 100644 --- a/Terminal.Gui/View/Adornment/Adornment.cs +++ b/Terminal.Gui/View/Adornment/Adornment.cs @@ -165,7 +165,7 @@ public class Adornment : View { if (TextFormatter is { }) { - TextFormatter.Size = Frame.Size; + TextFormatter.ConstrainToSize = Frame.Size; TextFormatter.NeedsFormat = true; } } diff --git a/Terminal.Gui/View/Adornment/Border.cs b/Terminal.Gui/View/Adornment/Border.cs index 076ec74cb..02daea2a8 100644 --- a/Terminal.Gui/View/Adornment/Border.cs +++ b/Terminal.Gui/View/Adornment/Border.cs @@ -421,7 +421,7 @@ public class Border : Adornment ) ); - Parent.TitleTextFormatter.Size = new (maxTitleWidth, 1); + Parent.TitleTextFormatter.ConstrainToSize = new (maxTitleWidth, 1); int sideLineLength = borderBounds.Height; bool canDrawBorder = borderBounds is { Width: > 0, Height: > 0 }; diff --git a/Terminal.Gui/View/Layout/DimAuto.cs b/Terminal.Gui/View/Layout/DimAuto.cs index c649616fd..9a8612542 100644 --- a/Terminal.Gui/View/Layout/DimAuto.cs +++ b/Terminal.Gui/View/Layout/DimAuto.cs @@ -88,27 +88,27 @@ public class DimAuto : Dim { if (dimension == Dimension.Width) { - if (us.TextFormatter.Width is null) + if (us.TextFormatter.ConstrainToWidth is null) { // Set BOTH width and height (by setting Size). We do this because we will be called again, next // for Dimension.Height. We need to know the width to calculate the height. - us.TextFormatter.Size = us.TextFormatter.FormatAndGetSize (new (int.Min (autoMax, screenX4), screenX4)); + us.TextFormatter.ConstrainToSize = us.TextFormatter.FormatAndGetSize (new (int.Min (autoMax, screenX4), screenX4)); } - textSize = us.TextFormatter.Width!.Value; + textSize = us.TextFormatter.ConstrainToWidth!.Value; } else { - if (us.TextFormatter.Height is null) + if (us.TextFormatter.ConstrainToHeight is null) { // Set just the height. It is assumed that the width has already been set. // TODO: There may be cases where the width is not set. We may need to set it here. - textSize = us.TextFormatter.FormatAndGetSize (new (us.TextFormatter.Width ?? screenX4, int.Min (autoMax, screenX4))).Height; - us.TextFormatter.Height = textSize; + textSize = us.TextFormatter.FormatAndGetSize (new (us.TextFormatter.ConstrainToWidth ?? screenX4, int.Min (autoMax, screenX4))).Height; + us.TextFormatter.ConstrainToHeight = textSize; } else { - textSize = us.TextFormatter.Height.Value; + textSize = us.TextFormatter.ConstrainToHeight.Value; } } } diff --git a/Terminal.Gui/View/Layout/ViewLayout.cs b/Terminal.Gui/View/Layout/ViewLayout.cs index 421894c5e..0a6c7a7fd 100644 --- a/Terminal.Gui/View/Layout/ViewLayout.cs +++ b/Terminal.Gui/View/Layout/ViewLayout.cs @@ -481,7 +481,7 @@ public partial class View _height = value ?? throw new ArgumentNullException (nameof (value), @$"{nameof (Height)} cannot be null"); // Reset TextFormatter - Will be recalculated in SetTextFormatterSize - TextFormatter.Height = null; + TextFormatter.ConstrainToHeight = null; OnResizeNeeded (); } @@ -530,7 +530,7 @@ public partial class View _width = value ?? throw new ArgumentNullException (nameof (value), @$"{nameof (Width)} cannot be null"); // Reset TextFormatter - Will be recalculated in SetTextFormatterSize - TextFormatter.Width = null; + TextFormatter.ConstrainToWidth = null; OnResizeNeeded (); } @@ -647,14 +647,14 @@ public partial class View SetNeedsDisplay (); } - if (TextFormatter.Width is null) + if (TextFormatter.ConstrainToWidth is null) { - TextFormatter.Width = GetContentSize ().Width; + TextFormatter.ConstrainToWidth = GetContentSize ().Width; } - if (TextFormatter.Height is null) + if (TextFormatter.ConstrainToHeight is null) { - TextFormatter.Height = GetContentSize ().Height; + TextFormatter.ConstrainToHeight = GetContentSize ().Height; } } diff --git a/Terminal.Gui/View/View.cs b/Terminal.Gui/View/View.cs index 68eb1853f..df782c294 100644 --- a/Terminal.Gui/View/View.cs +++ b/Terminal.Gui/View/View.cs @@ -479,7 +479,7 @@ public partial class View : Responder, ISupportInitializeNotification private void SetTitleTextFormatterSize () { - TitleTextFormatter.Size = new ( + TitleTextFormatter.ConstrainToSize = new ( TextFormatter.GetWidestLineLength (TitleTextFormatter.Text) - (TitleTextFormatter.Text?.Contains ((char)HotKeySpecifier.Value) == true ? Math.Max (HotKeySpecifier.GetColumns (), 0) diff --git a/Terminal.Gui/View/ViewText.cs b/Terminal.Gui/View/ViewText.cs index 0e43dba94..40a669961 100644 --- a/Terminal.Gui/View/ViewText.cs +++ b/Terminal.Gui/View/ViewText.cs @@ -158,15 +158,15 @@ public partial class View protected virtual void UpdateTextFormatterText () { TextFormatter.Text = _text; - TextFormatter.Width = null; - TextFormatter.Height = null; + TextFormatter.ConstrainToWidth = null; + TextFormatter.ConstrainToHeight = null; } /// /// Internal API. Sets .Width/Height. /// /// - /// Use this API to set /Height when the view has changed such that the + /// Use this API to set /Height when the view has changed such that the /// size required to fit the text has changed. /// changes. /// @@ -186,25 +186,25 @@ public partial class View if (widthAuto is { } && widthAuto.Style.FastHasFlags (DimAutoStyle.Text)) { - TextFormatter.Width = null; + TextFormatter.ConstrainToWidth = null; } else { if (size is { }) { - TextFormatter.Width = size?.Width; + TextFormatter.ConstrainToWidth = size?.Width; } } if (heightAuto is { } && heightAuto.Style.FastHasFlags (DimAutoStyle.Text)) { - TextFormatter.Height = null; + TextFormatter.ConstrainToHeight = null; } else { if (size is { }) { - TextFormatter.Height = size?.Height; + TextFormatter.ConstrainToHeight = size?.Height; } } } @@ -227,8 +227,8 @@ public partial class View if (directionChanged) { - TextFormatter.Width = null; - TextFormatter.Height = null; + TextFormatter.ConstrainToWidth = null; + TextFormatter.ConstrainToHeight = null; OnResizeNeeded (); } diff --git a/Terminal.Gui/Views/Menu/Menu.cs b/Terminal.Gui/Views/Menu/Menu.cs index 7ae998ee0..8c457136a 100644 --- a/Terminal.Gui/Views/Menu/Menu.cs +++ b/Terminal.Gui/Views/Menu/Menu.cs @@ -489,8 +489,8 @@ internal sealed class Menu : View { var tf = new TextFormatter { - Width = Frame.Width - 3, - Height = 1, + ConstrainToWidth = Frame.Width - 3, + ConstrainToHeight = 1, Alignment = Alignment.Center, HotKeySpecifier = MenuBar.HotKeySpecifier, Text = textToDraw }; diff --git a/UnitTests/Text/TextFormatterTests.cs b/UnitTests/Text/TextFormatterTests.cs index 3ae1e655c..a177b9dae 100644 --- a/UnitTests/Text/TextFormatterTests.cs +++ b/UnitTests/Text/TextFormatterTests.cs @@ -383,7 +383,7 @@ ssb Assert.True (tf.WordWrap); - tf.Size = new (width, height); + tf.ConstrainToSize = new (width, height); tf.Draw ( new (0, 0, width, height), @@ -408,7 +408,7 @@ ssb Attribute.Default, new (ColorName.Green, ColorName.BrightMagenta), new (ColorName.Blue, ColorName.Cyan) }; - var tf = new TextFormatter { Size = new (14, 3), Text = "Test\nTest long\nTest long long\n", MultiLine = true }; + var tf = new TextFormatter { ConstrainToSize = new (14, 3), Text = "Test\nTest long\nTest long long\n", MultiLine = true }; tf.Draw ( new (1, 1, 19, 3), @@ -1164,7 +1164,7 @@ ssb { var tf = new TextFormatter { - Text = text, Size = new (maxWidth, maxHeight), WordWrap = false, MultiLine = multiLine + Text = text, ConstrainToSize = new (maxWidth, maxHeight), WordWrap = false, MultiLine = multiLine }; Assert.False (tf.WordWrap); @@ -1247,7 +1247,7 @@ ssb var tf = new TextFormatter { Text = text, - Size = new (maxWidth, maxHeight), + ConstrainToSize = new (maxWidth, maxHeight), WordWrap = false, MultiLine = multiLine, Direction = TextDirection.TopBottom_LeftRight @@ -1277,7 +1277,7 @@ ssb tf.Draw (testBounds, new (), new ()); Assert.False (tf.NeedsFormat); - tf.Size = new (1, 1); + tf.ConstrainToSize = new (1, 1); Assert.True (tf.NeedsFormat); Assert.NotEmpty (tf.GetLines ()); Assert.False (tf.NeedsFormat); // get_Lines causes a Format @@ -2034,8 +2034,8 @@ ssb tf.Direction = textDirection; tf.TabWidth = tabWidth; tf.Text = text; - tf.Width = 20; - tf.Height = 20; + tf.ConstrainToWidth = 20; + tf.ConstrainToHeight = 20; Assert.True (tf.WordWrap); Assert.False (tf.PreserveTrailingSpaces); @@ -2075,8 +2075,8 @@ ssb tf.TabWidth = tabWidth; tf.PreserveTrailingSpaces = true; tf.Text = text; - tf.Width = 20; - tf.Height = 20; + tf.ConstrainToWidth = 20; + tf.ConstrainToHeight = 20; Assert.True (tf.WordWrap); @@ -2115,8 +2115,8 @@ ssb tf.TabWidth = tabWidth; tf.WordWrap = true; tf.Text = text; - tf.Width = 20; - tf.Height = 20; + tf.ConstrainToWidth = 20; + tf.ConstrainToHeight = 20; Assert.False (tf.PreserveTrailingSpaces); @@ -2158,8 +2158,8 @@ ssb public void Text_Set_SizeIsCorrect (string text, TextDirection textDirection, int expectedWidth, int expectedHeight) { var tf = new TextFormatter { Direction = textDirection, Text = text }; - tf.Width = 10; - tf.Height = 10; + tf.ConstrainToWidth = 10; + tf.ConstrainToHeight = 10; Assert.Equal (new (expectedWidth, expectedHeight), tf.FormatAndGetSize ()); } @@ -3071,14 +3071,6 @@ ssb [InlineData ("ABC", 3, "ABC")] [InlineData ("ABC", 4, "ABC")] [InlineData ("ABC", 6, "ABC")] - [InlineData ("A", 0, "")] - [InlineData ("A", 1, "A")] - [InlineData ("A", 2, "A")] - [InlineData ("AB", 1, "A")] - [InlineData ("AB", 2, "AB")] - [InlineData ("ABC", 3, "ABC")] - [InlineData ("ABC", 4, "ABC")] - [InlineData ("ABC", 6, "ABC")] public void Draw_Horizontal_Left (string text, int width, string expectedText) { @@ -3088,8 +3080,8 @@ ssb Alignment = Alignment.Start }; - tf.Width = width; - tf.Height = 1; + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = 1; tf.Draw (new (0, 0, width, 1), Attribute.Default, Attribute.Default); TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); @@ -3105,14 +3097,6 @@ ssb [InlineData ("ABC", 3, "ABC")] [InlineData ("ABC", 4, " ABC")] [InlineData ("ABC", 6, " ABC")] - [InlineData ("A", 0, "")] - [InlineData ("A", 1, "A")] - [InlineData ("A", 2, " A")] - [InlineData ("AB", 1, "B")] - [InlineData ("AB", 2, "AB")] - [InlineData ("ABC", 3, "ABC")] - [InlineData ("ABC", 4, " ABC")] - [InlineData ("ABC", 6, " ABC")] public void Draw_Horizontal_Right (string text, int width, string expectedText) { TextFormatter tf = new () @@ -3121,8 +3105,8 @@ ssb Alignment = Alignment.End }; - tf.Width = width; - tf.Height = 1; + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = 1; tf.Draw (new (Point.Empty, new (width, 1)), Attribute.Default, Attribute.Default); TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); @@ -3141,17 +3125,6 @@ ssb [InlineData ("ABC", 5, " ABC")] [InlineData ("ABC", 6, " ABC")] [InlineData ("ABC", 9, " ABC")] - [InlineData ("A", 0, "")] - [InlineData ("A", 1, "A")] - [InlineData ("A", 2, "A")] - [InlineData ("A", 3, " A")] - [InlineData ("AB", 1, "A")] - [InlineData ("AB", 2, "AB")] - [InlineData ("ABC", 3, "ABC")] - [InlineData ("ABC", 4, "ABC")] - [InlineData ("ABC", 5, " ABC")] - [InlineData ("ABC", 6, " ABC")] - [InlineData ("ABC", 9, " ABC")] public void Draw_Horizontal_Centered (string text, int width, string expectedText) { TextFormatter tf = new () @@ -3160,8 +3133,8 @@ ssb Alignment = Alignment.Center }; - tf.Width = width; - tf.Height = 1; + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = 1; tf.Draw (new (0, 0, width, 1), Attribute.Default, Attribute.Default); TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); @@ -3188,8 +3161,8 @@ ssb Alignment = Alignment.Fill }; - tf.Width = width; - tf.Height = 1; + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = 1; tf.Draw (new (0, 0, width, 1), Attribute.Default, Attribute.Default); TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); @@ -3258,8 +3231,8 @@ s")] Direction = TextDirection.TopBottom_LeftRight }; - tf.Width = width; - tf.Height = height; + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; tf.Draw (new (0, 0, 20, 20), Attribute.Default, Attribute.Default); TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); @@ -3289,7 +3262,7 @@ Nice Work")] { Text = text, Alignment = Alignment.Fill, - Size = new Size (width, height), + ConstrainToSize = new Size (width, height), MultiLine = true }; @@ -3349,7 +3322,7 @@ ek")] Text = text, Direction = TextDirection.TopBottom_LeftRight, VerticalAlignment = Alignment.Fill, - Size = new Size (width, height), + ConstrainToSize = new Size (width, height), MultiLine = true }; @@ -3389,8 +3362,8 @@ ek")] VerticalAlignment = Alignment.End }; - tf.Width = width; - tf.Height = height; + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; tf.Draw (new (Point.Empty, new (width, height)), Attribute.Default, Attribute.Default); Rectangle rect = TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); @@ -3449,8 +3422,8 @@ B ")] Direction = TextDirection.TopBottom_LeftRight }; - tf.Width = 5; - tf.Height = height; + tf.ConstrainToWidth = 5; + tf.ConstrainToHeight = height; tf.Draw (new (0, 0, 5, height), Attribute.Default, Attribute.Default); TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); @@ -3498,8 +3471,8 @@ B ")] width++; } - tf.Width = width; - tf.Height = height; + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; tf.Draw (new (0, 0, 5, height), Attribute.Default, Attribute.Default); Rectangle rect = TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); @@ -3527,8 +3500,8 @@ B ")] Direction = TextDirection.RightLeft_TopBottom }; - tf.Width = width; - tf.Height = height; + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); @@ -3555,8 +3528,8 @@ B ")] Direction = TextDirection.RightLeft_BottomTop }; - tf.Width = width; - tf.Height = height; + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); @@ -3583,8 +3556,8 @@ B ")] Direction = TextDirection.BottomTop_LeftRight }; - tf.Width = width; - tf.Height = height; + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); @@ -3611,8 +3584,8 @@ B ")] Direction = TextDirection.BottomTop_RightLeft }; - tf.Width = width; - tf.Height = height; + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); @@ -7063,7 +7036,7 @@ B ")] Alignment = horizontalTextAlignment, VerticalAlignment = alignment, Direction = textDirection, - Size = new (7, 7), + ConstrainToSize = new (7, 7), Text = text }; @@ -7217,8 +7190,8 @@ B ")] TextFormatter tf = new () { Direction = direction, - Width = width, - Height = height, + ConstrainToWidth = width, + ConstrainToHeight = height, Text = text }; Assert.True (tf.WordWrap); @@ -7301,7 +7274,7 @@ B ")] TextFormatter tf = new () { Direction = direction, - Size = new (width, height), + ConstrainToSize = new (width, height), Text = text, WordWrap = false }; diff --git a/UnitTests/View/Layout/Dim.AutoTests.cs b/UnitTests/View/Layout/Dim.AutoTests.cs index 431b673a5..6aca5a974 100644 --- a/UnitTests/View/Layout/Dim.AutoTests.cs +++ b/UnitTests/View/Layout/Dim.AutoTests.cs @@ -936,8 +936,8 @@ public partial class DimAutoTests (ITestOutputHelper output) Height = 1, Width = Auto () }; - Assert.Equal (expected, view.TextFormatter.Width); - Assert.Equal (1, view.TextFormatter.Height); + Assert.Equal (expected, view.TextFormatter.ConstrainToWidth); + Assert.Equal (1, view.TextFormatter.ConstrainToHeight); } [Theory] @@ -952,8 +952,8 @@ public partial class DimAutoTests (ITestOutputHelper output) Width = Auto (), Height = 1 }; - Assert.Equal (expected, view.TextFormatter.Width); - Assert.Equal (1, view.TextFormatter.Height); + Assert.Equal (expected, view.TextFormatter.ConstrainToWidth); + Assert.Equal (1, view.TextFormatter.ConstrainToHeight); view = new () { @@ -963,8 +963,8 @@ public partial class DimAutoTests (ITestOutputHelper output) Width = 1, Height = Auto () }; - Assert.Equal (1, view.TextFormatter.Width); - Assert.Equal (expected, view.TextFormatter.Height); + Assert.Equal (1, view.TextFormatter.ConstrainToWidth); + Assert.Equal (expected, view.TextFormatter.ConstrainToHeight); } // Test variations of Frame diff --git a/UnitTests/View/TextTests.cs b/UnitTests/View/TextTests.cs index 201336d34..3925cf113 100644 --- a/UnitTests/View/TextTests.cs +++ b/UnitTests/View/TextTests.cs @@ -18,7 +18,7 @@ public class TextTests (ITestOutputHelper output) { var view = new View (); view.Text = text; - Assert.Equal (new (expectedW, expectedH), view.TextFormatter.Size); + Assert.Equal (new (expectedW, expectedH), view.TextFormatter.ConstrainToSize); } // TextFormatter.Size should track ContentSize (without DimAuto) @@ -31,7 +31,7 @@ public class TextTests (ITestOutputHelper output) var view = new View (); view.SetContentSize (new (1, 1)); view.Text = text; - Assert.Equal (new (expectedW, expectedH), view.TextFormatter.Size); + Assert.Equal (new (expectedW, expectedH), view.TextFormatter.ConstrainToSize); } [Fact] @@ -276,9 +276,9 @@ Y view.Width = 12; view.Height = 1; - view.TextFormatter.Size = new (12, 1); + view.TextFormatter.ConstrainToSize = new (12, 1); win.LayoutSubviews (); - Assert.Equal (new (12, 1), view.TextFormatter.Size); + Assert.Equal (new (12, 1), view.TextFormatter.ConstrainToSize); Assert.Equal (new (0, 0, 12, 1), view.Frame); top.Clear (); view.Draw (); @@ -420,7 +420,7 @@ Y Assert.Equal (5, text.Length); Assert.Equal (new (0, 0, 1, 5), view.Frame); - Assert.Equal (new (1, 5), view.TextFormatter.Size); + Assert.Equal (new (1, 5), view.TextFormatter.ConstrainToSize); Assert.Equal (new () { "Views" }, view.TextFormatter.GetLines ()); Assert.Equal (new (0, 0, 4, 10), win.Frame); Assert.Equal (new (0, 0, 4, 10), Application.Top.Frame); @@ -448,7 +448,7 @@ Y Application.Refresh (); Assert.Equal (new (0, 0, 1, 5), view.Frame); - Assert.Equal (new (1, 5), view.TextFormatter.Size); + Assert.Equal (new (1, 5), view.TextFormatter.ConstrainToSize); Exception exception = Record.Exception (() => Assert.Single (view.TextFormatter.GetLines ())); Assert.Null (exception); @@ -490,7 +490,7 @@ Y // Vertical text - 2 wide, 5 down Assert.Equal (new (0, 0, 2, 5), view.Frame); - Assert.Equal (new (2, 5), view.TextFormatter.Size); + Assert.Equal (new (2, 5), view.TextFormatter.ConstrainToSize); Assert.Equal (new () { "界View" }, view.TextFormatter.GetLines ()); view.Draw (); @@ -630,8 +630,8 @@ w "; RunState rs = Application.Begin (top); ((FakeDriver)Application.Driver).SetBufferSize (22, 22); - Assert.Equal (new (text.GetColumns (), 1), horizontalView.TextFormatter.Size); - Assert.Equal (new (2, 8), verticalView.TextFormatter.Size); + Assert.Equal (new (text.GetColumns (), 1), horizontalView.TextFormatter.ConstrainToSize); + Assert.Equal (new (2, 8), verticalView.TextFormatter.ConstrainToSize); //Assert.Equal (new (0, 0, 10, 1), horizontalView.Frame); //Assert.Equal (new (0, 3, 10, 9), verticalView.Frame); @@ -785,10 +785,10 @@ w "; // frame.Width is width + border wide (20 + 2) and 6 high Size expectedSize = new (width, 1); - Assert.Equal (expectedSize, lblLeft.TextFormatter.Size); - Assert.Equal (expectedSize, lblCenter.TextFormatter.Size); - Assert.Equal (expectedSize, lblRight.TextFormatter.Size); - Assert.Equal (expectedSize, lblJust.TextFormatter.Size); + Assert.Equal (expectedSize, lblLeft.TextFormatter.ConstrainToSize); + Assert.Equal (expectedSize, lblCenter.TextFormatter.ConstrainToSize); + Assert.Equal (expectedSize, lblRight.TextFormatter.ConstrainToSize); + Assert.Equal (expectedSize, lblJust.TextFormatter.ConstrainToSize); Assert.Equal (new (0, 0, width + 2, 6), frame.Frame); @@ -889,18 +889,18 @@ w "; if (autoSize) { - Assert.Equal (new (1, 11), lblLeft.TextFormatter.Size); - Assert.Equal (new (1, 11), lblCenter.TextFormatter.Size); - Assert.Equal (new (1, 11), lblRight.TextFormatter.Size); - Assert.Equal (new (1, 11), lblJust.TextFormatter.Size); + Assert.Equal (new (1, 11), lblLeft.TextFormatter.ConstrainToSize); + Assert.Equal (new (1, 11), lblCenter.TextFormatter.ConstrainToSize); + Assert.Equal (new (1, 11), lblRight.TextFormatter.ConstrainToSize); + Assert.Equal (new (1, 11), lblJust.TextFormatter.ConstrainToSize); Assert.Equal (new (0, 0, 9, height + 2), frame.Frame); } else { - Assert.Equal (new (1, height), lblLeft.TextFormatter.Size); - Assert.Equal (new (1, height), lblCenter.TextFormatter.Size); - Assert.Equal (new (1, height), lblRight.TextFormatter.Size); - Assert.Equal (new (1, height), lblJust.TextFormatter.Size); + Assert.Equal (new (1, height), lblLeft.TextFormatter.ConstrainToSize); + Assert.Equal (new (1, height), lblCenter.TextFormatter.ConstrainToSize); + Assert.Equal (new (1, height), lblRight.TextFormatter.ConstrainToSize); + Assert.Equal (new (1, height), lblJust.TextFormatter.ConstrainToSize); Assert.Equal (new (0, 0, 9, height + 2), frame.Frame); } @@ -974,7 +974,7 @@ w "; Assert.Equal ("Hello World ", view.TextFormatter.Text); view.TextFormatter.WordWrap = true; - view.TextFormatter.Size = new (5, 3); + view.TextFormatter.ConstrainToSize = new (5, 3); view.PreserveTrailingSpaces = false; Assert.Equal ($"Hello{Environment.NewLine}World", view.TextFormatter.Format ()); @@ -1101,7 +1101,7 @@ w "; Assert.Equal (new (0, 0, 10, 1), view.Frame); Assert.Equal (new (0, 0, 10, 1), view.Viewport); - Assert.Equal (new (10, 1), view.TextFormatter.Size); + Assert.Equal (new (10, 1), view.TextFormatter.ConstrainToSize); } [Fact] @@ -1136,7 +1136,7 @@ w "; var horizontalView = new View { Width = 20, Height = 1, Text = text }; // Autosize is off, so we have to explicitly set TextFormatter.Size - horizontalView.TextFormatter.Size = new (20, 1); + horizontalView.TextFormatter.ConstrainToSize = new (20, 1); var verticalView = new View { @@ -1148,7 +1148,7 @@ w "; }; // Autosize is off, so we have to explicitly set TextFormatter.Size - verticalView.TextFormatter.Size = new (1, 20); + verticalView.TextFormatter.ConstrainToSize = new (1, 20); var frame = new FrameView { Width = Dim.Fill (), Height = Dim.Fill (), Text = "Window" }; frame.Add (horizontalView, verticalView); @@ -1204,7 +1204,7 @@ w "; // Autosize is off, so we have to explicitly set TextFormatter.Size // We know these glpyhs are 2 cols wide, so we need to widen the view verticalView.Width = 2; - verticalView.TextFormatter.Size = new (2, 20); + verticalView.TextFormatter.ConstrainToSize = new (2, 20); Assert.True (verticalView.TextFormatter.NeedsFormat); top.Draw (); diff --git a/UnitTests/Views/ButtonTests.cs b/UnitTests/Views/ButtonTests.cs index 3986bf89f..b344a994e 100644 --- a/UnitTests/Views/ButtonTests.cs +++ b/UnitTests/Views/ButtonTests.cs @@ -62,7 +62,7 @@ public class ButtonTests (ITestOutputHelper output) Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.Frame.Size); Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.Viewport.Size); Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.GetContentSize ()); - Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.TextFormatter.Size); + Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.TextFormatter.ConstrainToSize); btn1.Dispose (); } @@ -82,7 +82,7 @@ public class ButtonTests (ITestOutputHelper output) Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.Frame.Size); Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.Viewport.Size); - Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.TextFormatter.Size); + Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.TextFormatter.ConstrainToSize); btn1.Dispose (); } @@ -176,7 +176,7 @@ public class ButtonTests (ITestOutputHelper output) btn.Dispose (); btn = new () { Text = "_Test", IsDefault = true }; - Assert.Equal (new (10, 1), btn.TextFormatter.Size); + Assert.Equal (new (10, 1), btn.TextFormatter.ConstrainToSize); @@ -199,7 +199,7 @@ public class ButtonTests (ITestOutputHelper output) // [* Test *] Assert.Equal ('_', btn.HotKeySpecifier.Value); Assert.Equal (10, btn.TextFormatter.Format ().Length); - Assert.Equal (new (10, 1), btn.TextFormatter.Size); + Assert.Equal (new (10, 1), btn.TextFormatter.ConstrainToSize); Assert.Equal (new (10, 1), btn.GetContentSize ()); Assert.Equal (new (0, 0, 10, 1), btn.Viewport); Assert.Equal (new (0, 0, 10, 1), btn.Frame); diff --git a/UnitTests/Views/CheckBoxTests.cs b/UnitTests/Views/CheckBoxTests.cs index c7739272d..1860905d0 100644 --- a/UnitTests/Views/CheckBoxTests.cs +++ b/UnitTests/Views/CheckBoxTests.cs @@ -38,7 +38,7 @@ public class CheckBoxTests (ITestOutputHelper output) Assert.Equal (new (expectedWidth, expectedHeight), checkBox.Frame.Size); Assert.Equal (new (expectedWidth, expectedHeight), checkBox.Viewport.Size); - Assert.Equal (new (expectedWidth, expectedHeight), checkBox.TextFormatter.Size); + Assert.Equal (new (expectedWidth, expectedHeight), checkBox.TextFormatter.ConstrainToSize); checkBox.Dispose (); } @@ -62,7 +62,7 @@ public class CheckBoxTests (ITestOutputHelper output) Assert.Equal (new (expectedWidth, expectedHeight), checkBox.Frame.Size); Assert.Equal (new (expectedWidth, expectedHeight), checkBox.Viewport.Size); - Assert.Equal (new (expectedWidth, expectedHeight), checkBox.TextFormatter.Size); + Assert.Equal (new (expectedWidth, expectedHeight), checkBox.TextFormatter.ConstrainToSize); checkBox.Dispose (); } @@ -258,7 +258,7 @@ public class CheckBoxTests (ITestOutputHelper output) Assert.Equal (Alignment.Center, checkBox.TextAlignment); Assert.Equal (new (1, 1, 25, 1), checkBox.Frame); - Assert.Equal (_size25x1, checkBox.TextFormatter.Size); + Assert.Equal (_size25x1, checkBox.TextFormatter.ConstrainToSize); var expected = @$" ┌┤Test Demo 你├──────────────┐ @@ -335,10 +335,10 @@ public class CheckBoxTests (ITestOutputHelper output) checkBox1.State = CheckState.Checked; Assert.Equal (new (1, 1, 25, 1), checkBox1.Frame); - Assert.Equal (_size25x1, checkBox1.TextFormatter.Size); + Assert.Equal (_size25x1, checkBox1.TextFormatter.ConstrainToSize); checkBox2.State = CheckState.Checked; Assert.Equal (new (1, 2, 25, 1), checkBox2.Frame); - Assert.Equal (_size25x1, checkBox2.TextFormatter.Size); + Assert.Equal (_size25x1, checkBox2.TextFormatter.ConstrainToSize); Application.Refresh (); expected = @$" @@ -376,7 +376,7 @@ public class CheckBoxTests (ITestOutputHelper output) Assert.Equal (Alignment.Start, checkBox.TextAlignment); Assert.Equal (new (1, 1, 25, 1), checkBox.Frame); - Assert.Equal (_size25x1, checkBox.TextFormatter.Size); + Assert.Equal (_size25x1, checkBox.TextFormatter.ConstrainToSize); var expected = @$" ┌┤Test Demo 你├──────────────┐ @@ -427,7 +427,7 @@ public class CheckBoxTests (ITestOutputHelper output) Assert.Equal (Alignment.End, checkBox.TextAlignment); Assert.Equal (new (1, 1, 25, 1), checkBox.Frame); - Assert.Equal (_size25x1, checkBox.TextFormatter.Size); + Assert.Equal (_size25x1, checkBox.TextFormatter.ConstrainToSize); var expected = @$" ┌┤Test Demo 你├──────────────┐ diff --git a/UnitTests/Views/LabelTests.cs b/UnitTests/Views/LabelTests.cs index 9bfce36f7..58a52c8d8 100644 --- a/UnitTests/Views/LabelTests.cs +++ b/UnitTests/Views/LabelTests.cs @@ -184,10 +184,10 @@ public class LabelTests (ITestOutputHelper output) var label = new Label { Text = "This label needs to be cleared before rewritten.", Width = tfSize.Width, Height = tfSize.Height }; - var tf1 = new TextFormatter { Direction = TextDirection.LeftRight_TopBottom, Size = tfSize }; + var tf1 = new TextFormatter { Direction = TextDirection.LeftRight_TopBottom, ConstrainToSize = tfSize }; tf1.Text = "This TextFormatter (tf1) without fill will not be cleared on rewritten."; - var tf2 = new TextFormatter { Direction = TextDirection.LeftRight_TopBottom, Size = tfSize, FillRemaining = true }; + var tf2 = new TextFormatter { Direction = TextDirection.LeftRight_TopBottom, ConstrainToSize = tfSize, FillRemaining = true }; tf2.Text = "This TextFormatter (tf2) with fill will be cleared on rewritten."; var top = new Toplevel (); @@ -1201,7 +1201,7 @@ e Assert.Equal (5, text.Length); Assert.Equal (new (0, 0, 5, 1), label.Frame); - Assert.Equal (new (5, 1), label.TextFormatter.Size); + Assert.Equal (new (5, 1), label.TextFormatter.ConstrainToSize); Assert.Equal (["Label"], label.TextFormatter.GetLines ()); Assert.Equal (new (0, 0, 10, 4), win.Frame); Assert.Equal (new (0, 0, 10, 4), Application.Top.Frame); @@ -1223,7 +1223,7 @@ e Application.Refresh (); Assert.Equal (new (0, 0, 5, 1), label.Frame); - Assert.Equal (new (5, 1), label.TextFormatter.Size); + Assert.Equal (new (5, 1), label.TextFormatter.ConstrainToSize); Exception exception = Record.Exception (() => Assert.Single (label.TextFormatter.GetLines ())); Assert.Null (exception); @@ -1260,7 +1260,7 @@ e Assert.Equal (5, text.Length); Assert.Equal (new (0, 0, 5, 1), label.Frame); - Assert.Equal (new (5, 1), label.TextFormatter.Size); + Assert.Equal (new (5, 1), label.TextFormatter.ConstrainToSize); Assert.Equal (["Label"], label.TextFormatter.GetLines ()); Assert.Equal (new (0, 0, 10, 4), win.Frame); Assert.Equal (new (0, 0, 10, 4), Application.Top.Frame); @@ -1282,7 +1282,7 @@ e Application.Refresh (); Assert.Equal (new (0, 0, 5, 1), label.Frame); - Assert.Equal (new (5, 1), label.TextFormatter.Size); + Assert.Equal (new (5, 1), label.TextFormatter.ConstrainToSize); Assert.Single (label.TextFormatter.GetLines ()); expected = @"