Browse Source

Re enabled ViewDiagnostics.MouseEnter

Tig 10 months ago
parent
commit
7d82873f2c

+ 11 - 25
Terminal.Gui/Application/Application.Mouse.cs

@@ -215,7 +215,7 @@ public static partial class Application // Mouse handling
             return;
         }
 
-        RaiseMouseEnterLeaveEvents (me.ScreenPosition, currentViewsUnderMouse, me);
+        RaiseMouseEnterLeaveEvents (me.ScreenPosition, currentViewsUnderMouse);
 
         WantContinuousButtonPressedView = deepestViewUnderMouse.WantContinuousButtonPressed ? deepestViewUnderMouse : null;
 
@@ -303,8 +303,7 @@ public static partial class Application // Mouse handling
     /// </summary>
     /// <param name="screenPosition">The position of the mouse.</param>
     /// <param name="currentViewsUnderMouse">The most recent result from GetViewsUnderMouse().</param>
-    /// <param name="me">TODO: Remove once MouseEnter/Leave don't use MouseEvent anymore.</param>
-    internal static void RaiseMouseEnterLeaveEvents (Point screenPosition, List<View?> currentViewsUnderMouse, MouseEvent me)
+    internal static void RaiseMouseEnterLeaveEvents (Point screenPosition, List<View?> currentViewsUnderMouse)
     {
         // Tell any views that are no longer under the mouse that the mouse has left
         List<View?> viewsToLeave = _cachedViewsUnderMouse.Where (v => v is { } && !currentViewsUnderMouse.Contains (v)).ToList ();
@@ -315,26 +314,10 @@ public static partial class Application // Mouse handling
                 continue;
             }
 
-            if (view is Adornment adornmentView)
-            {
-                Point frameLoc = adornmentView.ScreenToFrame (screenPosition);
-                if (adornmentView.Parent is { } && !adornmentView.Contains (frameLoc))
-                {
-                    view.NewMouseLeaveEvent ();
-                }
-            }
-            else
-            {
-                Point superViewLoc = view.SuperView?.ScreenToViewport (screenPosition) ?? screenPosition;
-                if (!view.Contains (superViewLoc))
-                {
-                    view.NewMouseLeaveEvent ();
-                }
-            }
+            view.NewMouseLeaveEvent ();
+            _cachedViewsUnderMouse.Remove (view);
         }
 
-        _cachedViewsUnderMouse.Clear ();
-
         // Tell any views that are now under the mouse that the mouse has entered and add them to the list
         foreach (View? view in currentViewsUnderMouse)
         {
@@ -343,17 +326,20 @@ public static partial class Application // Mouse handling
                 continue;
             }
 
-            _cachedViewsUnderMouse.Add (view);
+            if (!_cachedViewsUnderMouse.Contains (view))
+            {
+                _cachedViewsUnderMouse.Add (view);
+            }
 
             bool raise = false;
             if (view is Adornment { Parent: { } } adornmentView)
             {
-                Point frameLoc = view.ScreenToFrame (me.ScreenPosition);
-                raise = adornmentView.Contains (frameLoc);
+                Point superViewLoc = adornmentView.Parent.SuperView?.ScreenToViewport (screenPosition) ?? screenPosition;
+                raise = adornmentView.Contains (superViewLoc);
             }
             else
             {
-                Point superViewLoc = view.SuperView?.ScreenToViewport (me.ScreenPosition) ?? me.ScreenPosition;
+                Point superViewLoc = view.SuperView?.ScreenToViewport (screenPosition) ?? screenPosition;
                 raise = view.Contains (superViewLoc);
             }
 

+ 29 - 0
Terminal.Gui/View/Adornment/Adornment.cs

@@ -228,5 +228,34 @@ public class Adornment : View
         return Thickness.Contains (frame, location);
     }
 
+    ///// <inheritdoc/>
+    //protected override bool OnMouseEnter (CancelEventArgs mouseEvent)
+    //{
+    //    // Invert Normal
+    //    if (Diagnostics.HasFlag (ViewDiagnosticFlags.MouseEnter) && ColorScheme != null)
+    //    {
+    //        var cs = new ColorScheme (ColorScheme)
+    //        {
+    //            Normal = new (ColorScheme.Normal.Background, ColorScheme.Normal.Foreground)
+    //        };
+    //        ColorScheme = cs;
+    //    }
+
+    //    return false;
+    //}
+
+    ///// <inheritdoc/>   
+    //protected override void OnMouseLeave ()
+    //{
+    //    // Invert Normal
+    //    if (Diagnostics.FastHasFlags (ViewDiagnosticFlags.MouseEnter) && ColorScheme != null)
+    //    {
+    //        var cs = new ColorScheme (ColorScheme)
+    //        {
+    //            Normal = new (ColorScheme.Normal.Background, ColorScheme.Normal.Foreground)
+    //        };
+    //        ColorScheme = cs;
+    //    }
+    //}
     #endregion Mouse Support
 }

+ 8 - 0
Terminal.Gui/View/View.Drawing.cs

@@ -377,6 +377,14 @@ public partial class View // Drawing APIs
             cs = new ();
         }
 
+        if (Diagnostics.HasFlag (ViewDiagnosticFlags.MouseEnter) && _mouseOver)
+        {
+            cs = new ColorScheme (cs)
+            {
+                Normal = new (ColorScheme.Normal.Foreground.GetDarkerColor (), ColorScheme.Normal.Background.GetDarkerColor()),
+                Disabled = new (ColorScheme.Disabled.Foreground.GetDarkerColor (), ColorScheme.Disabled.Background.GetDarkerColor ())
+            };
+        }
         return Enabled ? cs.Normal : cs.Disabled;
     }
 

+ 19 - 1
Terminal.Gui/View/View.Mouse.cs

@@ -1,4 +1,5 @@
 #nullable enable
+using System;
 using System.ComponentModel;
 
 namespace Terminal.Gui;
@@ -136,6 +137,8 @@ public partial class View // Mouse APIs
 
     #region MouseEnterLeave
 
+    private bool _mouseOver;
+
     /// <summary>
     ///     INTERNAL Called by <see cref="Application.OnMouseEvent"/> when the mouse moves over the View's <see cref="Frame"/>.
     ///     <see cref="MouseLeave"/> will
@@ -172,7 +175,20 @@ public partial class View // Mouse APIs
         }
 #endif
 
-        return eventArgs.Cancel;
+        _mouseOver = !eventArgs.Cancel;
+
+        if (eventArgs.Cancel)
+        {
+            return true;
+        }
+
+        // Invert Normal
+        if (Diagnostics.HasFlag (ViewDiagnosticFlags.MouseEnter) && ColorScheme != null)
+        {
+            SetNeedsDisplay ();
+        }
+
+        return false;
     }
 
     /// <summary>
@@ -253,6 +269,8 @@ public partial class View // Mouse APIs
             SetHighlight (HighlightStyle.None);
         }
 #endif
+
+        _mouseOver = false;
     }
 
     /// <summary>

+ 17 - 14
UICatalog/Scenarios/Mouse.cs

@@ -117,29 +117,32 @@ public class Mouse : Scenario
                                   Y = 0,
                                   Width = Dim.Fill (),
                                   Height = Dim.Func (() => demo.Padding.Thickness.Top),
-                                  Title = "inPadding"
+                                  Title = "inPadding",
+                                  Id = "inPadding"
                               });
             demo.Padding.Thickness = demo.Padding.Thickness with { Top = 5 };
         }
 
-        demo.Add (
-                  new MouseEventDemoView ()
-                  {
-                      X = 0,
-                      Y = 0,
-                      Width = Dim.Percent(30),
-                      Height = Dim.Fill(),
-                      Title = "sub1",
-                  });
+        View sub1 = new MouseEventDemoView ()
+        {
+            X = 0,
+            Y = 0,
+            Width = Dim.Percent (20),
+            Height = Dim.Fill (),
+            Title = "sub1",
+            Id = "sub1",
+        };
+        demo.Add (sub1);
 
         demo.Add (
                   new MouseEventDemoView ()
                   {
-                      X = Pos.AnchorEnd(),
-                      Y = 0,
-                      Width = Dim.Percent (30),
-                      Height = Dim.Fill (),
+                      X = Pos.Right (sub1) - 4,
+                      Y = Pos.Top (sub1) + 1,
+                      Width = Dim.Percent (20),
+                      Height = Dim.Fill (1),
                       Title = "sub2",
+                      Id = "sub2",
                   });
 
         win.Add (demo);

+ 22 - 117
UnitTests/Application/Mouse/ApplicationMouseEnterLeaveTests.cs

@@ -58,7 +58,7 @@ public class ApplicationMouseEnterLeaveTests
         try
         {
             // Act
-            Application.RaiseMouseEnterLeaveEvents (mousePosition, currentViewsUnderMouse, mouseEvent);
+            Application.RaiseMouseEnterLeaveEvents (mousePosition, currentViewsUnderMouse);
 
             // Assert
             Assert.Equal (1, view.OnMouseEnterCalled);
@@ -88,7 +88,7 @@ public class ApplicationMouseEnterLeaveTests
         try
         {
             // Act
-            Application.RaiseMouseEnterLeaveEvents (mousePosition, currentViewsUnderMouse, mouseEvent);
+            Application.RaiseMouseEnterLeaveEvents (mousePosition, currentViewsUnderMouse);
 
             // Assert
             Assert.Equal (0, view.OnMouseEnterCalled);
@@ -126,12 +126,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (0, view1.OnMouseEnterCalled);
@@ -144,12 +139,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (1, view1.OnMouseEnterCalled);
@@ -162,12 +152,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (1, view1.OnMouseEnterCalled);
@@ -180,12 +165,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (1, view1.OnMouseEnterCalled);
@@ -198,12 +178,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (1, view1.OnMouseEnterCalled);
@@ -235,7 +210,7 @@ public class ApplicationMouseEnterLeaveTests
         try
         {
             // Act
-            Application.RaiseMouseEnterLeaveEvents (mousePosition, currentViewsUnderMouse, mouseEvent);
+            Application.RaiseMouseEnterLeaveEvents (mousePosition, currentViewsUnderMouse);
 
             // Assert
             Assert.Equal (0, view.OnMouseEnterCalled);
@@ -278,12 +253,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (0, view1.OnMouseEnterCalled);
@@ -296,12 +266,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (1, view1.OnMouseEnterCalled);
@@ -314,12 +279,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (1, view1.OnMouseEnterCalled);
@@ -332,12 +292,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (1, view1.OnMouseEnterCalled);
@@ -350,12 +305,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (1, view1.OnMouseEnterCalled);
@@ -368,12 +318,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (1, view1.OnMouseEnterCalled);
@@ -425,12 +370,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (0, view1.OnMouseEnterCalled);
@@ -443,12 +383,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (1, view1.OnMouseEnterCalled);
@@ -461,12 +396,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (2, view1.OnMouseEnterCalled);
@@ -479,12 +409,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (2, view1.OnMouseEnterCalled);
@@ -497,12 +422,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (3, view1.OnMouseEnterCalled);
@@ -515,12 +435,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (3, view1.OnMouseEnterCalled);
@@ -533,12 +448,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (3, view1.OnMouseEnterCalled);
@@ -551,12 +461,7 @@ public class ApplicationMouseEnterLeaveTests
 
             Application.RaiseMouseEnterLeaveEvents (
                                                     mousePosition,
-                                                    View.GetViewsUnderMouse (mousePosition),
-                                                    new()
-                                                    {
-                                                        Position = mousePosition,
-                                                        ScreenPosition = mousePosition
-                                                    });
+                                                    View.GetViewsUnderMouse (mousePosition));
 
             // Assert
             Assert.Equal (4, view1.OnMouseEnterCalled);