From 6bb90edcbf35cdb1dce39abd463af89b5e662aee Mon Sep 17 00:00:00 2001 From: Tig Kindel Date: Tue, 21 Feb 2023 11:53:10 +1300 Subject: [PATCH] Revert "Illustrates #2331 (Scrollview not respecting clip) does not reproduce (#2332)" This reverts commit c85ff954aa8cebf0e0eb934d9d283551a6f63db8. --- Terminal.Gui/Core/TextFormatter.cs | 4 +- Terminal.Gui/Core/View.cs | 26 +- UICatalog/Scenarios/ASCIICustomButton.cs | 313 ----------------------- UnitTests/Core/BorderTests.cs | 80 +----- UnitTests/Views/ScrollViewTests.cs | 228 +---------------- 5 files changed, 31 insertions(+), 620 deletions(-) delete mode 100644 UICatalog/Scenarios/ASCIICustomButton.cs diff --git a/Terminal.Gui/Core/TextFormatter.cs b/Terminal.Gui/Core/TextFormatter.cs index 2e5c84ebe9..50fc9f5ae6 100644 --- a/Terminal.Gui/Core/TextFormatter.cs +++ b/Terminal.Gui/Core/TextFormatter.cs @@ -1190,9 +1190,7 @@ public void Draw (Rect bounds, Attribute normalColor, Attribute hotColor, Rect c for (int line = 0; line < linesFormated.Count; line++) { if ((isVertical && line > bounds.Width) || (!isVertical && line > bounds.Height)) continue; - if ((isVertical && line >= maxBounds.Left + maxBounds.Width - 1) - || (!isVertical && line >= maxBounds.Top + maxBounds.Height - 1)) - + if ((isVertical && line > maxBounds.Left + maxBounds.Width - bounds.X) || (!isVertical && line > maxBounds.Top + maxBounds.Height - bounds.Y)) break; var runes = lines [line].ToRunes (); diff --git a/Terminal.Gui/Core/View.cs b/Terminal.Gui/Core/View.cs index adf368c81e..96f58b2176 100644 --- a/Terminal.Gui/Core/View.cs +++ b/Terminal.Gui/Core/View.cs @@ -1105,8 +1105,15 @@ public void BringSubviewForward (View subview) /// public void Clear () { - var h = Frame.Height; - var w = Frame.Width; + Rect containerBounds = GetContainerBounds (); + Rect viewBounds = Bounds; + if (!containerBounds.IsEmpty) { + viewBounds.Width = Math.Min (viewBounds.Width, containerBounds.Width); + viewBounds.Height = Math.Min (viewBounds.Height, containerBounds.Height); + } + + var h = viewBounds.Height; + var w = viewBounds.Width; for (var line = 0; line < h; line++) { Move (0, line); for (var col = 0; col < w; col++) @@ -1518,13 +1525,13 @@ public virtual void Redraw (Rect bounds) } if (!ustring.IsNullOrEmpty (TextFormatter.Text)) { - Rect containerBounds = GetContainerBounds (); - Clear (ViewToScreen (GetNeedDisplay (containerBounds))); + Clear (); SetChildNeedsDisplay (); // Draw any Text if (TextFormatter != null) { TextFormatter.NeedsFormat = true; } + Rect containerBounds = GetContainerBounds (); TextFormatter?.Draw (ViewToScreen (Bounds), HasFocus ? ColorScheme.Focus : GetNormalColor (), HasFocus ? ColorScheme.HotFocus : Enabled ? ColorScheme.HotNormal : ColorScheme.Disabled, containerBounds); @@ -1562,17 +1569,6 @@ public virtual void Redraw (Rect bounds) ClearNeedsDisplay (); } - Rect GetNeedDisplay (Rect containerBounds) - { - Rect rect = NeedDisplay; - if (!containerBounds.IsEmpty) { - rect.Width = Math.Min (NeedDisplay.Width, containerBounds.Width); - rect.Height = Math.Min (NeedDisplay.Height, containerBounds.Height); - } - - return rect; - } - Rect GetContainerBounds () { var containerBounds = SuperView == null ? default : SuperView.ViewToScreen (SuperView.Bounds); diff --git a/UICatalog/Scenarios/ASCIICustomButton.cs b/UICatalog/Scenarios/ASCIICustomButton.cs deleted file mode 100644 index 77cacf8b95..0000000000 --- a/UICatalog/Scenarios/ASCIICustomButton.cs +++ /dev/null @@ -1,313 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using Terminal.Gui; - -namespace UICatalog.Scenarios { - [ScenarioMetadata (Name: "ASCIICustomButtonTest", Description: "ASCIICustomButton sample")] - [ScenarioCategory ("Controls")] - public class ASCIICustomButtonTest : Scenario { - private static bool smallerWindow; - private ScrollViewTestWindow scrollViewTestWindow; - private MenuItem miSmallerWindow; - - public override void Init (ColorScheme colorScheme) - { - Application.Init (); - scrollViewTestWindow = new ScrollViewTestWindow (); - var menu = new MenuBar (new MenuBarItem [] { - new MenuBarItem("Window Size", new MenuItem [] { - miSmallerWindow = new MenuItem ("Smaller Window", "", ChangeWindowSize) { - CheckType = MenuItemCheckStyle.Checked - }, - null, - new MenuItem("Quit", "",() => Application.RequestStop(),null,null, Key.Q | Key.CtrlMask) - }) - }); - Application.Top.Add (menu, scrollViewTestWindow); - Application.Run (); - } - - private void ChangeWindowSize () - { - smallerWindow = miSmallerWindow.Checked = !miSmallerWindow.Checked; - scrollViewTestWindow.Dispose (); - Application.Top.Remove (scrollViewTestWindow); - scrollViewTestWindow = new ScrollViewTestWindow (); - Application.Top.Add (scrollViewTestWindow); - } - - public override void Run () - { - } - - public class ASCIICustomButton : Button { - public string Description => $"Description of: {id}"; - - public event Action PointerEnter; - - private Label fill; - private FrameView border; - private string id; - - public ASCIICustomButton (string text, Pos x, Pos y, int width, int height) : base (text) - { - CustomInitialize ("", text, x, y, width, height); - } - - public ASCIICustomButton (string id, string text, Pos x, Pos y, int width, int height) : base (text) - { - CustomInitialize (id, text, x, y, width, height); - } - - private void CustomInitialize (string id, string text, Pos x, Pos y, int width, int height) - { - this.id = id; - X = x; - Y = y; - - Frame = new Rect { - Width = width, - Height = height - }; - - border = new FrameView () { - Width = width, - Height = height - }; - - AutoSize = false; - - var fillText = new System.Text.StringBuilder (); - for (int i = 0; i < Bounds.Height; i++) { - if (i > 0) { - fillText.AppendLine (""); - } - for (int j = 0; j < Bounds.Width; j++) { - fillText.Append ("█"); - } - } - - fill = new Label (fillText.ToString ()) { - Visible = false, - CanFocus = false - }; - - var title = new Label (text) { - X = Pos.Center (), - Y = Pos.Center (), - }; - - border.MouseClick += This_MouseClick; - border.Subviews [0].MouseClick += This_MouseClick; - fill.MouseClick += This_MouseClick; - title.MouseClick += This_MouseClick; - - Add (border, fill, title); - } - - private void This_MouseClick (MouseEventArgs obj) - { - OnMouseEvent (obj.MouseEvent); - } - - public override bool OnMouseEvent (MouseEvent mouseEvent) - { - Debug.WriteLine ($"{mouseEvent.Flags}"); - if (mouseEvent.Flags == MouseFlags.Button1Clicked) { - if (!HasFocus && SuperView != null) { - if (!SuperView.HasFocus) { - SuperView.SetFocus (); - } - SetFocus (); - SetNeedsDisplay (); - } - - OnClicked (); - return true; - } - return base.OnMouseEvent (mouseEvent); - } - - public override bool OnEnter (View view) - { - border.Visible = false; - fill.Visible = true; - PointerEnter.Invoke (this); - view = this; - return base.OnEnter (view); - } - - public override bool OnLeave (View view) - { - border.Visible = true; - fill.Visible = false; - if (view == null) - view = this; - return base.OnLeave (view); - } - } - - public class ScrollViewTestWindow : Window { - private List