diff --git a/Terminal.Gui/Text/TextFormatter.cs b/Terminal.Gui/Text/TextFormatter.cs
index b8dfa3d57..d9bba800d 100644
--- a/Terminal.Gui/Text/TextFormatter.cs
+++ b/Terminal.Gui/Text/TextFormatter.cs
@@ -30,7 +30,7 @@ public class TextFormatter
/// Gets or sets whether the should be automatically changed to fit the .
///
- /// Used by to resize the view's to fit .
+ /// Used when is using to resize the view's to fit .
///
/// AutoSize is ignored if and
/// are used.
diff --git a/Terminal.Gui/View/Layout/ViewLayout.cs b/Terminal.Gui/View/Layout/ViewLayout.cs
index 4c4891a6e..012092a43 100644
--- a/Terminal.Gui/View/Layout/ViewLayout.cs
+++ b/Terminal.Gui/View/Layout/ViewLayout.cs
@@ -395,140 +395,6 @@ public partial class View
}
}
- ///// Determines if the View's can be set to a new value.
- ///// TrySetHeight can only be called when AutoSize is true (or being set to true).
- /////
- /////
- ///// Contains the width that would result if were set to
- ///// "/>
- /////
- /////
- ///// if the View's can be changed to the specified value. False
- ///// otherwise.
- /////
- //internal bool TrySetHeight (int desiredHeight, out int resultHeight)
- //{
- // int h = desiredHeight;
- // bool canSetHeight;
-
- // switch (Height)
- // {
- // case Dim.DimCombine _:
- // case Dim.DimView _:
- // case Dim.DimFill _:
- // // It's a Dim.DimCombine and so can't be assigned. Let it have it's height anchored.
- // h = Height.Anchor (h);
- // canSetHeight = !ValidatePosDim;
-
- // break;
- // case Dim.DimFactor factor:
- // // Tries to get the SuperView height otherwise the view height.
- // int sh = SuperView is { } ? SuperView.Frame.Height : h;
-
- // if (factor.IsFromRemaining ())
- // {
- // sh -= Frame.Y;
- // }
-
- // h = Height.Anchor (sh);
- // canSetHeight = !ValidatePosDim;
-
- // break;
- // default:
- // canSetHeight = true;
-
- // break;
- // }
-
- // resultHeight = h;
-
- // return canSetHeight;
- //}
-
- ///// Determines if the View's can be set to a new value.
- ///// TrySetWidth can only be called when AutoSize is true (or being set to true).
- /////
- /////
- ///// Contains the width that would result if were set to
- ///// "/>
- /////
- /////
- ///// if the View's can be changed to the specified value. False
- ///// otherwise.
- /////
- //internal bool TrySetWidth (int desiredWidth, out int resultWidth)
- //{
- // int w = desiredWidth;
- // bool canSetWidth;
-
- // switch (Width)
- // {
- // case Dim.DimCombine _:
- // case Dim.DimView _:
- // case Dim.DimFill _:
- // // It's a Dim.DimCombine and so can't be assigned. Let it have it's Width anchored.
- // w = Width.Anchor (w);
- // canSetWidth = !ValidatePosDim;
-
- // break;
- // case Dim.DimFactor factor:
- // // Tries to get the SuperView Width otherwise the view Width.
- // int sw = SuperView is { } ? SuperView.Frame.Width : w;
-
- // if (factor.IsFromRemaining ())
- // {
- // sw -= Frame.X;
- // }
-
- // w = Width.Anchor (sw);
- // canSetWidth = !ValidatePosDim;
-
- // break;
- // default:
- // canSetWidth = true;
-
- // break;
- // }
-
- // resultWidth = w;
-
- // return canSetWidth;
- //}
-
- ///// Resizes the View to fit the specified size. Factors in the HotKey.
- ///// ResizeBoundsToFit can only be called when AutoSize is true (or being set to true).
- /////
- ///// whether the Viewport was changed or not
- //private bool ResizeViewportToFit (Size size)
- //{
- // //if (AutoSize == false) {
- // // throw new InvalidOperationException ("ResizeViewportToFit can only be called when AutoSize is true");
- // //}
-
- // var changed = false;
- // bool canSizeW = TrySetWidth (size.Width - GetHotKeySpecifierLength (), out int rW);
- // bool canSizeH = TrySetHeight (size.Height - GetHotKeySpecifierLength (false), out int rH);
-
- // if (canSizeW)
- // {
- // changed = true;
- // _width = rW;
- // }
-
- // if (canSizeH)
- // {
- // changed = true;
- // _height = rH;
- // }
-
- // if (changed)
- // {
- // Viewport = new (Viewport.X, Viewport.Y, canSizeW ? rW : Viewport.Width, canSizeH ? rH : Viewport.Height);
- // }
-
- // return changed;
- //}
-
#endregion AutoSize
#region Layout Engine
@@ -1110,33 +976,6 @@ public partial class View
SetNeedsLayout ();
SetNeedsDisplay ();
}
-
- //if (AutoSize)
- //{
- // if (autoSize.Width == 0 || autoSize.Height == 0)
- // {
- // // Set the frame. Do NOT use `Frame` as it overwrites X, Y, Width, and Height, making
- // // the view LayoutStyle.Absolute.
- // SetFrame (_frame with { Size = autoSize });
-
- // if (autoSize.Width == 0)
- // {
- // _width = 0;
- // }
-
- // if (autoSize.Height == 0)
- // {
- // _height = 0;
- // }
- // }
- // //else if (!SetFrameToFitText ())
- // //{
- // // SetTextFormatterSize ();
- // //}
-
- // SetNeedsLayout ();
- // SetNeedsDisplay ();
- //}
}
internal void CollectAll (View from, ref HashSet nNodes, ref HashSet<(View, View)> nEdges)
diff --git a/Terminal.Gui/View/ViewDrawing.cs b/Terminal.Gui/View/ViewDrawing.cs
index 9a0823343..b506dedf5 100644
--- a/Terminal.Gui/View/ViewDrawing.cs
+++ b/Terminal.Gui/View/ViewDrawing.cs
@@ -577,10 +577,7 @@ public partial class View
///
public void SetNeedsDisplay ()
{
- //if (IsInitialized)
- {
- SetNeedsDisplay (Viewport);
- }
+ SetNeedsDisplay (Viewport);
}
/// Expands the area of this view needing to be redrawn to include .
@@ -597,13 +594,6 @@ public partial class View
/// The content-relative region that needs to be redrawn.
public void SetNeedsDisplay (Rectangle region)
{
- //if (!IsInitialized)
- //{
- // _needsDisplayRect = region;
-
- // return;
- //}
-
if (_needsDisplayRect.IsEmpty)
{
_needsDisplayRect = region;
diff --git a/Terminal.Gui/View/ViewText.cs b/Terminal.Gui/View/ViewText.cs
index 4377143c9..2b7d83bf6 100644
--- a/Terminal.Gui/View/ViewText.cs
+++ b/Terminal.Gui/View/ViewText.cs
@@ -40,7 +40,8 @@ public partial class View
/// The text will word-wrap to additional lines if it does not fit horizontally. If 's height
/// is 1, the text will be clipped.
///
- /// If is true, the will be adjusted to fit the text.
+ /// If or are using ,
+ /// the will be adjusted to fit the text.
/// When the text changes, the is fired.
///
public virtual string Text
@@ -83,7 +84,7 @@ public partial class View
/// redisplay the .
///
///
- /// If is true, the will be adjusted to fit the text.
+ /// or are using , the will be adjusted to fit the text.
///
/// The text alignment.
public virtual TextAlignment TextAlignment
@@ -102,7 +103,7 @@ public partial class View
/// .
///
///
- /// If is true, the will be adjusted to fit the text.
+ /// or are using , the will be adjusted to fit the text.
///
/// The text alignment.
public virtual TextDirection TextDirection
@@ -126,7 +127,7 @@ public partial class View
/// the .
///
///
- /// If is true, the will be adjusted to fit the text.
+ /// or are using , the will be adjusted to fit the text.
///
/// The text alignment.
public virtual VerticalTextAlignment VerticalTextAlignment
@@ -139,64 +140,6 @@ public partial class View
}
}
- ///
- /// Gets the width or height of the characters
- /// in the property.
- ///
- ///
- /// Only the first HotKey specifier found in is supported.
- ///
- ///
- /// If (the default) the width required for the HotKey specifier is returned. Otherwise the
- /// height
- /// is returned.
- ///
- ///
- /// The number of characters required for the . If the text
- /// direction specified
- /// by does not match the parameter, 0 is returned.
- ///
- public int GetHotKeySpecifierLength (bool isWidth = true)
- {
- if (isWidth)
- {
- return TextFormatter.IsHorizontalDirection (TextDirection) && TextFormatter.Text?.Contains ((char)HotKeySpecifier.Value) == true
- ? Math.Max (HotKeySpecifier.GetColumns (), 0)
- : 0;
- }
-
- return TextFormatter.IsVerticalDirection (TextDirection) && TextFormatter.Text?.Contains ((char)HotKeySpecifier.Value) == true
- ? Math.Max (HotKeySpecifier.GetColumns (), 0)
- : 0;
- }
-
- /////
- ///// Gets dimensions required to fit within using the text
- ///// specified by the property and accounting for any
- ///// characters.
- /////
- /////
- /////
- ///// The of the required to fit the formatted text.
- //public Size GetTextAutoSize ()
- //{
- // var x = 0;
- // var y = 0;
-
- // if (IsInitialized)
- // {
- // x = Viewport.X;
- // y = Viewport.Y;
- // }
-
- // // Get the size of the text without the hot key specifier
- // Rectangle rect = TextFormatter.CalcRect (x, y, TextFormatter.Text, TextFormatter.Direction);
- // int newWidth = rect.Size.Width - GetHotKeySpecifierLength ();
- // int newHeight = rect.Size.Height - GetHotKeySpecifierLength (false);
-
- // return new (newWidth, newHeight);
- //}
-
///
/// Can be overridden if the has
/// different format than the default.
@@ -216,8 +159,8 @@ public partial class View
internal Size GetSizeNeededForTextWithoutHotKey ()
{
return new Size (
- TextFormatter.Size.Width - GetHotKeySpecifierLength (),
- TextFormatter.Size.Height - GetHotKeySpecifierLength (false));
+ TextFormatter.Size.Width - TextFormatter.GetHotKeySpecifierLength (),
+ TextFormatter.Size.Height - TextFormatter.GetHotKeySpecifierLength (false));
}
///
@@ -234,14 +177,6 @@ public partial class View
{
UpdateTextFormatterText ();
- //if (!IsInitialized)
- //{
- // return;
- //}
-
- //Dim.DimAuto widthAuto = Width as Dim.DimAuto;
- //Dim.DimAuto heightAuto = Height as Dim.DimAuto;
-
// TODO: This is a hack. Figure out how to move this into DimDimAuto
// Use _width & _height instead of Width & Height to avoid debug spew
if ((_width is Dim.DimAuto widthAuto && widthAuto._style != Dim.DimAutoStyle.Subviews)
@@ -259,148 +194,78 @@ public partial class View
TextFormatter.Size = new Size (ContentSize.Width, ContentSize.Height);
}
- ////private bool IsValidAutoSize (out Size autoSize)
- ////{
- //// Rectangle rect = TextFormatter.CalcRect (_frame.X, _frame.Y, TextFormatter.Text, TextDirection);
-
- //// autoSize = new Size (
- //// rect.Size.Width - GetHotKeySpecifierLength (),
- //// rect.Size.Height - GetHotKeySpecifierLength (false));
-
- //// return !((ValidatePosDim && (!(Width is Dim.DimAbsolute) || !(Height is Dim.DimAbsolute)))
- //// || _frame.Size.Width != rect.Size.Width - GetHotKeySpecifierLength ()
- //// || _frame.Size.Height != rect.Size.Height - GetHotKeySpecifierLength (false));
- ////}
-
- //private bool IsValidAutoSizeHeight (Dim height)
- //{
- // Rectangle rect = TextFormatter.CalcRect (_frame.X, _frame.Y, TextFormatter.Text, TextDirection);
- // int dimValue = height.Anchor (0);
-
- // return !((ValidatePosDim && !(height is Dim.DimAbsolute)) || dimValue != rect.Size.Height - GetHotKeySpecifierLength (false));
- //}
-
- //private bool IsValidAutoSizeWidth (Dim width)
- //{
- // Rectangle rect = TextFormatter.CalcRect (_frame.X, _frame.Y, TextFormatter.Text, TextDirection);
- // int dimValue = width.Anchor (0);
-
- // return !((ValidatePosDim && !(width is Dim.DimAbsolute)) || dimValue != rect.Size.Width - GetHotKeySpecifierLength ());
- //}
-
- /////
- ///// Sets the size of the View to the minimum width or height required to fit .
- /////
- /////
- ///// if the size was changed; if ==
- ///// or
- ///// will not fit.
- /////
- /////
- ///// Always returns if is or
- ///// if (Horizontal) or (Vertical) are not not set or zero.
- ///// Does not take into account word wrapping.
- /////
- //private bool SetFrameToFitText ()
- //{
- // if (AutoSize == false)
- // {
- // throw new InvalidOperationException ("SetFrameToFitText can only be called when AutoSize is true");
- // }
-
- // // BUGBUG: This API is broken - should not assume Frame.Height == ContentSize.Height
- // //
- // // Gets the minimum dimensions required to fit the View's , factoring in .
- // //
- // // The minimum dimensions required.
- // // if the dimensions fit within the View's , otherwise.
- // //
- // // Always returns if is or
- // // if (Horizontal) or (Vertical) are not not set or zero.
- // // Does not take into account word wrapping.
- // //
- // bool GetMinimumSizeOfText (out Size sizeRequired)
- // {
- // if (!IsInitialized)
- // {
- // sizeRequired = Size.Empty;
-
- // return false;
- // }
-
- // sizeRequired = ContentSize;
-
- // if (AutoSize || string.IsNullOrEmpty (TextFormatter.Text))
- // {
- // return false;
- // }
-
- // switch (TextFormatter.IsVerticalDirection (TextDirection))
- // {
- // case true:
- // int colWidth = TextFormatter.GetColumnsRequiredForVerticalText (new List { TextFormatter.Text }, 0, 1);
-
- //// // TODO: v2 - This uses frame.Width; it should only use ContentSize
- // if (_frame.Width < colWidth
- // && (Width is null || (ContentSize.Width >= 0 && Width is Dim.DimAbsolute && Width.Anchor (0) >= 0 && Width.Anchor (0) < colWidth)))
- // {
- // sizeRequired = new (colWidth, ContentSize.Height);
-
- // return true;
- // }
-
- // break;
- // default:
- // if (_frame.Height < 1 && (Height is null || (Height is Dim.DimAbsolute && Height.Anchor (0) == 0)))
- // {
- // sizeRequired = new (ContentSize.Width, 1);
-
- // return true;
- // }
-
- // break;
- // }
-
- // return false;
- // }
-
- // if (GetMinimumSizeOfText (out Size size))
- // {
- // // TODO: This is a hack.
- // //_width = size.Width;
- // //_height = size.Height;
- // SetFrame (new (_frame.Location, size));
-
- // //throw new InvalidOperationException ("This is a hack.");
- // return true;
- // }
-
- // return false;
- //}
-
private void UpdateTextDirection (TextDirection newDirection)
{
bool directionChanged = TextFormatter.IsHorizontalDirection (TextFormatter.Direction) != TextFormatter.IsHorizontalDirection (newDirection);
TextFormatter.Direction = newDirection;
- //bool isValidOldAutoSize = AutoSize && IsValidAutoSize (out Size _);
-
UpdateTextFormatterText ();
if (directionChanged)
{
OnResizeNeeded ();
}
- //if ((!ValidatePosDim && directionChanged && AutoSize) || (ValidatePosDim && directionChanged && AutoSize && isValidOldAutoSize))
- //{
- // OnResizeNeeded ();
- //}
- //else if (directionChanged && IsAdded)
- //{
- // ResizeViewportToFit (Viewport.Size);
- //}
SetTextFormatterSize ();
SetNeedsDisplay ();
}
+
+
+ #region AutoSize
+
+ ///
+ /// Gets or sets a flag that determines whether the View will be automatically resized to fit the
+ /// within .
+ ///
+ /// The default is . Set to to turn on AutoSize. If
+ /// then and will be used if can
+ /// fit; if won't fit the view will be resized as needed.
+ ///
+ ///
+ /// If is set to then and
+ /// will be changed to if they are not already.
+ ///
+ ///
+ /// If is set to then and
+ /// will left unchanged.
+ ///
+ ///
+ [ObsoleteAttribute ("Use Dim.Auto instead.", false)]
+ public virtual bool AutoSize
+ {
+ get => _height is Dim.DimAuto && _width is Dim.DimAuto;
+ set
+ {
+ TextFormatter.AutoSize = value;
+
+ // BUGBUG: This is all a hack until AutoSize is removed
+ if (value)
+ {
+ UpdateTextFormatterText ();
+
+ if (IsInitialized)
+ {
+ Height = Dim.Auto (Dim.DimAutoStyle.Text);
+ Width = Dim.Auto (Dim.DimAutoStyle.Text);
+ }
+ else
+ {
+ _height = Dim.Auto (Dim.DimAutoStyle.Text);
+ _width = Dim.Auto (Dim.DimAutoStyle.Text);
+ OnResizeNeeded ();
+ }
+ }
+ else
+ {
+ _height = ContentSize.Height;
+ _width = ContentSize.Width;
+
+ // Force ContentSize to be reset to Viewport
+ _contentSize = Size.Empty;
+ OnResizeNeeded ();
+ }
+ }
+ }
+
+ #endregion AutoSize
}