From 6f664c9c6a7d1bd100ed0ea50f856154aa2e4273 Mon Sep 17 00:00:00 2001 From: Tig Date: Tue, 19 Mar 2024 17:52:44 -0700 Subject: [PATCH] Added ContentSize property and first unit test --- Terminal.Gui/View/Adornment/Adornment.cs | 4 ++++ Terminal.Gui/View/Layout/ViewLayout.cs | 8 ++++++++ UnitTests/View/Layout/ViewportTests.cs | 19 +++++++++++++++---- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Terminal.Gui/View/Adornment/Adornment.cs b/Terminal.Gui/View/Adornment/Adornment.cs index 210f625a9..addb02f2e 100644 --- a/Terminal.Gui/View/Adornment/Adornment.cs +++ b/Terminal.Gui/View/Adornment/Adornment.cs @@ -203,6 +203,10 @@ public class Adornment : View /// if the specified Parent's SuperView-relative coordinates are within the Adornment's Thickness. public override bool Contains (int x, int y) { + if (Parent is null) + { + return false; + } Rectangle frame = Frame; frame.Offset (Parent.Frame.Location); diff --git a/Terminal.Gui/View/Layout/ViewLayout.cs b/Terminal.Gui/View/Layout/ViewLayout.cs index ca1b1220a..c4b8cae8a 100644 --- a/Terminal.Gui/View/Layout/ViewLayout.cs +++ b/Terminal.Gui/View/Layout/ViewLayout.cs @@ -389,6 +389,14 @@ public partial class View /// public Point GetViewportOffset () { return Padding is null ? Point.Empty : Padding.Thickness.GetInside (Padding.Frame).Location; } + /// + /// Gets or sets the size of the View's content. If the value is Size.Empty the size of the content is + /// the same as the size of the , and Viewport.Location will always be 0, 0. + /// If a positive size is provided, describes the portion of the content currently visible + /// to the view. This enables virtual scrolling. + /// + public Size ContentSize { get; set; } + #endregion Viewport #region AutoSize diff --git a/UnitTests/View/Layout/ViewportTests.cs b/UnitTests/View/Layout/ViewportTests.cs index b95b1ffb6..3bab1959a 100644 --- a/UnitTests/View/Layout/ViewportTests.cs +++ b/UnitTests/View/Layout/ViewportTests.cs @@ -24,16 +24,16 @@ public class ViewportTests (ITestOutputHelper output) var view = new View (); view.Frame = frame; - view.BeginInit(); - view.EndInit(); + view.BeginInit (); + view.EndInit (); // Act var bounds = view.Viewport; // Assert - Assert.Equal(expectedW, bounds.Width); + Assert.Equal (expectedW, bounds.Width); } - + [Theory] [InlineData (0, 0, 10)] [InlineData (1, 0, 9)] @@ -149,4 +149,15 @@ public class ViewportTests (ITestOutputHelper output) // Assert Assert.Equal (expectedW, bounds.Width); } + + [Fact] + public void ContentSize_Empty_ByDefault () + { + View view = new () + { + Width = 1, + Height = 1 + }; + Assert.Equal(Size.Empty, view.ContentSize); + } }