mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-26 15:57:56 +01:00
Re enabled ViewDiagnostics.MouseEnter
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user