Parcourir la source

MouseEvent: int X, int Y -> Point Position

Tig il y a 1 an
Parent
commit
d391cc7ad2
62 fichiers modifiés avec 371 ajouts et 392 suppressions
  1. 17 21
      Terminal.Gui/Application.cs
  2. 2 2
      Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs
  3. 1 1
      Terminal.Gui/ConsoleDrivers/NetDriver.cs
  4. 5 8
      Terminal.Gui/ConsoleDrivers/WindowsDriver.cs
  5. 3 6
      Terminal.Gui/Input/Mouse.cs
  6. 3 3
      Terminal.Gui/Text/Autocomplete/PopupAutocomplete.cs
  7. 4 4
      Terminal.Gui/View/Adornment/Border.cs
  8. 2 2
      Terminal.Gui/View/ViewMouse.cs
  9. 1 1
      Terminal.Gui/Views/ColorPicker.cs
  10. 4 4
      Terminal.Gui/Views/ComboBox.cs
  11. 1 2
      Terminal.Gui/Views/DateField.cs
  12. 3 3
      Terminal.Gui/Views/FileDialog.cs
  13. 6 6
      Terminal.Gui/Views/HexView.cs
  14. 4 4
      Terminal.Gui/Views/ListView.cs
  15. 10 11
      Terminal.Gui/Views/Menu/Menu.cs
  16. 9 6
      Terminal.Gui/Views/Menu/MenuBar.cs
  17. 2 2
      Terminal.Gui/Views/RadioGroup.cs
  18. 1 1
      Terminal.Gui/Views/ScrollBarView.cs
  19. 2 2
      Terminal.Gui/Views/ScrollView.cs
  20. 6 6
      Terminal.Gui/Views/Slider.cs
  21. 1 1
      Terminal.Gui/Views/StatusBar.cs
  22. 1 1
      Terminal.Gui/Views/TableView/CheckBoxTableSourceWrapper.cs
  23. 35 4
      Terminal.Gui/Views/TableView/TableView.cs
  24. 1 1
      Terminal.Gui/Views/TableView/TreeTableSource.cs
  25. 1 1
      Terminal.Gui/Views/TextField.cs
  26. 1 1
      Terminal.Gui/Views/TextValidateField.cs
  27. 8 8
      Terminal.Gui/Views/TextView.cs
  28. 6 6
      Terminal.Gui/Views/TileView.cs
  29. 1 1
      Terminal.Gui/Views/TimeField.cs
  30. 3 3
      Terminal.Gui/Views/TreeView/TreeView.cs
  31. 8 8
      UICatalog/Scenarios/CharacterMap.cs
  32. 2 2
      UICatalog/Scenarios/ContextMenus.cs
  33. 2 2
      UICatalog/Scenarios/LineDrawing.cs
  34. 1 1
      UICatalog/Scenarios/ListColumns.cs
  35. 4 4
      UICatalog/Scenarios/Mouse.cs
  36. 1 1
      UICatalog/Scenarios/Notepad.cs
  37. 1 1
      UICatalog/Scenarios/Scrolling.cs
  38. 2 2
      UICatalog/Scenarios/TableEditor.cs
  39. 3 3
      UICatalog/Scenarios/TreeViewFileSystem.cs
  40. 3 3
      UnitTests/Application/ApplicationTests.cs
  41. 14 14
      UnitTests/Application/MouseTests.cs
  42. 2 2
      UnitTests/Input/EscSeqUtilsTests.cs
  43. 1 1
      UnitTests/Text/AutocompleteTests.cs
  44. 9 9
      UnitTests/View/MouseTests.cs
  45. 3 3
      UnitTests/Views/CheckBoxTests.cs
  46. 1 1
      UnitTests/Views/ColorPickerTests.cs
  47. 27 27
      UnitTests/Views/ComboBoxTests.cs
  48. 15 15
      UnitTests/Views/ContextMenuTests.cs
  49. 1 1
      UnitTests/Views/LabelTests.cs
  50. 5 13
      UnitTests/Views/ListViewTests.cs
  51. 43 43
      UnitTests/Views/MenuBarTests.cs
  52. 2 5
      UnitTests/Views/OverlappedTests.cs
  53. 2 2
      UnitTests/Views/ScrollBarViewTests.cs
  54. 1 1
      UnitTests/Views/StatusBarTests.cs
  55. 9 9
      UnitTests/Views/TabViewTests.cs
  56. 7 7
      UnitTests/Views/TableViewTests.cs
  57. 8 8
      UnitTests/Views/TextFieldTests.cs
  58. 1 1
      UnitTests/Views/TextValidateFieldTests.cs
  59. 13 13
      UnitTests/Views/TextViewTests.cs
  60. 28 60
      UnitTests/Views/ToplevelTests.cs
  61. 4 4
      UnitTests/Views/TreeTableSourceTests.cs
  62. 4 4
      UnitTests/Views/TreeViewTests.cs

+ 17 - 21
Terminal.Gui/Application.cs

@@ -1556,7 +1556,7 @@ public static partial class Application
             return;
         }
 
-        var view = View.FindDeepestView (Current, new (mouseEvent.X, mouseEvent.Y));
+        var view = View.FindDeepestView (Current, mouseEvent.Position);
 
         if (view is { })
         {
@@ -1574,18 +1574,17 @@ public static partial class Application
         {
             // If the mouse is grabbed, send the event to the view that grabbed it.
             // The coordinates are relative to the Bounds of the view that grabbed the mouse.
-            Point frameLoc = MouseGrabView.ScreenToViewport (new (mouseEvent.X, mouseEvent.Y));
+            Point frameLoc = MouseGrabView.ScreenToViewport (mouseEvent.Position);
 
             var viewRelativeMouseEvent = new MouseEvent
             {
-                X = frameLoc.X,
-                Y = frameLoc.Y,
+                Position = frameLoc,
                 Flags = mouseEvent.Flags,
-                ScreenPosition = new (mouseEvent.X, mouseEvent.Y),
+                ScreenPosition = mouseEvent.Position,
                 View = MouseGrabView
             };
 
-            if ((MouseGrabView.Viewport with { Location = Point.Empty }).Contains (viewRelativeMouseEvent.X, viewRelativeMouseEvent.Y) is false)
+            if ((MouseGrabView.Viewport with { Location = Point.Empty }).Contains (viewRelativeMouseEvent.Position) is false)
             {
                 // The mouse has moved outside the bounds of the view that grabbed the mouse
                 _mouseEnteredView?.NewMouseLeaveEvent (mouseEvent);
@@ -1618,8 +1617,8 @@ public static partial class Application
             {
                 // This occurs when there are multiple overlapped "tops"
                 // E.g. "Mdi" - in the Background Worker Scenario
-                View? top = FindDeepestTop (Top, mouseEvent.X, mouseEvent.Y);
-                view = View.FindDeepestView (top, new (mouseEvent.X, mouseEvent.Y));
+                View? top = FindDeepestTop (Top, mouseEvent.Position.X, mouseEvent.Position.Y);
+                view = View.FindDeepestView (top, mouseEvent.Position);
 
                 if (view is { } && view != OverlappedTop && top != Current)
                 {
@@ -1637,27 +1636,25 @@ public static partial class Application
 
         if (view is Adornment adornment)
         {
-            Point frameLoc = adornment.ScreenToFrame (new (mouseEvent.X, mouseEvent.Y));
+            Point frameLoc = adornment.ScreenToFrame (mouseEvent.Position);
 
             me = new ()
             {
-                X = frameLoc.X,
-                Y = frameLoc.Y,
+                Position = frameLoc,
                 Flags = mouseEvent.Flags,
-                ScreenPosition = new (mouseEvent.X, mouseEvent.Y),
+                ScreenPosition = mouseEvent.Position,
                 View = view
             };
         }
-        else if (view.ViewportToScreen (Rectangle.Empty with { Size = view.Viewport.Size }).Contains (mouseEvent.X, mouseEvent.Y))
+        else if (view.ViewportToScreen (Rectangle.Empty with { Size = view.Viewport.Size }).Contains (mouseEvent.Position))
         {
-            Point viewportLocation = view.ScreenToViewport (new (mouseEvent.X, mouseEvent.Y));
+            Point viewportLocation = view.ScreenToViewport (mouseEvent.Position);
 
             me = new ()
             {
-                X = viewportLocation.X,
-                Y = viewportLocation.Y,
+                Position = viewportLocation,
                 Flags = mouseEvent.Flags,
-                ScreenPosition = new (mouseEvent.X, mouseEvent.Y),
+                ScreenPosition = mouseEvent.Position,
                 View = view
             };
         }
@@ -1709,14 +1706,13 @@ public static partial class Application
                 break;
             }
 
-            Point boundsPoint = view.ScreenToViewport (new (mouseEvent.X, mouseEvent.Y));
+            Point boundsPoint = view.ScreenToViewport (mouseEvent.Position);
 
             me = new ()
             {
-                X = boundsPoint.X,
-                Y = boundsPoint.Y,
+                Position = boundsPoint,
                 Flags = mouseEvent.Flags,
-                ScreenPosition = new (mouseEvent.X, mouseEvent.Y),
+                ScreenPosition = mouseEvent.Position,
                 View = view
             };
         }

+ 2 - 2
Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs

@@ -819,8 +819,8 @@ internal class CursesDriver : ConsoleDriver
 
         _lastMouseFlags = mouseFlag;
 
-        var me = new MouseEvent { Flags = mouseFlag, X = pos.X, Y = pos.Y };
-        Debug.WriteLine ($"CursesDriver: ({me.X},{me.Y}) - {me.Flags}");
+        var me = new MouseEvent { Flags = mouseFlag, Position = pos };
+        //Debug.WriteLine ($"CursesDriver: ({me.Position}) - {me.Flags}");
 
         OnMouseEvent (me);
     }

+ 1 - 1
Terminal.Gui/ConsoleDrivers/NetDriver.cs

@@ -1523,7 +1523,7 @@ internal class NetDriver : ConsoleDriver
             mouseFlag |= MouseFlags.ButtonAlt;
         }
 
-        return new MouseEvent { X = me.Position.X, Y = me.Position.Y, Flags = mouseFlag };
+        return new MouseEvent { Position = me.Position, Flags = mouseFlag };
     }
 
     #endregion Mouse Handling

+ 5 - 8
Terminal.Gui/ConsoleDrivers/WindowsDriver.cs

@@ -157,7 +157,7 @@ internal class WindowsConsole
             }
         }
 
-        SetInitialCursorVisibility();
+        SetInitialCursorVisibility ();
 
         if (!SetConsoleActiveScreenBuffer (_screenBuffer))
         {
@@ -1483,7 +1483,7 @@ internal class WindowsDriver : ConsoleDriver
             case WindowsConsole.EventType.Mouse:
                 MouseEvent me = ToDriverMouse (inputEvent.MouseEvent);
 
-               if (me is null || me.Flags == MouseFlags.None)
+                if (me is null || me.Flags == MouseFlags.None)
                 {
                     break;
                 }
@@ -1494,8 +1494,7 @@ internal class WindowsDriver : ConsoleDriver
                 {
                     OnMouseEvent (new ()
                     {
-                        X = me.X,
-                        Y = me.Y,
+                        Position = me.Position,
                         Flags = ProcessButtonClick (inputEvent.MouseEvent)
                     });
                 }
@@ -1814,8 +1813,7 @@ internal class WindowsDriver : ConsoleDriver
         {
             var me = new MouseEvent
             {
-                X = _pointMove.X,
-                Y = _pointMove.Y,
+                Position = _pointMove,
                 Flags = mouseFlag
             };
 
@@ -2129,8 +2127,7 @@ internal class WindowsDriver : ConsoleDriver
 
         return new MouseEvent
         {
-            X = mouseEvent.MousePosition.X,
-            Y = mouseEvent.MousePosition.Y,
+            Position = new (mouseEvent.MousePosition.X, mouseEvent.MousePosition.Y),
             Flags = mouseFlag
         };
     }

+ 3 - 6
Terminal.Gui/Input/Mouse.cs

@@ -116,11 +116,8 @@ public class MouseEvent
     /// <summary>The View at the location for the mouse event.</summary>
     public View View { get; set; }
 
-    /// <summary>The X position of the mouse in <see cref="Gui.View.Viewport"/>-relative coordinates.</summary>
-    public int X { get; set; }
-
-    /// <summary>The Y position of the mouse in <see cref="Gui.View.Viewport"/>-relative coordinates.</summary>
-    public int Y { get; set; }
+    /// <summary>The position of the mouse in <see cref="Gui.View.Viewport"/>-relative coordinates.</summary>
+    public Point Position { get; set; }
 
     /// <summary>
     ///     Indicates if the current mouse event has been processed. Set this value to <see langword="true"/> to indicate the mouse
@@ -145,5 +142,5 @@ public class MouseEvent
 
     /// <summary>Returns a <see cref="T:System.String"/> that represents the current <see cref="MouseEvent"/>.</summary>
     /// <returns>A <see cref="T:System.String"/> that represents the current <see cref="MouseEvent"/>.</returns>
-    public override string ToString () { return $"({X},{Y}):{Flags}"; }
+    public override string ToString () { return $"({Position}):{Flags}"; }
 }

+ 3 - 3
Terminal.Gui/Text/Autocomplete/PopupAutocomplete.cs

@@ -143,7 +143,7 @@ public abstract partial class PopupAutocomplete : AutocompleteBase
 
         if (me.Flags == MouseFlags.Button1Clicked)
         {
-            SelectedIdx = me.Y - ScrollOffset;
+            SelectedIdx = me.Position.Y - ScrollOffset;
 
             return Select ();
         }
@@ -465,9 +465,9 @@ public abstract partial class PopupAutocomplete : AutocompleteBase
     /// <param name="me"></param>
     protected void RenderSelectedIdxByMouse (MouseEvent me)
     {
-        if (SelectedIdx != me.Y - ScrollOffset)
+        if (SelectedIdx != me.Position.Y - ScrollOffset)
         {
-            SelectedIdx = me.Y - ScrollOffset;
+            SelectedIdx = me.Position.Y - ScrollOffset;
 
             if (LastPopupPos is { })
             {

+ 4 - 4
Terminal.Gui/View/Adornment/Border.cs

@@ -273,11 +273,11 @@ public class Border : Adornment
 
             // Only start grabbing if the user clicks in the Thickness area
             // Adornment.Contains takes Parent SuperView=relative coords.
-            if (Contains (new (mouseEvent.X + Parent.Frame.X + Frame.X, mouseEvent.Y + Parent.Frame.Y + Frame.Y)))
+            if (Contains (new (mouseEvent.Position.X + Parent.Frame.X + Frame.X, mouseEvent.Position.Y + Parent.Frame.Y + Frame.Y)))
             {
                 // Set the start grab point to the Frame coords
-                _startGrabPoint = new (mouseEvent.X + Frame.X, mouseEvent.Y + Frame.Y);
-                _dragPosition = new (mouseEvent.X, mouseEvent.Y);
+                _startGrabPoint = new (mouseEvent.Position.X + Frame.X, mouseEvent.Position.Y + Frame.Y);
+                _dragPosition = mouseEvent.Position;
                 Application.GrabMouse (this);
                 SetHighlight (HighlightStyle);
             }
@@ -299,7 +299,7 @@ public class Border : Adornment
                     Parent.SuperView.SetNeedsDisplay ();
                 }
 
-                _dragPosition = new Point (mouseEvent.X, mouseEvent.Y);
+                _dragPosition = mouseEvent.Position;
 
                 Point parentLoc = Parent.SuperView?.ScreenToViewport (new (mouseEvent.ScreenPosition.X, mouseEvent.ScreenPosition.Y)) ?? mouseEvent.ScreenPosition;
 

+ 2 - 2
Terminal.Gui/View/ViewMouse.cs

@@ -333,7 +333,7 @@ public partial class View
                 mouseEvent.Handled = true;
             }
 
-            if (Viewport.Contains (mouseEvent.X, mouseEvent.Y))
+            if (Viewport.Contains (mouseEvent.Position))
             {
                 if (SetHighlight (HighlightStyle.HasFlag (HighlightStyle.Pressed) ? HighlightStyle.Pressed : HighlightStyle.None) == true)
                 {
@@ -414,7 +414,7 @@ public partial class View
             }
 
             // If mouse is still in bounds, click
-            if (!WantContinuousButtonPressed && Viewport.Contains (mouseEvent.X, mouseEvent.Y))
+            if (!WantContinuousButtonPressed && Viewport.Contains (mouseEvent.Position))
             {
                 return OnMouseClick (new (mouseEvent));
             }

+ 1 - 1
Terminal.Gui/Views/ColorPicker.cs

@@ -53,7 +53,7 @@ public class ColorPicker : View
     {
         if (CanFocus)
         {
-            Cursor = new Point (me.MouseEvent.X / _boxWidth, me.MouseEvent.Y / _boxHeight);
+            Cursor = new Point (me.MouseEvent.Position.X / _boxWidth, me.MouseEvent.Position.Y / _boxHeight);
             SetFocus ();
             me.Handled = true;
         }

+ 4 - 4
Terminal.Gui/Views/ComboBox.cs

@@ -245,8 +245,8 @@ public class ComboBox : View
     /// <inheritdoc/>
     protected internal override bool OnMouseEvent  (MouseEvent me)
     {
-        if (me.X == Viewport.Right - 1
-            && me.Y == Viewport.Top
+        if (me.Position.X == Viewport.Right - 1
+            && me.Position.Y == Viewport.Top
             && me.Flags == MouseFlags.Button1Pressed
             && _autoHide)
         {
@@ -828,7 +828,7 @@ public class ComboBox : View
             {
                 if (isMousePositionValid)
                 {
-                    _highlighted = Math.Min (TopItem + me.Y, Source.Count);
+                    _highlighted = Math.Min (TopItem + me.Position.Y, Source.Count);
                     SetNeedsDisplay ();
                 }
 
@@ -946,7 +946,7 @@ public class ComboBox : View
 
         private bool IsMousePositionValid (MouseEvent me)
         {
-            if (me.X >= 0 && me.X < Frame.Width && me.Y >= 0 && me.Y < Frame.Height)
+            if (me.Position.X >= 0 && me.Position.X < Frame.Width && me.Position.Y >= 0 && me.Position.Y < Frame.Height)
             {
                 return true;
             }

+ 1 - 2
Terminal.Gui/Views/DateField.cs

@@ -120,8 +120,7 @@ public class DateField : TextField
 
         if (result && SelectedLength == 0 && ev.Flags.HasFlag (MouseFlags.Button1Pressed))
         {
-            int point = ev.X;
-            AdjCursorPosition (point);
+            AdjCursorPosition (ev.Position.X);
         }
 
         return result;

+ 3 - 3
Terminal.Gui/Views/FileDialog.cs

@@ -1071,7 +1071,7 @@ public class FileDialog : Dialog
 
     private void OnTableViewMouseClick (object sender, MouseEventEventArgs e)
     {
-        Point? clickedCell = _tableView.ScreenToCell (e.MouseEvent.X, e.MouseEvent.Y, out int? clickedCol);
+        Point? clickedCell = _tableView.ScreenToCell (e.MouseEvent.Position.X, e.MouseEvent.Position.Y, out int? clickedCol);
 
         if (clickedCol is { })
         {
@@ -1269,7 +1269,7 @@ public class FileDialog : Dialog
 
         var contextMenu = new ContextMenu
         {
-            Position = new Point (e.MouseEvent.X + 1, e.MouseEvent.Y + 1),
+            Position = new Point (e.MouseEvent.Position.X + 1, e.MouseEvent.Position.Y + 1),
             MenuItems = new MenuBarItem (
                                          [
                                              new MenuItem (Strings.fdCtxNew, string.Empty, New),
@@ -1290,7 +1290,7 @@ public class FileDialog : Dialog
 
         var contextMenu = new ContextMenu
         {
-            Position = new Point (e.MouseEvent.X + 1, e.MouseEvent.Y + 1),
+            Position = new Point (e.MouseEvent.Position.X + 1, e.MouseEvent.Position.Y + 1),
             MenuItems = new MenuBarItem (
                                          [
                                              new MenuItem (

+ 6 - 6
Terminal.Gui/Views/HexView.cs

@@ -278,7 +278,7 @@ public class HexView : View
             return true;
         }
 
-        if (me.X < displayWidth)
+        if (me.Position.X < displayWidth)
         {
             return true;
         }
@@ -287,14 +287,14 @@ public class HexView : View
         int blocksSize = nblocks * 14;
         int blocksRightOffset = displayWidth + blocksSize - 1;
 
-        if (me.X > blocksRightOffset + bytesPerLine - 1)
+        if (me.Position.X > blocksRightOffset + bytesPerLine - 1)
         {
             return true;
         }
 
-        leftSide = me.X >= blocksRightOffset;
-        long lineStart = me.Y * bytesPerLine + displayStart;
-        int x = me.X - displayWidth + 1;
+        leftSide = me.Position.X >= blocksRightOffset;
+        long lineStart = me.Position.Y * bytesPerLine + displayStart;
+        int x = me.Position.X - displayWidth + 1;
         int block = x / 14;
         x -= block * 2;
         int empty = x % 3;
@@ -309,7 +309,7 @@ public class HexView : View
 
         if (leftSide)
         {
-            position = Math.Min (lineStart + me.X - blocksRightOffset, source.Length);
+            position = Math.Min (lineStart + me.Position.X - blocksRightOffset, source.Length);
         }
         else
         {

+ 4 - 4
Terminal.Gui/Views/ListView.cs

@@ -413,14 +413,14 @@ public class ListView : View
             return true;
         }
 
-        if (me.Y + Viewport.Y >= _source.Count
-            || me.Y + Viewport.Y < 0
-            || me.Y + Viewport.Y > Viewport.Y + Viewport.Height)
+        if (me.Position.Y + Viewport.Y >= _source.Count
+            || me.Position.Y + Viewport.Y < 0
+            || me.Position.Y + Viewport.Y > Viewport.Y + Viewport.Height)
         {
             return true;
         }
 
-        _selected = Viewport.Y + me.Y;
+        _selected = Viewport.Y + me.Position.Y;
 
         if (AllowsAll ())
         {

+ 10 - 11
Terminal.Gui/Views/Menu/Menu.cs

@@ -726,13 +726,12 @@ internal sealed class Menu : View
 
         View view = a.View ?? this;
 
-        Point boundsPoint = view.ScreenToViewport (new (a.X, a.Y));
+        Point boundsPoint = view.ScreenToViewport (new (a.Position.X, a.Position.Y));
         var me = new MouseEvent
         {
-            X = boundsPoint.X,
-            Y = boundsPoint.Y,
+            Position = boundsPoint,
             Flags = a.Flags,
-            ScreenPosition = new (a.X, a.Y),
+            ScreenPosition = a.Position,
             View = view
         };
 
@@ -1191,17 +1190,17 @@ internal sealed class Menu : View
         {
             disabled = false;
 
-            if (me.Y < 0)
+            if (me.Position.Y < 0)
             {
                 return me.Handled = true;
             }
 
-            if (me.Y >= _barItems.Children.Length)
+            if (me.Position.Y >= _barItems.Children.Length)
             {
                 return me.Handled = true;
             }
 
-            MenuItem item = _barItems.Children [me.Y];
+            MenuItem item = _barItems.Children [me.Position.Y];
 
             if (item is null || !item.IsEnabled ())
             {
@@ -1213,7 +1212,7 @@ internal sealed class Menu : View
                 return me.Handled = true;
             }
 
-            _currentChild = me.Y;
+            _currentChild = me.Position.Y;
             RunSelected ();
 
             return me.Handled = true;
@@ -1231,12 +1230,12 @@ internal sealed class Menu : View
         {
             disabled = false;
 
-            if (me.Y < 0 || me.Y >= _barItems.Children.Length)
+            if (me.Position.Y < 0 || me.Position.Y >= _barItems.Children.Length)
             {
                 return me.Handled = true;
             }
 
-            MenuItem item = _barItems.Children [me.Y];
+            MenuItem item = _barItems.Children [me.Position.Y];
 
             if (item is null)
             {
@@ -1250,7 +1249,7 @@ internal sealed class Menu : View
 
             if (!disabled)
             {
-                _currentChild = me.Y;
+                _currentChild = me.Position.Y;
             }
 
             if (_host.UseSubMenusSingleFrame || !CheckSubMenu ())

+ 9 - 6
Terminal.Gui/Views/Menu/MenuBar.cs

@@ -1689,7 +1689,7 @@ public class MenuBar : View
                 locationOffset.Y += SuperView.Border.Thickness.Top;
             }
 
-            int cx = me.X - locationOffset.X;
+            int cx = me.Position.X - locationOffset.X;
 
             for (var i = 0; i < Menus.Length; i++)
             {
@@ -1803,21 +1803,24 @@ public class MenuBar : View
                     Application.GrabMouse (v);
                     MouseEvent nme;
 
-                    if (me.Y > -1)
+                    if (me.Position.Y > -1)
                     {
-                        Point frameLoc = v.ScreenToFrame (new (me.X, me.Y));
+                        Point frameLoc = v.ScreenToFrame (me.Position);
 
                         nme = new ()
                         {
-                            X = frameLoc.X,
-                            Y = frameLoc.Y,
+                            Position = frameLoc,
                             Flags = me.Flags,
                             View = v
                         };
                     }
                     else
                     {
-                        nme = new () { X = me.X + current.Frame.X, Y = 0, Flags = me.Flags, View = v };
+                        nme = new ()
+                        {
+                            Position = new (me.Position.X + current.Frame.X, me.Position.Y + current.Frame.Y),
+                            Flags = me.Flags, View = v
+                        };
                     }
 
                     v.NewMouseEvent (nme);

+ 2 - 2
Terminal.Gui/Views/RadioGroup.cs

@@ -88,8 +88,8 @@ public class RadioGroup : View
     {
         SetFocus ();
 
-        int boundsX = e.MouseEvent.X;
-        int boundsY = e.MouseEvent.Y;
+        int boundsX = e.MouseEvent.Position.X;
+        int boundsY = e.MouseEvent.Position.Y;
 
         int pos = _orientation == Orientation.Horizontal ? boundsX : boundsY;
 

+ 1 - 1
Terminal.Gui/Views/ScrollBarView.cs

@@ -299,7 +299,7 @@ public class ScrollBarView : View
             Host.SetFocus ();
         }
 
-        int location = _vertical ? mouseEvent.Y : mouseEvent.X;
+        int location = _vertical ? mouseEvent.Position.Y : mouseEvent.Position.X;
         int barsize = _vertical ? Viewport.Height : Viewport.Width;
         int posTopLeftTee = _vertical ? _posTopTee + 1 : _posLeftTee + 1;
         int posBottomRightTee = _vertical ? _posBottomTee + 1 : _posRightTee + 1;

+ 2 - 2
Terminal.Gui/Views/ScrollView.cs

@@ -427,11 +427,11 @@ public class ScrollView : View
         {
             ScrollLeft (1);
         }
-        else if (me.X == _vertical.Frame.X && ShowVerticalScrollIndicator)
+        else if (me.Position.X == _vertical.Frame.X && ShowVerticalScrollIndicator)
         {
             _vertical.NewMouseEvent (me);
         }
-        else if (me.Y == _horizontal.Frame.Y && ShowHorizontalScrollIndicator)
+        else if (me.Position.Y == _horizontal.Frame.Y && ShowHorizontalScrollIndicator)
         {
             _horizontal.NewMouseEvent (me);
         }

+ 6 - 6
Terminal.Gui/Views/Slider.cs

@@ -1465,7 +1465,7 @@ public class Slider<T> : View
         {
             if (mouseEvent.Flags.HasFlag (MouseFlags.ReportMousePosition))
             {
-                _dragPosition = new Point (mouseEvent.X, mouseEvent.Y);
+                _dragPosition = mouseEvent.Position;
                 _moveRenderPosition = ClampMovePosition ((Point)_dragPosition);
                 Application.GrabMouse (this);
             }
@@ -1480,7 +1480,7 @@ public class Slider<T> : View
             && mouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed))
         {
             // Continue Drag
-            _dragPosition = new Point (mouseEvent.X, mouseEvent.Y);
+            _dragPosition = mouseEvent.Position;
             _moveRenderPosition = ClampMovePosition ((Point)_dragPosition);
 
             var success = false;
@@ -1489,11 +1489,11 @@ public class Slider<T> : View
             // how far has user dragged from original location?						
             if (Orientation == Orientation.Horizontal)
             {
-                success = TryGetOptionByPosition (mouseEvent.X, 0, Math.Max (0, _config._innerSpacing / 2), out option);
+                success = TryGetOptionByPosition (mouseEvent.Position.X, 0, Math.Max (0, _config._innerSpacing / 2), out option);
             }
             else
             {
-                success = TryGetOptionByPosition (0, mouseEvent.Y, Math.Max (0, _config._innerSpacing / 2), out option);
+                success = TryGetOptionByPosition (0, mouseEvent.Position.Y, Math.Max (0, _config._innerSpacing / 2), out option);
             }
 
             if (!_config._allowEmpty && success)
@@ -1523,11 +1523,11 @@ public class Slider<T> : View
 
             if (Orientation == Orientation.Horizontal)
             {
-                success = TryGetOptionByPosition (mouseEvent.X, 0, Math.Max (0, _config._innerSpacing / 2), out option);
+                success = TryGetOptionByPosition (mouseEvent.Position.X, 0, Math.Max (0, _config._innerSpacing / 2), out option);
             }
             else
             {
-                success = TryGetOptionByPosition (0, mouseEvent.Y, Math.Max (0, _config._innerSpacing / 2), out option);
+                success = TryGetOptionByPosition (0, mouseEvent.Position.Y, Math.Max (0, _config._innerSpacing / 2), out option);
             }
 
             if (success)

+ 1 - 1
Terminal.Gui/Views/StatusBar.cs

@@ -153,7 +153,7 @@ public class StatusBar : View
 
         for (var i = 0; i < Items.Length; i++)
         {
-            if (me.X >= pos && me.X < pos + GetItemTitleLength (Items [i].Title))
+            if (me.Position.X >= pos && me.Position.X < pos + GetItemTitleLength (Items [i].Title))
             {
                 StatusItem item = Items [i];
 

+ 1 - 1
Terminal.Gui/Views/TableView/CheckBoxTableSourceWrapper.cs

@@ -158,7 +158,7 @@ public abstract class CheckBoxTableSourceWrapperBase : ITableSource
             return;
         }
 
-        Point? hit = tableView.ScreenToCell (e.MouseEvent.X, e.MouseEvent.Y, out int? headerIfAny);
+        Point? hit = tableView.ScreenToCell (e.MouseEvent.Position.X, e.MouseEvent.Position.Y, out int? headerIfAny);
 
         if (headerIfAny.HasValue && headerIfAny.Value == 0)
         {

+ 35 - 4
Terminal.Gui/Views/TableView/TableView.cs

@@ -841,8 +841,8 @@ public class TableView : View
                 return true;
         }
 
-        int boundsX = me.X;
-        int boundsY = me.Y;
+        int boundsX = me.Position.X;
+        int boundsY = me.Position.Y;
 
         if (me.Flags.HasFlag (MouseFlags.Button1Clicked))
         {
@@ -1035,7 +1035,7 @@ public class TableView : View
     }
 
     /// <summary>
-    ///     . Returns the column and row of <see cref="Table"/> that corresponds to a given point on the screen (relative
+    ///     Returns the column and row of <see cref="Table"/> that corresponds to a given point on the screen (relative
     ///     to the control client area).  Returns null if the point is in the header, no table is loaded or outside the control
     ///     bounds.
     /// </summary>
@@ -1044,6 +1044,15 @@ public class TableView : View
     /// <returns>Cell clicked or null.</returns>
     public Point? ScreenToCell (int clientX, int clientY) { return ScreenToCell (clientX, clientY, out _, out _); }
 
+    /// <summary>
+    ///     Returns the column and row of <see cref="Table"/> that corresponds to a given point on the screen (relative
+    ///     to the control client area).  Returns null if the point is in the header, no table is loaded or outside the control
+    ///     bounds.
+    /// </summary>
+    /// <param name="client">offset from the top left of the control.</param>
+    /// <retur
+    public Point? ScreenToCell (Point client) { return ScreenToCell (client, out _, out _); }
+
     /// <summary>
     ///     . Returns the column and row of <see cref="Table"/> that corresponds to a given point on the screen (relative
     ///     to the control client area).  Returns null if the point is in the header, no table is loaded or outside the control
@@ -1055,7 +1064,16 @@ public class TableView : View
     public Point? ScreenToCell (int clientX, int clientY, out int? headerIfAny) { return ScreenToCell (clientX, clientY, out headerIfAny, out _); }
 
     /// <summary>
-    ///     . Returns the column and row of <see cref="Table"/> that corresponds to a given point on the screen (relative
+    ///     Returns the column and row of <see cref="Table"/> that corresponds to a given point on the screen (relative
+    ///     to the control client area).  Returns null if the point is in the header, no table is loaded or outside the control
+    ///     bounds.
+    /// </summary>
+    /// <param name="client">offset from the top left of the control.</param>
+    /// <param name="headerIfAny">If the click is in a header this is the column clicked.</param>
+    public Point? ScreenToCell (Point client, out int? headerIfAny) { return ScreenToCell (client, out headerIfAny, out _); }
+
+    /// <summary>
+    ///     Returns the column and row of <see cref="Table"/> that corresponds to a given point on the screen (relative
     ///     to the control client area).  Returns null if the point is in the header, no table is loaded or outside the control
     ///     bounds.
     /// </summary>
@@ -1107,6 +1125,19 @@ public class TableView : View
         return null;
     }
 
+    /// <summary>
+    ///     Returns the column and row of <see cref="Table"/> that corresponds to a given point on the screen (relative
+    ///     to the control client area).  Returns null if the point is in the header, no table is loaded or outside the control
+    ///     bounds.
+    /// </summary>
+    /// <param name="client">offset from the top left of the control.</param>
+    /// <param name="headerIfAny">If the click is in a header this is the column clicked.</param>
+    /// <param name="offsetX">The horizontal offset of the click within the returned cell.</param>
+    public Point? ScreenToCell (Point client, out int? headerIfAny, out int? offsetX)
+    {
+        return ScreenToCell (client.X, client.Y, out headerIfAny, out offsetX);
+    }
+
     /// <summary>
     ///     When <see cref="MultiSelect"/> is on, creates selection over all cells in the table (replacing any old
     ///     selection regions)

+ 1 - 1
Terminal.Gui/Views/TableView/TreeTableSource.cs

@@ -168,7 +168,7 @@ public class TreeTableSource<T> : IEnumerableTableSource<T>, IDisposable where T
 
     private void Table_MouseClick (object sender, MouseEventEventArgs e)
     {
-        Point? hit = _tableView.ScreenToCell (e.MouseEvent.X, e.MouseEvent.Y, out int? headerIfAny, out int? offsetX);
+        Point? hit = _tableView.ScreenToCell (e.MouseEvent.Position.X, e.MouseEvent.Position.Y, out int? headerIfAny, out int? offsetX);
 
         if (hit is null || headerIfAny is { } || !IsInTreeColumn (hit.Value.X, false) || offsetX is null)
         {

+ 1 - 1
Terminal.Gui/Views/TextField.cs

@@ -1680,7 +1680,7 @@ public class TextField : View
 
     private int PositionCursor (MouseEvent ev)
     {
-        return PositionCursor (TextModel.GetColFromX (_text, ScrollOffset, ev.X), false);
+        return PositionCursor (TextModel.GetColFromX (_text, ScrollOffset, ev.Position.X), false);
     }
 
     private int PositionCursor (int x, bool getX = true)

+ 1 - 1
Terminal.Gui/Views/TextValidateField.cs

@@ -537,7 +537,7 @@ namespace Terminal.Gui
         {
             if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed))
             {
-                int c = _provider.Cursor (mouseEvent.X - GetMargins (Viewport.Width).left);
+                int c = _provider.Cursor (mouseEvent.Position.X - GetMargins (Viewport.Width).left);
 
                 if (_provider.Fixed == false && TextAlignment == TextAlignment.Right && Text.Length > 0)
                 {

+ 8 - 8
Terminal.Gui/Views/TextView.cs

@@ -3400,11 +3400,11 @@ public class TextView : View
                 {
                     ScrollTo (_topRow - Frame.Height);
                 }
-                else if (ev.Y >= Frame.Height)
+                else if (ev.Position.Y >= Frame.Height)
                 {
                     ScrollTo (_model.Count + BottomOffset);
                 }
-                else if (ev.Y < 0 && _topRow > 0)
+                else if (ev.Position.Y < 0 && _topRow > 0)
                 {
                     ScrollTo (0);
                 }
@@ -3417,11 +3417,11 @@ public class TextView : View
                 {
                     ScrollTo (_leftColumn - Frame.Width, false);
                 }
-                else if (ev.X >= Frame.Width)
+                else if (ev.Position.X >= Frame.Width)
                 {
                     ScrollTo (line.Count + RightOffset, false);
                 }
-                else if (ev.X < 0 && _leftColumn > 0)
+                else if (ev.Position.X < 0 && _leftColumn > 0)
                 {
                     ScrollTo (0, false);
                 }
@@ -3538,7 +3538,7 @@ public class TextView : View
         }
         else if (ev.Flags == ContextMenu!.MouseFlags)
         {
-            ContextMenu.Position = new (ev.X + 2, ev.Y + 2);
+            ContextMenu.Position = new (ev.Position.X + 2, ev.Position.Y + 2);
             ShowContextMenu ();
         }
 
@@ -5825,17 +5825,17 @@ public class TextView : View
         {
             int maxCursorPositionableLine = Math.Max (_model.Count - 1 - _topRow, 0);
 
-            if (Math.Max (ev.Y, 0) > maxCursorPositionableLine)
+            if (Math.Max (ev.Position.Y, 0) > maxCursorPositionableLine)
             {
                 CurrentRow = maxCursorPositionableLine + _topRow;
             }
             else
             {
-                CurrentRow = Math.Max (ev.Y + _topRow, 0);
+                CurrentRow = Math.Max (ev.Position.Y + _topRow, 0);
             }
 
             r = GetCurrentLine ();
-            int idx = TextModel.GetColFromX (r, _leftColumn, Math.Max (ev.X, 0), TabWidth);
+            int idx = TextModel.GetColFromX (r, _leftColumn, Math.Max (ev.Position.X, 0), TabWidth);
 
             if (idx - _leftColumn >= r.Count + RightOffset)
             {

+ 6 - 6
Terminal.Gui/Views/TileView.cs

@@ -912,7 +912,7 @@ public class TileView : View
 
                 if (mouseEvent.Flags == MouseFlags.Button1Pressed)
                 {
-                    dragPosition = new Point (mouseEvent.X, mouseEvent.Y);
+                    dragPosition = mouseEvent.Position;
                     dragOrignalPos = Orientation == Orientation.Horizontal ? Y : X;
                     Application.GrabMouse (this);
 
@@ -922,7 +922,7 @@ public class TileView : View
                     {
                         moveRuneRenderLocation = new Point (
                                                             0,
-                                                            Math.Max (1, Math.Min (Viewport.Height - 2, mouseEvent.Y))
+                                                            Math.Max (1, Math.Min (Viewport.Height - 2, mouseEvent.Position.Y))
                                                            );
                     }
                 }
@@ -938,15 +938,15 @@ public class TileView : View
                 // how far has user dragged from original location?						
                 if (Orientation == Orientation.Horizontal)
                 {
-                    int dy = mouseEvent.Y - dragPosition.Value.Y;
+                    int dy = mouseEvent.Position.Y - dragPosition.Value.Y;
                     Parent.SetSplitterPos (Idx, Offset (Y, dy));
-                    moveRuneRenderLocation = new Point (mouseEvent.X, 0);
+                    moveRuneRenderLocation = new Point (mouseEvent.Position.X, 0);
                 }
                 else
                 {
-                    int dx = mouseEvent.X - dragPosition.Value.X;
+                    int dx = mouseEvent.Position.X - dragPosition.Value.X;
                     Parent.SetSplitterPos (Idx, Offset (X, dx));
-                    moveRuneRenderLocation = new Point (0, Math.Max (1, Math.Min (Viewport.Height - 2, mouseEvent.Y)));
+                    moveRuneRenderLocation = new Point (0, Math.Max (1, Math.Min (Viewport.Height - 2, mouseEvent.Position.Y)));
                 }
 
                 Parent.SetNeedsDisplay ();

+ 1 - 1
Terminal.Gui/Views/TimeField.cs

@@ -169,7 +169,7 @@ public class TimeField : TextField
 
         if (result && SelectedLength == 0 && ev.Flags.HasFlag (MouseFlags.Button1Pressed))
         {
-            int point = ev.X;
+            int point = ev.Position.X;
             AdjCursorPosition (point);
         }
 

+ 3 - 3
Terminal.Gui/Views/TreeView/TreeView.cs

@@ -1028,14 +1028,14 @@ public class TreeView<T> : View, ITreeView where T : class
         if (me.Flags.HasFlag (MouseFlags.Button1Clicked))
         {
             // The line they clicked on a branch
-            Branch<T> clickedBranch = HitTest (me.Y);
+            Branch<T> clickedBranch = HitTest (me.Position.Y);
 
             if (clickedBranch is null)
             {
                 return false;
             }
 
-            bool isExpandToggleAttempt = clickedBranch.IsHitOnExpandableSymbol (Driver, me.X);
+            bool isExpandToggleAttempt = clickedBranch.IsHitOnExpandableSymbol (Driver, me.Position.X);
 
             // If we are already selected (double click)
             if (Equals (SelectedObject, clickedBranch.Model))
@@ -1078,7 +1078,7 @@ public class TreeView<T> : View, ITreeView where T : class
         if (ObjectActivationButton.HasValue && me.Flags.HasFlag (ObjectActivationButton.Value))
         {
             // The line they clicked on a branch
-            Branch<T> clickedBranch = HitTest (me.Y);
+            Branch<T> clickedBranch = HitTest (me.Position.Y);
 
             if (clickedBranch is null)
             {

+ 8 - 8
UICatalog/Scenarios/CharacterMap.cs

@@ -109,7 +109,7 @@ public class CharacterMap : Scenario
         // if user clicks the mouse in TableView
         _categoryList.MouseClick += (s, e) =>
                                     {
-                                        _categoryList.ScreenToCell (e.MouseEvent.X, e.MouseEvent.Y, out int? clickedCol);
+                                        _categoryList.ScreenToCell (e.MouseEvent.Position, out int? clickedCol);
 
                                         if (clickedCol != null && e.MouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked))
                                         {
@@ -850,18 +850,18 @@ internal class CharMap : View
             return;
         }
 
-        if (me.Y == 0)
+        if (me.Position.Y == 0)
         {
-            me.Y = Cursor.Y;
+            me.Position = me.Position with { Y = Cursor.Y };
         }
 
-        if (me.X < RowLabelWidth || me.X > RowLabelWidth + 16 * COLUMN_WIDTH - 1)
+        if (me.Position.X < RowLabelWidth || me.Position.X > RowLabelWidth + 16 * COLUMN_WIDTH - 1)
         {
-            me.X = Cursor.X;
+            me.Position = me.Position with { X = Cursor.X };
         }
 
-        int row = (me.Y - 1 - -Viewport.Y) / _rowHeight; // -1 for header
-        int col = (me.X - RowLabelWidth - -Viewport.X) / COLUMN_WIDTH;
+        int row = (me.Position.Y - 1 - -Viewport.Y) / _rowHeight; // -1 for header
+        int col = (me.Position.X - RowLabelWidth - -Viewport.X) / COLUMN_WIDTH;
 
         if (col > 15)
         {
@@ -907,7 +907,7 @@ internal class CharMap : View
 
             _contextMenu = new ()
             {
-                Position = new (me.X + 1, me.Y + 1),
+                Position = new (me.Position.X + 1, me.Position.Y + 1),
                 MenuItems = new (
                                  new MenuItem []
                                  {

+ 2 - 2
UICatalog/Scenarios/ContextMenus.cs

@@ -67,14 +67,14 @@ public class ContextMenus : Scenario
                           {
                               if (e.MouseEvent.Flags == _contextMenu.MouseFlags)
                               {
-                                  ShowContextMenu (e.MouseEvent.X, e.MouseEvent.Y);
+                                  ShowContextMenu (e.MouseEvent.Position.X, e.MouseEvent.Position.Y);
                                   e.Handled = true;
                               }
                           };
 
         Application.MouseEvent += ApplicationMouseEvent;
 
-        void ApplicationMouseEvent (object sender, MouseEvent a) { mousePos = new Point (a.X, a.Y); }
+        void ApplicationMouseEvent (object sender, MouseEvent a) { mousePos = a.Position; }
 
         Win.WantMousePositionReports = true;
 

+ 2 - 2
UICatalog/Scenarios/LineDrawing.cs

@@ -92,7 +92,7 @@ public class LineDrawing : Scenario
                 {
                     // Mouse pressed down
                     _currentLine = new StraightLine (
-                                                     new Point (mouseEvent.X, mouseEvent.Y),
+                                                     mouseEvent.Position,
                                                      0,
                                                      Orientation.Vertical,
                                                      LineStyle,
@@ -105,7 +105,7 @@ public class LineDrawing : Scenario
                 {
                     // Mouse dragged
                     Point start = _currentLine.Start;
-                    var end = new Point (mouseEvent.X, mouseEvent.Y);
+                    var end = mouseEvent.Position;
                     var orientation = Orientation.Vertical;
                     int length = end.Y - start.Y;
 

+ 1 - 1
UICatalog/Scenarios/ListColumns.cs

@@ -266,7 +266,7 @@ public class ListColumns : Scenario
         };
 
         // if user clicks the mouse in TableView
-        _listColView.MouseClick += (s, e) => { _listColView.ScreenToCell (e.MouseEvent.X, e.MouseEvent.Y, out int? clickedCol); };
+        _listColView.MouseClick += (s, e) => { _listColView.ScreenToCell (e.MouseEvent.Position, out int? clickedCol); };
 
         _listColView.KeyBindings.Add (Key.Space, Command.Accept);
     }

+ 4 - 4
UICatalog/Scenarios/Mouse.cs

@@ -130,8 +130,8 @@ public class Mouse : Scenario
 
                                       if (filterSlider.GetSetOptions ().Contains (i))
                                       {
-                                          ml.Text = $"MouseEvent: ({a.X},{a.Y}) - {a.Flags} {count}";
-                                          appLogList.Add ($"({a.X},{a.Y}) - {a.Flags} {count++}");
+                                          ml.Text = $"MouseEvent: ({a.Position}) - {a.Flags} {count}";
+                                          appLogList.Add ($"({a.Position}) - {a.Flags} {count++}");
                                           appLog.MoveDown ();
                                       }
                                   };
@@ -169,14 +169,14 @@ public class Mouse : Scenario
 
                               if (filterSlider.GetSetOptions ().Contains (i))
                               {
-                                  winLogList.Add ($"MouseEvent: ({a.MouseEvent.X},{a.MouseEvent.Y}) - {a.MouseEvent.Flags} {count++}");
+                                  winLogList.Add ($"MouseEvent: ({a.MouseEvent.Position}) - {a.MouseEvent.Flags} {count++}");
                                   winLog.MoveDown ();
                               }
                           };
 
         win.MouseClick += (sender, a) =>
                           {
-                              winLogList.Add ($"MouseClick: ({a.MouseEvent.X},{a.MouseEvent.Y}) - {a.MouseEvent.Flags} {count++}");
+                              winLogList.Add ($"MouseClick: ({a.MouseEvent.Position}) - {a.MouseEvent.Flags} {count++}");
                               winLog.MoveDown ();
                           };
 

+ 1 - 1
UICatalog/Scenarios/Notepad.cs

@@ -362,7 +362,7 @@ public class Notepad : Scenario
                         );
         }
 
-        Rectangle screen = ((View)sender).ViewportToScreen (new (e.MouseEvent.X, e.MouseEvent.Y, 0, 0));
+        Rectangle screen = ((View)sender).ViewportToScreen (new (e.MouseEvent.Position, Size.Empty));
 
         var contextMenu = new ContextMenu { Position = screen.Location, MenuItems = items };
 

+ 1 - 1
UICatalog/Scenarios/Scrolling.cs

@@ -221,7 +221,7 @@ public class Scrolling : Scenario
             Text = "Mouse: "
         };
         app.Add (mousePos);
-        Application.MouseEvent += (sender, a) => { mousePos.Text = $"Mouse: ({a.X},{a.Y}) - {a.Flags} {count++}"; };
+        Application.MouseEvent += (sender, a) => { mousePos.Text = $"Mouse: ({a.Position}) - {a.Flags} {count++}"; };
 
         // Add a progress bar to cause constant redraws
         var progress = new ProgressBar { X = Pos.Right (scrollView) + 1, Y = Pos.AnchorEnd (2), Width = 50 };

+ 2 - 2
UICatalog/Scenarios/TableEditor.cs

@@ -750,7 +750,7 @@ public class TableEditor : Scenario
                                          return;
                                      }
 
-                                     _tableView.ScreenToCell (e.MouseEvent.X, e.MouseEvent.Y, out int? clickedCol);
+                                     _tableView.ScreenToCell (e.MouseEvent.Position, out int? clickedCol);
 
                                      if (clickedCol != null)
                                      {
@@ -1254,7 +1254,7 @@ public class TableEditor : Scenario
 
         var contextMenu = new ContextMenu
         {
-            Position = new (e.MouseEvent.X + 1, e.MouseEvent.Y + 1),
+            Position = new (e.MouseEvent.Position.X + 1, e.MouseEvent.Position.Y + 1),
             MenuItems = new (
                              [
                                  new (

+ 3 - 3
UICatalog/Scenarios/TreeViewFileSystem.cs

@@ -482,7 +482,7 @@ public class TreeViewFileSystem : Scenario
         // if user right clicks
         if (obj.MouseEvent.Flags.HasFlag (MouseFlags.Button3Clicked))
         {
-            IFileSystemInfo rightClicked = _treeViewFiles.GetObjectOnRow (obj.MouseEvent.Y);
+            IFileSystemInfo rightClicked = _treeViewFiles.GetObjectOnRow (obj.MouseEvent.Position.Y);
 
             // nothing was clicked
             if (rightClicked == null)
@@ -492,8 +492,8 @@ public class TreeViewFileSystem : Scenario
 
             ShowContextMenu (
                              new Point (
-                                        obj.MouseEvent.X + _treeViewFiles.Frame.X,
-                                        obj.MouseEvent.Y + _treeViewFiles.Frame.Y + 2
+                                        obj.MouseEvent.Position.X + _treeViewFiles.Frame.X,
+                                        obj.MouseEvent.Position.Y + _treeViewFiles.Frame.Y + 2
                                        ),
                              rightClicked
                             );

+ 3 - 3
UnitTests/Application/ApplicationTests.cs

@@ -781,7 +781,7 @@ public class ApplicationTests
                                      }
                                      else if (iteration < 3)
                                      {
-                                         Application.OnMouseEvent (new () { X = 0, Y = 0, Flags = MouseFlags.ReportMousePosition });
+                                         Application.OnMouseEvent (new () { Flags = MouseFlags.ReportMousePosition });
                                          Assert.False (top.NeedsDisplay);
                                          Assert.False (top.SubViewNeedsDisplay);
                                          Assert.False (top.LayoutNeeded);
@@ -820,12 +820,12 @@ public class ApplicationTests
         // Don't use visuals to test as style of border can change over time.
         Assert.Equal (new Point (0, 0), w.Frame.Location);
 
-        Application.OnMouseEvent (new () { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed });
+        Application.OnMouseEvent (new () { Flags = MouseFlags.Button1Pressed });
         Assert.Equal (w.Border, Application.MouseGrabView);
         Assert.Equal (new Point (0,0), w.Frame.Location);
 
         // Move down and to the right.
-        Application.OnMouseEvent (new () { X = 1, Y = 1, Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
+        Application.OnMouseEvent (new () { Position = new (1,1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
         Assert.Equal (new Point (1, 1), w.Frame.Location);
 
         Application.End (rs);

+ 14 - 14
UnitTests/Application/MouseTests.cs

@@ -41,13 +41,13 @@ public class MouseTests
         bool expectedClicked
     )
     {
-        var mouseEvent = new MouseEvent { X = clickX, Y = clickY, Flags = MouseFlags.Button1Pressed };
+        var mouseEvent = new MouseEvent { Position = new (clickX, clickY), Flags = MouseFlags.Button1Pressed };
         var clicked = false;
 
         void OnApplicationOnMouseEvent (object s, MouseEvent e)
         {
-            Assert.Equal (expectedX, e.X);
-            Assert.Equal (expectedY, e.Y);
+            Assert.Equal (expectedX, e.Position.X);
+            Assert.Equal (expectedY, e.Position.Y);
             clicked = true;
         }
 
@@ -115,12 +115,12 @@ public class MouseTests
             Height = size.Height
         };
 
-        var mouseEvent = new MouseEvent { X = clickX, Y = clickY, Flags = MouseFlags.Button1Clicked };
+        var mouseEvent = new MouseEvent { Position = new (clickX, clickY), Flags = MouseFlags.Button1Clicked };
 
         view.MouseClick += (s, e) =>
                            {
-                               Assert.Equal (expectedX, e.MouseEvent.X);
-                               Assert.Equal (expectedY, e.MouseEvent.Y);
+                               Assert.Equal (expectedX, e.MouseEvent.Position.X);
+                               Assert.Equal (expectedY, e.MouseEvent.Position.Y);
                                clicked = true;
                            };
 
@@ -213,12 +213,12 @@ public class MouseTests
 
         top.Add (view);
         Application.Begin (top);
-        var mouseEvent = new MouseEvent { X = clickX, Y = clickY, Flags = MouseFlags.Button1Clicked };
+        var mouseEvent = new MouseEvent { Position = new (clickX, clickY), Flags = MouseFlags.Button1Clicked };
 
         view.MouseClick += (s, e) =>
                            {
-                               Assert.Equal (expectedX, e.MouseEvent.X);
-                               Assert.Equal (expectedY, e.MouseEvent.Y);
+                               Assert.Equal (expectedX, e.MouseEvent.Position.X);
+                               Assert.Equal (expectedY, e.MouseEvent.Position.Y);
                                clicked = true;
                            };
 
@@ -252,7 +252,7 @@ public class MouseTests
                                          Assert.True (tf.HasFocus);
                                          Assert.Null (Application.MouseGrabView);
 
-                                         Application.OnMouseEvent (new() { X = 5, Y = 5, Flags = MouseFlags.ReportMousePosition });
+                                         Application.OnMouseEvent (new() { Position = new (5, 5), Flags = MouseFlags.ReportMousePosition });
 
                                          Assert.Equal (sv, Application.MouseGrabView);
 
@@ -266,15 +266,15 @@ public class MouseTests
                                          // another toplevel (Dialog) was opened
                                          Assert.Null (Application.MouseGrabView);
 
-                                         Application.OnMouseEvent (new() { X = 5, Y = 5, Flags = MouseFlags.ReportMousePosition });
+                                         Application.OnMouseEvent (new() { Position = new (5, 5), Flags = MouseFlags.ReportMousePosition });
 
                                          Assert.Null (Application.MouseGrabView);
 
-                                         Application.OnMouseEvent (new() { X = 40, Y = 12, Flags = MouseFlags.ReportMousePosition });
+                                         Application.OnMouseEvent (new() { Position = new (40, 12), Flags = MouseFlags.ReportMousePosition });
 
                                          Assert.Null (Application.MouseGrabView);
 
-                                         Application.OnMouseEvent (new() { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed });
+                                         Application.OnMouseEvent (new() { Position = new (0, 0), Flags = MouseFlags.Button1Pressed });
 
                                          Assert.Null (Application.MouseGrabView);
 
@@ -392,7 +392,7 @@ public class MouseTests
         Assert.True (view.WasDisposed);
 #endif
 
-        Application.OnMouseEvent (new () { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed });
+        Application.OnMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Pressed });
         Assert.Null (Application.MouseGrabView);
         Assert.Equal (0, count);
     }

+ 2 - 2
UnitTests/Input/EscSeqUtilsTests.cs

@@ -699,7 +699,7 @@ public class EscSeqUtilsTests
         top.Add (view);
         Application.Begin (top);
 
-        Application.OnMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = 0 });
+        Application.OnMouseEvent (new MouseEvent { Position = new (0, 0), Flags = 0 });
 
         ClearAll ();
 
@@ -756,7 +756,7 @@ public class EscSeqUtilsTests
                                          // set Application.WantContinuousButtonPressedView to null
                                          view.WantContinuousButtonPressed = false;
 
-                                         Application.OnMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = 0 });
+                                         Application.OnMouseEvent (new MouseEvent { Position = new (0, 0), Flags = 0 });
 
                                          Application.RequestStop ();
                                      }

+ 1 - 1
UnitTests/Text/AutocompleteTests.cs

@@ -51,7 +51,7 @@ This a long line and against TextView.
 
         Assert.True (
                      tv.NewMouseEvent (
-                                    new MouseEvent { X = 6, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (6, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
         Application.Refresh ();

+ 9 - 9
UnitTests/View/MouseTests.cs

@@ -27,7 +27,7 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
             testView.SetFocus ();
         }
 
-        testView.NewMouseEvent (new () { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked });
+        testView.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked });
         Assert.True (superView.HasFocus);
         Assert.Equal (expectedHasFocus, testView.HasFocus);
     }
@@ -73,9 +73,9 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
         Application.Begin (top);
 
         Assert.Equal (new Point (4, 4), testView.Frame.Location);
-        Application.OnMouseEvent (new () { X = xy, Y = xy, Flags = MouseFlags.Button1Pressed });
+        Application.OnMouseEvent (new () { Position = new (xy, xy), Flags = MouseFlags.Button1Pressed });
 
-        Application.OnMouseEvent (new () { X = xy + 1, Y = xy + 1, Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
+        Application.OnMouseEvent (new () { Position = new (xy + 1, xy + 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
 
         Assert.Equal (expectedMoved, new Point (5, 5) == testView.Frame.Location);
     }
@@ -504,21 +504,21 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
 
         // Start in Viewport
         me.Flags = MouseFlags.Button1Pressed;
-        me.X = 0;
+        me.Position = me.Position with { X = 0 };
         view.NewMouseEvent (me);
         Assert.Equal (1, clickedCount);
         me.Handled = false;
 
         // Move out of Viewport
         me.Flags = MouseFlags.Button1Pressed;
-        me.X = 1;
+        me.Position = me.Position with { X = 1 };
         view.NewMouseEvent (me);
         Assert.Equal (2, clickedCount);
         me.Handled = false;
 
         // Move into Viewport
         me.Flags = MouseFlags.Button1Pressed;
-        me.X = 0;
+        me.Position = me.Position with { X = 0 };
         view.NewMouseEvent (me);
         Assert.Equal (3, clickedCount);
         me.Handled = false;
@@ -597,12 +597,12 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
         bool inViewport = view.Viewport.Contains (x, 0);
 
         // Start at 0,0 ; in viewport
-        view.NewMouseEvent (new () { X = 0, Flags = MouseFlags.Button1Pressed });
+        view.NewMouseEvent (new () { Flags = MouseFlags.Button1Pressed });
         Assert.Equal (1, enablingHighlight);
         Assert.Equal (0, disablingHighlight);
 
         // Move to x,0 
-        view.NewMouseEvent (new () { X = x, Flags = MouseFlags.Button1Pressed });
+        view.NewMouseEvent (new () { Flags = MouseFlags.Button1Pressed });
 
         if (inViewport)
         {
@@ -616,7 +616,7 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
         }
 
         // Move backto 0,0 ; in viewport
-        view.NewMouseEvent (new () { X = 0, Flags = MouseFlags.Button1Pressed });
+        view.NewMouseEvent (new () { Flags = MouseFlags.Button1Pressed });
         if (inViewport)
         {
             Assert.Equal (3, enablingHighlight);

+ 3 - 3
UnitTests/Views/CheckBoxTests.cs

@@ -108,7 +108,7 @@ public class CheckBoxTests
         Assert.False (checkBox.Checked);
         Assert.True (checkBox.NewKeyDownEvent (Key.Space));
         Assert.True (checkBox.Checked);
-        Assert.True (checkBox.NewMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked }));
+        Assert.True (checkBox.NewMouseEvent (new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Clicked }));
         Assert.False (checkBox.Checked);
 
         checkBox.AllowNullChecked = true;
@@ -121,11 +121,11 @@ public class CheckBoxTests
 {CM.Glyphs.NullChecked} Check this out 你",
                                                       _output
                                                      );
-        Assert.True (checkBox.NewMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked }));
+        Assert.True (checkBox.NewMouseEvent (new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Clicked }));
         Assert.True (checkBox.Checked);
         Assert.True (checkBox.NewKeyDownEvent (Key.Space));
         Assert.False (checkBox.Checked);
-        Assert.True (checkBox.NewMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked }));
+        Assert.True (checkBox.NewMouseEvent (new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Clicked }));
         Assert.Null (checkBox.Checked);
 
         checkBox.AllowNullChecked = false;

+ 1 - 1
UnitTests/Views/ColorPickerTests.cs

@@ -54,7 +54,7 @@ public class ColorPickerTests
 
         Assert.False (colorPicker.NewMouseEvent (new MouseEvent ()));
 
-        Assert.True (colorPicker.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked, X = 4, Y = 1 }));
+        Assert.True (colorPicker.NewMouseEvent (new MouseEvent { Position = new (4, 1), Flags = MouseFlags.Button1Clicked }));
         Assert.Equal (ColorName.Blue, colorPicker.SelectedColor);
     }
 

+ 27 - 27
UnitTests/Views/ComboBoxTests.cs

@@ -140,7 +140,7 @@ public class ComboBoxTests
         Assert.Equal (-1, cb.SelectedItem);
         Assert.Equal ("", cb.Text);
 
-        Assert.True (cb.NewMouseEvent (new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }));
+        Assert.True (cb.NewMouseEvent (new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }));
         Assert.Equal ("", selected);
         Assert.True (cb.IsShow);
         Assert.Equal (0, cb.SelectedItem);
@@ -195,7 +195,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -232,7 +232,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -289,7 +289,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -300,7 +300,7 @@ public class ComboBoxTests
         Assert.True (
                      cb.Subviews [1]
                        .NewMouseEvent (
-                                    new MouseEvent { X = 0, Y = 1, Flags = MouseFlags.Button1Clicked }
+                                    new MouseEvent { Position = new (0, 1), Flags = MouseFlags.Button1Clicked }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -311,7 +311,7 @@ public class ComboBoxTests
         Assert.True (
                      cb.Subviews [1]
                        .NewMouseEvent (
-                                    new MouseEvent { X = 0, Y = 1, Flags = MouseFlags.Button1Clicked }
+                                    new MouseEvent { Position = new (0, 1), Flags = MouseFlags.Button1Clicked }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -324,7 +324,7 @@ public class ComboBoxTests
         Assert.True (
                      cb.Subviews [1]
                        .NewMouseEvent (
-                                    new MouseEvent { X = 0, Y = 2, Flags = MouseFlags.Button1Clicked }
+                                    new MouseEvent { Position = new (0, 2), Flags = MouseFlags.Button1Clicked }
                                    )
                     );
         Assert.Equal ("Three", selected);
@@ -334,14 +334,14 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
 
         Assert.True (
                      cb.Subviews [1]
                        .NewMouseEvent (
-                                    new MouseEvent { X = 0, Y = 2, Flags = MouseFlags.Button1Clicked }
+                                    new MouseEvent { Position = new (0, 2), Flags = MouseFlags.Button1Clicked }
                                    )
                     );
         Assert.Equal ("Three", selected);
@@ -351,7 +351,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
         Assert.Equal ("Three", selected);
@@ -362,7 +362,7 @@ public class ComboBoxTests
         Assert.True (
                      cb.Subviews [1]
                        .NewMouseEvent (
-                                    new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked }
+                                    new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                     );
         Assert.Equal ("One", selected);
@@ -390,14 +390,14 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
 
         Assert.True (
                      cb.Subviews [1]
                        .NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Clicked }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -408,7 +408,7 @@ public class ComboBoxTests
         Assert.True (
                      cb.Subviews [1]
                        .NewMouseEvent (
-                                    new MouseEvent { X = -1, Y = 0, Flags = MouseFlags.Button1Clicked }
+                                    new MouseEvent { Position = new (-1, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -421,7 +421,7 @@ public class ComboBoxTests
         Assert.True (
                      cb.Subviews [1]
                        .NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Clicked }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -432,7 +432,7 @@ public class ComboBoxTests
         Assert.True (
                      cb.Subviews [1]
                        .NewMouseEvent (
-                                    new MouseEvent { X = 0, Y = -1, Flags = MouseFlags.Button1Clicked }
+                                    new MouseEvent { Position = new (0, -1), Flags = MouseFlags.Button1Clicked }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -445,7 +445,7 @@ public class ComboBoxTests
         Assert.True (
                      cb.Subviews [1]
                        .NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Clicked }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -456,7 +456,7 @@ public class ComboBoxTests
         Assert.True (
                      cb.Subviews [1]
                        .NewMouseEvent (
-                                    new MouseEvent { X = cb.Frame.Width, Y = 0, Flags = MouseFlags.Button1Clicked }
+                                    new MouseEvent { Position = new (cb.Frame.Width, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -469,7 +469,7 @@ public class ComboBoxTests
         Assert.True (
                      cb.Subviews [1]
                        .NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Clicked }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -480,7 +480,7 @@ public class ComboBoxTests
         Assert.True (
                      cb.Subviews [1]
                        .NewMouseEvent (
-                                    new MouseEvent { X = 0, Y = cb.Frame.Height, Flags = MouseFlags.Button1Clicked }
+                                    new MouseEvent { Position = new (0, cb.Frame.Height), Flags = MouseFlags.Button1Clicked }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -508,7 +508,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -665,7 +665,7 @@ Three ",
 
         Assert.True (
                      cb.NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -677,7 +677,7 @@ Three ",
 
         Assert.True (
                      cb.NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -687,7 +687,7 @@ Three ",
 
         Assert.True (
                      cb.NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -699,7 +699,7 @@ Three ",
 
         Assert.True (
                      cb.NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -727,7 +727,7 @@ Three ",
 
         Assert.True (
                      cb.NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
         Assert.Equal ("", selected);
@@ -784,7 +784,7 @@ Three ",
 
         Assert.True (
                      cb.NewMouseEvent (
-                                    new MouseEvent { X = cb.Viewport.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
+                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                     );
         Assert.Equal ("", selected);

+ 15 - 15
UnitTests/Views/ContextMenuTests.cs

@@ -107,11 +107,11 @@ public class ContextMenuTests
         Assert.True (ContextMenu.IsShow);
         Assert.Equal (cm.MenuBar, Application.MouseGrabView);
         Assert.False (menu.IsMenuOpen);
-        Assert.False (menu.NewMouseEvent(new MouseEvent { X = 1, Flags = MouseFlags.ReportMousePosition, View = menu }));
+        Assert.False (menu.NewMouseEvent(new MouseEvent { Position = new (1, 0), Flags = MouseFlags.ReportMousePosition, View = menu }));
         Assert.True (ContextMenu.IsShow);
         Assert.Equal (cm.MenuBar, Application.MouseGrabView);
         Assert.False (menu.IsMenuOpen);
-        Assert.True (menu.NewMouseEvent(new MouseEvent { X = 1, Flags = MouseFlags.Button1Clicked, View = menu }));
+        Assert.True (menu.NewMouseEvent(new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1Clicked, View = menu }));
         Assert.False (ContextMenu.IsShow);
         Assert.Equal (menu, Application.MouseGrabView);
         Assert.True (menu.IsMenuOpen);
@@ -269,7 +269,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (new MouseEvent { X = 8, Y = 2, Flags = MouseFlags.Button3Clicked });
+        Application.OnMouseEvent (new MouseEvent { Position = new (8, 2), Flags = MouseFlags.Button3Clicked });
 
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -351,7 +351,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (new MouseEvent { X = 9, Y = 3, Flags = MouseFlags.Button3Clicked });
+        Application.OnMouseEvent (new MouseEvent { Position = new (9, 3), Flags = MouseFlags.Button3Clicked });
 
         var firstIteration = false;
         Application.RunIteration (ref rsDialog, ref firstIteration);
@@ -406,7 +406,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (new MouseEvent { X = 9, Y = 3, Flags = MouseFlags.Button3Clicked });
+        Application.OnMouseEvent (new MouseEvent { Position = new (9, 3), Flags = MouseFlags.Button3Clicked });
 
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -642,7 +642,7 @@ public class ContextMenuTests
         Assert.True (
                      top.Subviews [0]
                         .NewMouseEvent (
-                                     new MouseEvent { X = 0, Y = 3, Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
+                                     new MouseEvent { Position = new (0, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                     )
                     );
         Application.Refresh ();
@@ -690,7 +690,7 @@ public class ContextMenuTests
         Assert.True (
                      top.Subviews [0]
                         .NewMouseEvent (
-                                     new MouseEvent { X = 30, Y = 3, Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
+                                     new MouseEvent { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                     )
                     );
         Application.Refresh ();
@@ -737,7 +737,7 @@ public class ContextMenuTests
         Assert.True (
                      top.Subviews [0]
                         .NewMouseEvent (
-                                     new MouseEvent { X = 30, Y = 3, Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
+                                     new MouseEvent { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                     )
                     );
         Application.Refresh ();
@@ -781,7 +781,7 @@ public class ContextMenuTests
         Assert.True (
                      top.Subviews [0]
                         .NewMouseEvent (
-                                     new MouseEvent { X = 30, Y = 3, Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
+                                     new MouseEvent { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                     )
                     );
         Application.Refresh ();
@@ -825,7 +825,7 @@ public class ContextMenuTests
         Assert.True (
                      top.Subviews [0]
                         .NewMouseEvent (
-                                     new MouseEvent { X = 30, Y = 3, Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
+                                     new MouseEvent { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                     )
                     );
         Application.Refresh ();
@@ -1314,7 +1314,7 @@ public class ContextMenuTests
                                                      );
 
         // X=5 is the border and so need to use at least one more
-        Application.OnMouseEvent (new MouseEvent { X = 6, Y = 13, Flags = MouseFlags.Button1Clicked });
+        Application.OnMouseEvent (new MouseEvent { Position = new (6, 13), Flags = MouseFlags.Button1Clicked });
 
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1332,7 +1332,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (new MouseEvent { X = 6, Y = 12, Flags = MouseFlags.Button1Clicked });
+        Application.OnMouseEvent (new MouseEvent { Position = new (6, 12), Flags = MouseFlags.Button1Clicked });
 
         firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1403,7 +1403,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (new MouseEvent { X = 6, Y = 13, Flags = MouseFlags.ReportMousePosition });
+        Application.OnMouseEvent (new MouseEvent { Position = new (6, 13), Flags = MouseFlags.ReportMousePosition });
 
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1420,7 +1420,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (new MouseEvent { X = 6, Y = 14, Flags = MouseFlags.ReportMousePosition });
+        Application.OnMouseEvent (new MouseEvent { Position = new (6, 14), Flags = MouseFlags.ReportMousePosition });
 
         firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1438,7 +1438,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (new MouseEvent { X = 6, Y = 13, Flags = MouseFlags.ReportMousePosition });
+        Application.OnMouseEvent (new MouseEvent { Position = new (6, 13), Flags = MouseFlags.ReportMousePosition });
 
         firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);

+ 1 - 1
UnitTests/Views/LabelTests.cs

@@ -67,7 +67,7 @@ public class LabelTests
         Assert.False (label.HasFocus);
         Assert.False (nextSubview.HasFocus);
 
-        label.NewMouseEvent (new MouseEvent () { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked });
+        label.NewMouseEvent (new MouseEvent () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked });
         Assert.False (label.HasFocus);
         Assert.True (nextSubview.HasFocus);
     }

+ 5 - 13
UnitTests/Views/ListViewTests.cs

@@ -719,42 +719,34 @@ Item 6",
 │Three│
 └─────┘", _output);
 
-        Application.OnMouseEvent (new () { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked });
+        Application.OnMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked });
         Assert.Equal ("", selected);
         Assert.Equal (-1, lv.SelectedItem);
 
         Application.OnMouseEvent (new ()
         {
-            X = 1,
-            Y = 1,
-            Flags = MouseFlags.Button1Clicked
+            Position = new (1, 1), Flags = MouseFlags.Button1Clicked
         });
         Assert.Equal ("One", selected);
         Assert.Equal (0, lv.SelectedItem);
 
         Application.OnMouseEvent (new ()
         {
-            X = 1,
-            Y = 2,
-            Flags = MouseFlags.Button1Clicked
+            Position = new (1, 2), Flags = MouseFlags.Button1Clicked
         });
         Assert.Equal ("Two", selected);
         Assert.Equal (1, lv.SelectedItem);
 
         Application.OnMouseEvent (new ()
         {
-            X = 1,
-            Y = 3,
-            Flags = MouseFlags.Button1Clicked
+            Position = new (1, 3), Flags = MouseFlags.Button1Clicked
         });
         Assert.Equal ("Three", selected);
         Assert.Equal (2, lv.SelectedItem);
 
         Application.OnMouseEvent (new ()
         {
-            X = 1,
-            Y = 4,
-            Flags = MouseFlags.Button1Clicked
+            Position = new (1, 4), Flags = MouseFlags.Button1Clicked
         });
         Assert.Equal ("Three", selected);
         Assert.Equal (2, lv.SelectedItem);

+ 43 - 43
UnitTests/Views/MenuBarTests.cs

@@ -38,13 +38,13 @@ public class MenuBarTests
 
         Assert.True (
                      menu.NewMouseEvent (
-                                      new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
+                                      new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
 
         Assert.True (
                      menu._openMenu.NewMouseEvent (
-                                                new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked, View = menu._openMenu }
+                                                new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Clicked, View = menu._openMenu }
                                                )
                     );
         Application.MainLoop.RunIteration ();
@@ -58,7 +58,7 @@ public class MenuBarTests
 
         Assert.True (
                      menu.NewMouseEvent (
-                                      new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
+                                      new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
         Application.Refresh ();
@@ -76,7 +76,7 @@ public class MenuBarTests
 
         Assert.True (
                      menu._openMenu.NewMouseEvent (
-                                                new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked, View = menu._openMenu }
+                                                new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Clicked, View = menu._openMenu }
                                                )
                     );
         Application.MainLoop.RunIteration ();
@@ -88,13 +88,13 @@ public class MenuBarTests
 
         Assert.True (
                      menu.NewMouseEvent (
-                                      new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
+                                      new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
 
         Assert.True (
                      menu._openMenu.NewMouseEvent (
-                                                new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked, View = menu._openMenu }
+                                                new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Clicked, View = menu._openMenu }
                                                )
                     );
         Application.MainLoop.RunIteration ();
@@ -297,7 +297,7 @@ public class MenuBarTests
 
         Assert.True (
                      menu.NewMouseEvent (
-                                      new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
+                                      new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
         top.Draw ();
@@ -318,7 +318,7 @@ public class MenuBarTests
         Assert.True (
                      top.Subviews [1]
                         .NewMouseEvent (
-                                     new MouseEvent { X = 0, Y = 2, Flags = MouseFlags.Button1Clicked, View = top.Subviews [1] }
+                                     new MouseEvent { Position = new (0, 2), Flags = MouseFlags.Button1Clicked, View = top.Subviews [1] }
                                     )
                     );
         top.Subviews [1].Draw ();
@@ -339,7 +339,7 @@ public class MenuBarTests
         Assert.True (
                      top.Subviews [1]
                         .NewMouseEvent (
-                                     new MouseEvent { X = 0, Y = 2, Flags = MouseFlags.ReportMousePosition, View = top.Subviews [1] }
+                                     new MouseEvent { Position = new (0, 2), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [1] }
                                     )
                     );
         top.Subviews [1].Draw ();
@@ -516,7 +516,7 @@ public class MenuBarTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (new MouseEvent { X = 20, Y = 5, Flags = MouseFlags.Button1Clicked });
+        Application.OnMouseEvent (new MouseEvent { Position = new (20, 5), Flags = MouseFlags.Button1Clicked });
 
         firstIteration = false;
 
@@ -549,7 +549,7 @@ public class MenuBarTests
         {
             menu.OpenMenu ();
 
-            Application.OnMouseEvent (new MouseEvent { X = 20, Y = 5 + i, Flags = MouseFlags.Button1Clicked });
+            Application.OnMouseEvent (new MouseEvent { Position = new (20, 5 + i), Flags = MouseFlags.Button1Clicked });
 
             firstIteration = false;
             Application.RunIteration (ref rsDialog, ref firstIteration);
@@ -704,7 +704,7 @@ public class MenuBarTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (new MouseEvent { X = 20, Y = 5, Flags = MouseFlags.Button1Clicked });
+        Application.OnMouseEvent (new MouseEvent { Position = new (20, 5), Flags = MouseFlags.Button1Clicked });
 
         firstIteration = false;
 
@@ -726,7 +726,7 @@ public class MenuBarTests
         {
             menu.OpenMenu ();
 
-            Application.OnMouseEvent (new MouseEvent { X = 20, Y = 5 + i, Flags = MouseFlags.Button1Clicked });
+            Application.OnMouseEvent (new MouseEvent { Position = new (20, 5 + i), Flags = MouseFlags.Button1Clicked });
 
             firstIteration = false;
             Application.RunIteration (ref rs, ref firstIteration);
@@ -1457,13 +1457,13 @@ wo
         top.Add (menu);
         Application.Begin (top);
 
-        Assert.True (menu.NewMouseEvent (new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }));
+        Assert.True (menu.NewMouseEvent (new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1Pressed, View = menu }));
         Assert.True (menu.IsMenuOpen);
         top.Draw ();
 
         TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), _output);
 
-        Assert.True (menu.NewMouseEvent (new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }));
+        Assert.True (menu.NewMouseEvent (new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1Pressed, View = menu }));
         Assert.False (menu.IsMenuOpen);
         top.Draw ();
         TestHelpers.AssertDriverContentsAre (expectedMenu.ClosedMenuText, _output);
@@ -2174,7 +2174,7 @@ wo
         // open the menu
         Assert.True (
                      menu.NewMouseEvent (
-                                      new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
+                                      new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
         Assert.True (menu.IsMenuOpen);
@@ -2183,7 +2183,7 @@ wo
 
         Assert.True (
                      mCurrent.NewMouseEvent (
-                                          new MouseEvent { X = 1, Y = 1, Flags = MouseFlags.ReportMousePosition, View = mCurrent }
+                                          new MouseEvent { Position = new (1, 1), Flags = MouseFlags.ReportMousePosition, View = mCurrent }
                                          )
                     );
         Assert.True (menu.IsMenuOpen);
@@ -2192,7 +2192,7 @@ wo
 
         Assert.True (
                      mCurrent.NewMouseEvent (
-                                          new MouseEvent { X = 1, Y = 1, Flags = MouseFlags.ReportMousePosition, View = mCurrent }
+                                          new MouseEvent { Position = new (1, 1), Flags = MouseFlags.ReportMousePosition, View = mCurrent }
                                          )
                     );
         Assert.True (menu.IsMenuOpen);
@@ -2201,7 +2201,7 @@ wo
 
         Assert.True (
                      mCurrent.NewMouseEvent (
-                                          new MouseEvent { X = 1, Y = 2, Flags = MouseFlags.ReportMousePosition, View = mCurrent }
+                                          new MouseEvent { Position = new (1, 2), Flags = MouseFlags.ReportMousePosition, View = mCurrent }
                                          )
                     );
         Assert.True (menu.IsMenuOpen);
@@ -2211,7 +2211,7 @@ wo
         // close the menu
         Assert.True (
                      menu.NewMouseEvent (
-                                      new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
+                                      new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
         Assert.False (menu.IsMenuOpen);
@@ -2379,7 +2379,7 @@ Edit
         // Click on Edit
         Assert.True (
                      menu.NewMouseEvent (
-                                      new MouseEvent { X = 10, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
+                                      new MouseEvent { Position = new (10, 0), Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
         Assert.True (menu.IsMenuOpen);
@@ -2389,7 +2389,7 @@ Edit
         // Click on Paste
         Assert.True (
                      mCurrent.NewMouseEvent (
-                                          new MouseEvent { X = 10, Y = 2, Flags = MouseFlags.ReportMousePosition, View = mCurrent }
+                                          new MouseEvent { Position = new (10, 2), Flags = MouseFlags.ReportMousePosition, View = mCurrent }
                                          )
                     );
         Assert.True (menu.IsMenuOpen);
@@ -2403,7 +2403,7 @@ Edit
                 // Edit menu is open. Click on the menu at Y = -1, which is outside the menu.
                 Assert.False (
                               mCurrent.NewMouseEvent (
-                                                     new MouseEvent { X = 10, Y = i, Flags = MouseFlags.ReportMousePosition, View = menu }
+                                                     new MouseEvent { Position = new (10, i), Flags = MouseFlags.ReportMousePosition, View = menu }
                                                     )
                              );
             }
@@ -2412,7 +2412,7 @@ Edit
                 // Edit menu is open. Click on the menu at Y = i.
                 Assert.True (
                              mCurrent.NewMouseEvent (
-                                                  new MouseEvent { X = 10, Y = i, Flags = MouseFlags.ReportMousePosition, View = mCurrent }
+                                                  new MouseEvent { Position = new (10, i), Flags = MouseFlags.ReportMousePosition, View = mCurrent }
                                                  )
                             );
             }
@@ -2574,7 +2574,7 @@ Edit
         Application.Begin (top);
 
         Assert.True (tf.HasFocus);
-        Assert.True (menu.NewMouseEvent (new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }));
+        Assert.True (menu.NewMouseEvent (new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1Pressed, View = menu }));
         Assert.True (menu.IsMenuOpen);
         Assert.False (tf.HasFocus);
         top.Draw ();
@@ -2582,7 +2582,7 @@ Edit
 
         Assert.True (
                      menu.NewMouseEvent (
-                                      new MouseEvent { X = 8, Y = 0, Flags = MouseFlags.ReportMousePosition, View = menu }
+                                      new MouseEvent { Position = new (8, 0), Flags = MouseFlags.ReportMousePosition, View = menu }
                                      )
                     );
         Assert.True (menu.IsMenuOpen);
@@ -2592,7 +2592,7 @@ Edit
 
         Assert.True (
                      menu.NewMouseEvent (
-                                      new MouseEvent { X = 15, Y = 0, Flags = MouseFlags.ReportMousePosition, View = menu }
+                                      new MouseEvent { Position = new (15, 0), Flags = MouseFlags.ReportMousePosition, View = menu }
                                      )
                     );
         Assert.True (menu.IsMenuOpen);
@@ -2602,7 +2602,7 @@ Edit
 
         Assert.True (
                      menu.NewMouseEvent (
-                                      new MouseEvent { X = 8, Y = 0, Flags = MouseFlags.ReportMousePosition, View = menu }
+                                      new MouseEvent { Position = new (8, 0), Flags = MouseFlags.ReportMousePosition, View = menu }
                                      )
                     );
         Assert.True (menu.IsMenuOpen);
@@ -2612,7 +2612,7 @@ Edit
 
         Assert.True (
                      menu.NewMouseEvent (
-                                      new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.ReportMousePosition, View = menu }
+                                      new MouseEvent { Position = new (1, 0), Flags = MouseFlags.ReportMousePosition, View = menu }
                                      )
                     );
         Assert.True (menu.IsMenuOpen);
@@ -2620,7 +2620,7 @@ Edit
         top.Draw ();
         TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), _output);
 
-        Assert.True (menu.NewMouseEvent (new MouseEvent { X = 8, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }));
+        Assert.True (menu.NewMouseEvent (new MouseEvent { Position = new (8, 0), Flags = MouseFlags.Button1Pressed, View = menu }));
         Assert.False (menu.IsMenuOpen);
         Assert.True (tf.HasFocus);
         top.Draw ();
@@ -2954,7 +2954,7 @@ Edit
 
         Assert.True (
                      menu.NewMouseEvent (
-                                      new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
+                                      new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
         top.Draw ();
@@ -2975,7 +2975,7 @@ Edit
                       menu.NewMouseEvent (
                                        new MouseEvent
                                        {
-                                           X = 1, Y = 2, Flags = MouseFlags.ReportMousePosition, View = Application.Top.Subviews [1]
+                                           Position = new (1, 2), Flags = MouseFlags.ReportMousePosition, View = Application.Top.Subviews [1]
                                        }
                                       )
                      );
@@ -2998,7 +2998,7 @@ Edit
                       menu.NewMouseEvent (
                                        new MouseEvent
                                        {
-                                           X = 1, Y = 1, Flags = MouseFlags.ReportMousePosition, View = Application.Top.Subviews [1]
+                                           Position = new (1, 1), Flags = MouseFlags.ReportMousePosition, View = Application.Top.Subviews [1]
                                        }
                                       )
                      );
@@ -3018,7 +3018,7 @@ Edit
 
         Assert.False (
                       menu.NewMouseEvent (
-                                       new MouseEvent { X = 70, Y = 2, Flags = MouseFlags.Button1Clicked, View = Application.Top }
+                                       new MouseEvent { Position = new (70, 2), Flags = MouseFlags.Button1Clicked, View = Application.Top }
                                       )
                      );
         top.Draw ();
@@ -3264,7 +3264,7 @@ Edit
         Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
         Assert.Equal (new Rectangle (1, 0, 8, 1), pos);
 
-        Assert.True (menu.NewMouseEvent (new () { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }));
+        Assert.True (menu.NewMouseEvent (new () { Position = new (1, 0), Flags = MouseFlags.Button1Pressed, View = menu }));
         top.Draw ();
 
         expected = @"
@@ -3279,7 +3279,7 @@ Edit
         pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
         Assert.Equal (new Rectangle (1, 0, 10, 6), pos);
 
-        Assert.False (menu.NewMouseEvent (new () { X = 1, Y = 2, Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [1] }));
+        Assert.False (menu.NewMouseEvent (new () { Position = new (1, 2), Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [1] }));
         top.Draw ();
 
         expected = @"
@@ -3295,7 +3295,7 @@ Edit
         pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
         Assert.Equal (new Rectangle (1, 0, 15, 7), pos);
 
-        Assert.False (menu.NewMouseEvent (new () { X = 1, Y = 1, Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [2] }));
+        Assert.False (menu.NewMouseEvent (new () { Position = new (1, 1), Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [2] }));
         top.Draw ();
 
         expected = @"
@@ -3310,7 +3310,7 @@ Edit
         pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
         Assert.Equal (new Rectangle (1, 0, 10, 6), pos);
 
-        Assert.False (menu.NewMouseEvent (new () { X = 70, Y = 2, Flags = MouseFlags.Button1Clicked, View = Application.Top }));
+        Assert.False (menu.NewMouseEvent (new () { Position = new (70, 2), Flags = MouseFlags.Button1Clicked, View = Application.Top }));
         top.Draw ();
 
         expected = @"
@@ -3448,7 +3448,7 @@ Edit
 
         Assert.True (
                      menu.NewMouseEvent (
-                                      new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
+                                      new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
         top.Draw ();
@@ -3465,7 +3465,7 @@ Edit
 
         Assert.False (
                       menu.NewMouseEvent (
-                                       new MouseEvent { X = 1, Y = 2, Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [1] }
+                                       new MouseEvent { Position = new (1, 2), Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [1] }
                                       )
                      );
         top.Draw ();
@@ -3483,7 +3483,7 @@ Edit
 
         Assert.False (
                       menu.NewMouseEvent (
-                                       new MouseEvent { X = 1, Y = 1, Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [2] }
+                                       new MouseEvent { Position = new (1, 1), Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [2] }
                                       )
                      );
         top.Draw ();
@@ -3500,7 +3500,7 @@ Edit
 
         Assert.False (
                       menu.NewMouseEvent (
-                                       new MouseEvent { X = 70, Y = 2, Flags = MouseFlags.Button1Clicked, View = Application.Top }
+                                       new MouseEvent { Position = new (70, 2), Flags = MouseFlags.Button1Clicked, View = Application.Top }
                                       )
                      );
         top.Draw ();
@@ -3682,7 +3682,7 @@ Edit
         top.Add (menu, btn);
         Application.Begin (top);
 
-        Application.OnMouseEvent (new () { X = 0, Y = 4, Flags = MouseFlags.Button1Clicked });
+        Application.OnMouseEvent (new () { Position = new (0, 4), Flags = MouseFlags.Button1Clicked });
         Assert.True (btnClicked);
     }
 }

+ 2 - 5
UnitTests/Views/OverlappedTests.cs

@@ -912,7 +912,7 @@ public class OverlappedTests
         // Tests that rely on visuals are too fragile. If border style changes they break.
         // Instead we should just rely on the test above.
 
-        Application.OnMouseEvent (new MouseEvent { X = 1, Y = 1, Flags = MouseFlags.Button1Pressed });
+        Application.OnMouseEvent (new MouseEvent { Position = new (1, 1), Flags = MouseFlags.Button1Pressed });
         Assert.Equal (win2.Border, Application.MouseGrabView);
 
         Application.RunIteration (ref rsOverlapped, ref firstIteration);
@@ -926,10 +926,7 @@ public class OverlappedTests
 
         Application.OnMouseEvent (new MouseEvent
         {
-            X = 2,
-            Y = 2,
-            Flags = MouseFlags.Button1Pressed
-                    | MouseFlags.ReportMousePosition
+            Position = new (2, 2), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
         });
 
         Application.RunIteration (ref rsOverlapped, ref firstIteration);

+ 2 - 2
UnitTests/Views/ScrollBarViewTests.cs

@@ -1154,7 +1154,7 @@ This is a test             ",
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (new MouseEvent { X = 15, Y = 0, Flags = MouseFlags.Button1Clicked });
+        Application.OnMouseEvent (new MouseEvent { Position = new (15, 0), Flags = MouseFlags.Button1Clicked });
 
         Assert.Null (Application.MouseGrabView);
         Assert.True (clicked);
@@ -1182,7 +1182,7 @@ This is a test             ",
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (new MouseEvent { X = 15, Y = 0, Flags = MouseFlags.Button1Clicked });
+        Application.OnMouseEvent (new MouseEvent { Position = new (15, 0), Flags = MouseFlags.Button1Clicked });
 
         Assert.Null (Application.MouseGrabView);
         Assert.True (clicked);

+ 1 - 1
UnitTests/Views/StatusBarTests.cs

@@ -163,7 +163,7 @@ CTRL-O Open {
                                      {
                                          Assert.Equal ("Quiting...", msg);
                                          msg = "";
-                                         sb.NewMouseEvent (new MouseEvent { X = 1, Y = 24, Flags = MouseFlags.Button1Clicked });
+                                         sb.NewMouseEvent (new MouseEvent { Position = new (1, 24), Flags = MouseFlags.Button1Clicked });
                                      }
                                      else
                                      {

+ 9 - 9
UnitTests/Views/TabViewTests.cs

@@ -146,21 +146,21 @@ public class TabViewTests
         // Waving mouse around does not trigger click
         for (var i = 0; i < 100; i++)
         {
-            args = new MouseEvent { X = i, Y = 1, Flags = MouseFlags.ReportMousePosition };
+            args = new MouseEvent { Position = new (i, 1), Flags = MouseFlags.ReportMousePosition };
             Application.OnMouseEvent (args);
             Application.Refresh ();
             Assert.Null (clicked);
             Assert.Equal (tab1, tv.SelectedTab);
         }
 
-        args = new MouseEvent { X = 3, Y = 1, Flags = MouseFlags.Button1Clicked };
+        args = new MouseEvent { Position = new (3, 1), Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
         Assert.Equal (tab1, clicked);
         Assert.Equal (tab1, tv.SelectedTab);
 
         // Click to tab2
-        args = new MouseEvent { X = 6, Y = 1, Flags = MouseFlags.Button1Clicked };
+        args = new MouseEvent { Position = new (6, 1), Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
         Assert.Equal (tab2, clicked);
@@ -173,7 +173,7 @@ public class TabViewTests
                              e.MouseEvent.Handled = true;
                          };
 
-        args = new MouseEvent { X = 3, Y = 1, Flags = MouseFlags.Button1Clicked };
+        args = new MouseEvent { Position = new (3, 1), Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
 
@@ -181,7 +181,7 @@ public class TabViewTests
         Assert.Equal (tab1, clicked);
         Assert.Equal (tab2, tv.SelectedTab);
 
-        args = new MouseEvent { X = 12, Y = 1, Flags = MouseFlags.Button1Clicked };
+        args = new MouseEvent { Position = new (12, 1), Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
 
@@ -235,7 +235,7 @@ public class TabViewTests
         Application.Begin (top);
 
         // Click the right arrow
-        var args = new MouseEvent { X = 6, Y = 2, Flags = MouseFlags.Button1Clicked };
+        var args = new MouseEvent { Position = new (6, 2), Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
         Assert.Null (clicked);
@@ -255,7 +255,7 @@ public class TabViewTests
                                             );
 
         // Click the left arrow
-        args = new MouseEvent { X = 0, Y = 2, Flags = MouseFlags.Button1Clicked };
+        args = new MouseEvent { Position = new (0, 2), Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
         Assert.Null (clicked);
@@ -325,7 +325,7 @@ public class TabViewTests
         Application.Begin (top);
 
         // Click the right arrow
-        var args = new MouseEvent { X = 7, Y = 3, Flags = MouseFlags.Button1Clicked };
+        var args = new MouseEvent { Position = new (7, 3), Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
         Assert.Null (clicked);
@@ -347,7 +347,7 @@ public class TabViewTests
                                             );
 
         // Click the left arrow
-        args = new MouseEvent { X = 1, Y = 3, Flags = MouseFlags.Button1Clicked };
+        args = new MouseEvent { Position = new (1, 3), Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
         Assert.Null (clicked);

+ 7 - 7
UnitTests/Views/TableViewTests.cs

@@ -2197,7 +2197,7 @@ public class TableViewTests
 
         // Clicking in bottom row
         tv.NewMouseEvent (
-                       new MouseEvent { X = 1, Y = 4, Flags = MouseFlags.Button1Clicked }
+                       new MouseEvent { Position = new (1, 4), Flags = MouseFlags.Button1Clicked }
                       );
 
         // should select that row
@@ -2205,7 +2205,7 @@ public class TableViewTests
 
         // shift clicking top row
         tv.NewMouseEvent (
-                       new MouseEvent { X = 1, Y = 2, Flags = MouseFlags.Button1Clicked | MouseFlags.ButtonCtrl }
+                       new MouseEvent { Position = new (1, 2), Flags = MouseFlags.Button1Clicked | MouseFlags.ButtonCtrl }
                       );
 
         // should extend the selection
@@ -2269,7 +2269,7 @@ public class TableViewTests
 
         // Clicking in bottom row
         tv.NewMouseEvent (
-                       new MouseEvent { X = 1, Y = 4, Flags = MouseFlags.Button1Clicked }
+                       new MouseEvent { Position = new (1, 4), Flags = MouseFlags.Button1Clicked }
                       );
 
         // should select that row
@@ -2324,7 +2324,7 @@ public class TableViewTests
 
         // Clicking in bottom row
         tv.NewMouseEvent (
-                       new MouseEvent { X = 1, Y = 4, Flags = MouseFlags.Button1Clicked }
+                       new MouseEvent { Position = new (1, 4), Flags = MouseFlags.Button1Clicked }
                       );
 
         // should select that row
@@ -2377,7 +2377,7 @@ A B C
 
         // Clicking in bottom row
         tv.NewMouseEvent (
-                       new MouseEvent { X = 1, Y = 4, Flags = MouseFlags.Button1Clicked }
+                       new MouseEvent { Position = new (1, 4), Flags = MouseFlags.Button1Clicked }
                       );
 
         // should select that row
@@ -2558,7 +2558,7 @@ A B C
 
         // Clicking in bottom row
         tv.NewMouseEvent (
-                       new MouseEvent { X = 1, Y = 3, Flags = MouseFlags.Button1Clicked }
+                       new MouseEvent { Position = new (1, 3), Flags = MouseFlags.Button1Clicked }
                       );
 
         // should select that row
@@ -2566,7 +2566,7 @@ A B C
 
         // shift clicking top row
         tv.NewMouseEvent (
-                       new MouseEvent { X = 1, Y = 2, Flags = MouseFlags.Button1Clicked | MouseFlags.ButtonShift }
+                       new MouseEvent { Position = new (1, 2), Flags = MouseFlags.Button1Clicked | MouseFlags.ButtonShift }
                       );
 
         // should extend the selection

+ 8 - 8
UnitTests/Views/TextFieldTests.cs

@@ -123,7 +123,7 @@ public class TextFieldTests
         Assert.False (fv.HasFocus);
 
         tf.NewMouseEvent (
-                       new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1DoubleClicked }
+                       new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked }
                       );
 
         Assert.Null (tf.SelectedText);
@@ -137,7 +137,7 @@ public class TextFieldTests
         tf.CanFocus = true;
 
         tf.NewMouseEvent (
-                       new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1DoubleClicked }
+                       new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked }
                       );
 
         Assert.Equal ("some ", tf.SelectedText);
@@ -149,7 +149,7 @@ public class TextFieldTests
         fv.CanFocus = false;
 
         tf.NewMouseEvent (
-                       new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1DoubleClicked }
+                       new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked }
                       );
 
         Assert.Equal ("some ", tf.SelectedText); // Setting CanFocus to false don't change the SelectedText
@@ -485,7 +485,7 @@ public class TextFieldTests
 
         Assert.True (
                      tf.NewMouseEvent (
-                                    new MouseEvent { X = 7, Y = 1, Flags = MouseFlags.Button1DoubleClicked, View = tf }
+                                    new MouseEvent { Position = new (7, 1), Flags = MouseFlags.Button1DoubleClicked, View = tf }
                                    )
                     );
         Assert.Equal ("Misérables ", tf.SelectedText);
@@ -1150,12 +1150,12 @@ public class TextFieldTests
     {
         var tf = new TextField { Width = 10, Text = " " };
 
-        var ev = new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1DoubleClicked };
+        var ev = new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1DoubleClicked };
 
         tf.NewMouseEvent (ev);
         Assert.Equal (1, tf.SelectedLength);
 
-        ev = new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1DoubleClicked };
+        ev = new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked };
 
         tf.NewMouseEvent (ev);
         Assert.Equal (1, tf.SelectedLength);
@@ -1538,14 +1538,14 @@ public class TextFieldTests
 
         Assert.True (
                      tf.NewMouseEvent (
-                                    new MouseEvent { X = idx, Y = 1, Flags = MouseFlags.Button1DoubleClicked, View = tf }
+                                    new MouseEvent { Position = new (idx, 1), Flags = MouseFlags.Button1DoubleClicked, View = tf }
                                    )
                     );
         Assert.Equal ("movie.", tf.SelectedText);
 
         Assert.True (
                      tf.NewMouseEvent (
-                                    new MouseEvent { X = idx + 1, Y = 1, Flags = MouseFlags.Button1DoubleClicked, View = tf }
+                                    new MouseEvent { Position = new (idx + 1, 1), Flags = MouseFlags.Button1DoubleClicked, View = tf }
                                    )
                     );
         Assert.Equal ("movie.", tf.SelectedText);

+ 1 - 1
UnitTests/Views/TextValidateFieldTests.cs

@@ -322,7 +322,7 @@ public class TextValidateField_NET_Provider_Tests
         Assert.False (field.IsValid);
         Assert.Equal ("--(1   )--", field.Provider.Text);
 
-        field.NewMouseEvent (new MouseEvent { X = 25, Flags = MouseFlags.Button1Pressed });
+        field.NewMouseEvent (new MouseEvent { Position = new (25, 0), Flags = MouseFlags.Button1Pressed });
 
         field.NewKeyDownEvent (Key.D1);
 

+ 13 - 13
UnitTests/Views/TextViewTests.cs

@@ -160,7 +160,7 @@ public class TextViewTests
         Assert.False (fv.CanFocus);
         Assert.False (fv.HasFocus);
 
-        tv.NewMouseEvent (new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1DoubleClicked });
+        tv.NewMouseEvent (new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked });
 
         Assert.Empty (tv.SelectedText);
         Assert.False (tv.CanFocus);
@@ -171,7 +171,7 @@ public class TextViewTests
         Assert.Throws<InvalidOperationException> (() => tv.CanFocus = true);
         fv.CanFocus = true;
         tv.CanFocus = true;
-        tv.NewMouseEvent (new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1DoubleClicked });
+        tv.NewMouseEvent (new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked });
 
         Assert.Equal ("some ", tv.SelectedText);
         Assert.True (tv.CanFocus);
@@ -180,7 +180,7 @@ public class TextViewTests
         Assert.True (fv.HasFocus);
 
         fv.CanFocus = false;
-        tv.NewMouseEvent (new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1DoubleClicked });
+        tv.NewMouseEvent (new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked });
 
         Assert.Equal ("some ", tv.SelectedText); // Setting CanFocus to false don't change the SelectedText
         Assert.False (tv.CanFocus);
@@ -6809,7 +6809,7 @@ This is the second line.
 
         Assert.True (
                      _textView.NewMouseEvent (
-                                           new MouseEvent { X = 12, Y = 0, Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
+                                           new MouseEvent { Position = new (12, 0), Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
                                           )
                     );
         Assert.Equal (0, _textView.SelectionStartColumn);
@@ -6818,7 +6818,7 @@ This is the second line.
         Assert.True (_textView.Selecting);
         Assert.Equal ("TAB to jump ", _textView.SelectedText);
 
-        Assert.True (_textView.NewMouseEvent (new MouseEvent { X = 12, Y = 0, Flags = MouseFlags.Button1Clicked }));
+        Assert.True (_textView.NewMouseEvent (new MouseEvent { Position = new (12, 0), Flags = MouseFlags.Button1Clicked }));
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (new Point (12, 0), _textView.CursorPosition);
@@ -6827,7 +6827,7 @@ This is the second line.
 
         Assert.True (
                      _textView.NewMouseEvent (
-                                           new MouseEvent { X = 19, Y = 0, Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
+                                           new MouseEvent { Position = new (19, 0), Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
                                           )
                     );
         Assert.Equal (0, _textView.SelectionStartRow);
@@ -6836,7 +6836,7 @@ This is the second line.
         Assert.True (_textView.Selecting);
         Assert.Equal ("TAB to jump between", _textView.SelectedText);
 
-        Assert.True (_textView.NewMouseEvent (new MouseEvent { X = 19, Y = 0, Flags = MouseFlags.Button1Clicked }));
+        Assert.True (_textView.NewMouseEvent (new MouseEvent { Position = new (19, 0), Flags = MouseFlags.Button1Clicked }));
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (new Point (19, 0), _textView.CursorPosition);
@@ -6845,7 +6845,7 @@ This is the second line.
 
         Assert.True (
                      _textView.NewMouseEvent (
-                                           new MouseEvent { X = 24, Y = 0, Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
+                                           new MouseEvent { Position = new (24, 0), Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
                                           )
                     );
         Assert.Equal (0, _textView.SelectionStartRow);
@@ -6854,14 +6854,14 @@ This is the second line.
         Assert.True (_textView.Selecting);
         Assert.Equal ("TAB to jump between text", _textView.SelectedText);
 
-        Assert.True (_textView.NewMouseEvent (new MouseEvent { X = 24, Y = 0, Flags = MouseFlags.Button1Clicked }));
+        Assert.True (_textView.NewMouseEvent (new MouseEvent { Position = new (24, 0), Flags = MouseFlags.Button1Clicked }));
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (new Point (24, 0), _textView.CursorPosition);
         Assert.True (_textView.Selecting);
         Assert.Equal ("TAB to jump between text", _textView.SelectedText);
 
-        Assert.True (_textView.NewMouseEvent (new MouseEvent { X = 24, Y = 0, Flags = MouseFlags.Button1Pressed }));
+        Assert.True (_textView.NewMouseEvent (new MouseEvent { Position = new (24, 0), Flags = MouseFlags.Button1Pressed }));
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (new Point (24, 0), _textView.CursorPosition);
@@ -7642,12 +7642,12 @@ TAB to jump between text field",
     {
         var tv = new TextView { Width = 10, Text = " " };
 
-        var ev = new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1DoubleClicked };
+        var ev = new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1DoubleClicked };
 
         tv.NewMouseEvent (ev);
         Assert.Equal (1, tv.SelectedLength);
 
-        ev = new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1DoubleClicked };
+        ev = new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked };
 
         tv.NewMouseEvent (ev);
         Assert.Equal (1, tv.SelectedLength);
@@ -7764,7 +7764,7 @@ line.
                                                       _output
                                                      );
 
-        Assert.True (tv.NewMouseEvent (new MouseEvent { X = 0, Y = 3, Flags = MouseFlags.Button1Pressed }));
+        Assert.True (tv.NewMouseEvent (new MouseEvent { Position = new (0, 3), Flags = MouseFlags.Button1Pressed }));
         tv.Draw ();
         Assert.Equal (new Point (0, 3), tv.CursorPosition);
         Assert.Equal (new Point (13, 0), cp);

+ 28 - 60
UnitTests/Views/ToplevelTests.cs

@@ -382,12 +382,12 @@ public class ToplevelTests
         Assert.Equal (new Rectangle (0, 1, 60, 15), win.Frame);
 
         //Assert.Null (Toplevel._dragPosition);
-        win.NewMouseEvent (new MouseEvent { X = 6, Y = 0, Flags = MouseFlags.Button1Pressed });
+        win.NewMouseEvent (new MouseEvent { Position = new (6, 0), Flags = MouseFlags.Button1Pressed });
         // Assert.Equal (new Point (6, 0), Toplevel._dragPosition);
-        win.NewMouseEvent (new MouseEvent { X = 6, Y = 0, Flags = MouseFlags.Button1Released });
+        win.NewMouseEvent (new MouseEvent { Position = new (6, 0), Flags = MouseFlags.Button1Released });
         //Assert.Null (Toplevel._dragPosition);
         win.CanFocus = false;
-        win.NewMouseEvent (new MouseEvent { X = 6, Y = 0, Flags = MouseFlags.Button1Pressed });
+        win.NewMouseEvent (new MouseEvent { Position = new (6, 0), Flags = MouseFlags.Button1Pressed });
         //Assert.Null (Toplevel._dragPosition);
     }
 
@@ -883,7 +883,7 @@ public class ToplevelTests
                                          Assert.Null (Application.MouseGrabView);
 
                                          // Grab the mouse
-                                         Application.OnMouseEvent (new () { X = 3, Y = 2, Flags = MouseFlags.Button1Pressed });
+                                         Application.OnMouseEvent (new () { Position = new (3, 2), Flags = MouseFlags.Button1Pressed });
 
                                          Assert.Equal (Application.Current.Border, Application.MouseGrabView);
                                          Assert.Equal (new Rectangle (2, 2, 10, 3), Application.Current.Frame);
@@ -895,10 +895,8 @@ public class ToplevelTests
                                          // Drag to left
                                          Application.OnMouseEvent (new ()
                                          {
-                                             X = 2,
-                                             Y = 2,
-                                             Flags = MouseFlags.Button1Pressed
-                                                     | MouseFlags.ReportMousePosition
+                                             Position = new (2, 2), Flags = MouseFlags.Button1Pressed
+                                                                   | MouseFlags.ReportMousePosition
                                          });
                                          Application.Refresh ();
 
@@ -919,10 +917,7 @@ public class ToplevelTests
                                          // Drag up
                                          Application.OnMouseEvent (new ()
                                          {
-                                             X = 2,
-                                             Y = 1,
-                                             Flags = MouseFlags.Button1Pressed
-                                                     | MouseFlags.ReportMousePosition
+                                             Position = new (2, 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
                                          });
                                          Application.Refresh ();
 
@@ -943,7 +938,7 @@ public class ToplevelTests
                                          Assert.Equal (Application.Current.Border, Application.MouseGrabView);
 
                                          // Ungrab the mouse
-                                         Application.OnMouseEvent (new () { X = 2, Y = 1, Flags = MouseFlags.Button1Released });
+                                         Application.OnMouseEvent (new () { Position = new (2, 1), Flags = MouseFlags.Button1Released });
                                          Application.Refresh ();
 
                                          Assert.Null (Application.MouseGrabView);
@@ -993,8 +988,7 @@ public class ToplevelTests
                                          // Grab the mouse
                                          Application.OnMouseEvent (new MouseEvent
                                          {
-                                             X = win.Frame.X, Y = win.Frame.Y,
-                                             Flags = MouseFlags.Button1Pressed
+                                             Position = new (win.Frame.X, win.Frame.Y), Flags = MouseFlags.Button1Pressed
                                          });
 
                                          Assert.Equal (win.Border, Application.MouseGrabView);
@@ -1009,10 +1003,8 @@ public class ToplevelTests
 
                                          Application.OnMouseEvent (new MouseEvent
                                          {
-                                             X = win.Frame.X + movex,
-                                             Y = win.Frame.Y + movey,
-                                             Flags = MouseFlags.Button1Pressed
-                                                     | MouseFlags.ReportMousePosition
+                                             Position = new (win.Frame.X + movex, win.Frame.Y + movey), Flags = MouseFlags.Button1Pressed
+                                                                                                       | MouseFlags.ReportMousePosition
                                          });
 
                                          Assert.Equal (win.Border, Application.MouseGrabView);
@@ -1034,10 +1026,8 @@ public class ToplevelTests
 
                                          Application.OnMouseEvent (new MouseEvent
                                          {
-                                             X = win.Frame.X + movex,
-                                             Y = win.Frame.Y + movey,
-                                             Flags = MouseFlags.Button1Pressed
-                                                     | MouseFlags.ReportMousePosition
+                                             Position = new (win.Frame.X + movex, win.Frame.Y + movey), Flags = MouseFlags.Button1Pressed
+                                                                                                       | MouseFlags.ReportMousePosition
                                          });
 
                                          Assert.Equal (win.Border, Application.MouseGrabView);
@@ -1059,8 +1049,7 @@ public class ToplevelTests
 
                                          Application.OnMouseEvent (new MouseEvent
                                          {
-                                             X = win.Frame.X + movex, Y = win.Frame.Y + movey,
-                                             Flags = MouseFlags.Button1Released
+                                             Position = new (win.Frame.X + movex, win.Frame.Y + movey), Flags = MouseFlags.Button1Released
                                          });
 
                                          Assert.Null (Application.MouseGrabView);
@@ -1345,11 +1334,11 @@ public class ToplevelTests
         Assert.Equal (new (3, 3, 194, 94), win.Frame);
 
 
-        Application.OnMouseEvent (new MouseEvent { X = 6, Y = 6, Flags = MouseFlags.Button1Pressed });
+        Application.OnMouseEvent (new MouseEvent { Position = new (6, 6), Flags = MouseFlags.Button1Pressed });
         Assert.Equal (win.Border, Application.MouseGrabView);
         Assert.Equal (new (3, 3, 194, 94), win.Frame);
 
-        Application.OnMouseEvent (new MouseEvent { X = 9, Y = 9, Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
+        Application.OnMouseEvent (new MouseEvent { Position = new (9, 9), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
         Assert.Equal (win.Border, Application.MouseGrabView);
         top.SetNeedsLayout ();
         top.LayoutSubviews ();
@@ -1358,10 +1347,7 @@ public class ToplevelTests
 
         Application.OnMouseEvent (new MouseEvent
         {
-            X = 5,
-            Y = 5,
-            Flags = MouseFlags.Button1Pressed
-                    | MouseFlags.ReportMousePosition
+            Position = new (5, 5), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
         });
         Assert.Equal (win.Border, Application.MouseGrabView);
         top.SetNeedsLayout ();
@@ -1369,11 +1355,11 @@ public class ToplevelTests
         Assert.Equal (new Rectangle (2, 2, 195, 95), win.Frame);
         Application.Refresh ();
 
-        Application.OnMouseEvent (new MouseEvent { X = 5, Y = 5, Flags = MouseFlags.Button1Released });
+        Application.OnMouseEvent (new MouseEvent { Position = new (5, 5), Flags = MouseFlags.Button1Released });
         // ScrollView always grab the mouse when the container's subview OnMouseEnter don't want grab the mouse
         Assert.Equal (scrollView, Application.MouseGrabView);
 
-        Application.OnMouseEvent (new MouseEvent { X = 4, Y = 4, Flags = MouseFlags.ReportMousePosition });
+        Application.OnMouseEvent (new MouseEvent { Position = new (4, 4), Flags = MouseFlags.ReportMousePosition });
         Assert.Equal (scrollView, Application.MouseGrabView);
     }
 
@@ -1392,16 +1378,13 @@ public class ToplevelTests
 
         Assert.Null (Application.MouseGrabView);
 
-        Application.OnMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed });
+        Application.OnMouseEvent (new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Pressed });
 
         Assert.Equal (window.Border, Application.MouseGrabView);
 
         Application.OnMouseEvent (new MouseEvent
         {
-            X = -11,
-            Y = -4,
-            Flags = MouseFlags.Button1Pressed
-                    | MouseFlags.ReportMousePosition
+            Position = new (-11, -4), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
         });
 
         Application.Refresh ();
@@ -1413,10 +1396,7 @@ public class ToplevelTests
 
         Application.OnMouseEvent (new MouseEvent
         {
-            X = -1,
-            Y = -1,
-            Flags = MouseFlags.Button1Pressed
-                    | MouseFlags.ReportMousePosition
+            Position = new (-1, -1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
         });
 
         Application.Refresh ();
@@ -1428,10 +1408,7 @@ public class ToplevelTests
 
         Application.OnMouseEvent (new MouseEvent
         {
-            X = -1,
-            Y = -1,
-            Flags = MouseFlags.Button1Pressed
-                    | MouseFlags.ReportMousePosition
+            Position = new (-1, -1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
         });
 
         Application.Refresh ();
@@ -1440,10 +1417,7 @@ public class ToplevelTests
 
         Application.OnMouseEvent (new MouseEvent
         {
-            X = 18,
-            Y = 1,
-            Flags = MouseFlags.Button1Pressed
-                    | MouseFlags.ReportMousePosition
+            Position = new (18, 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
         });
 
         Application.Refresh ();
@@ -1453,10 +1427,7 @@ public class ToplevelTests
         // On a real app we can't go beyond the SuperView bounds
         Application.OnMouseEvent (new MouseEvent
         {
-            X = 19,
-            Y = 2,
-            Flags = MouseFlags.Button1Pressed
-                    | MouseFlags.ReportMousePosition
+            Position = new (19, 2), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
         });
 
         Application.Refresh ();
@@ -1493,7 +1464,7 @@ public class ToplevelTests
         Assert.Null (Application.MouseGrabView);
         Assert.Equal (new Rectangle (0, 0, 10, 3), window.Frame);
 
-        Application.OnMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed });
+        Application.OnMouseEvent (new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Pressed });
 
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1503,10 +1474,7 @@ public class ToplevelTests
 
         Application.OnMouseEvent (new MouseEvent
         {
-            X = 1,
-            Y = 1,
-            Flags = MouseFlags.Button1Pressed
-                    | MouseFlags.ReportMousePosition
+            Position = new (1, 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
         });
 
         firstIteration = false;
@@ -1591,7 +1559,7 @@ public class ToplevelTests
 
         Assert.Equal (new Rectangle (2, 1, 15, 10), testWindow.Frame);
 
-        Application.OnMouseEvent (new () { X = 5, Y = 2, Flags = MouseFlags.Button1Clicked });
+        Application.OnMouseEvent (new () { Position = new (5, 2), Flags = MouseFlags.Button1Clicked });
         Application.Top.Draw ();
 
         var firstIteration = false;

+ 4 - 4
UnitTests/Views/TreeTableSourceTests.cs

@@ -108,7 +108,7 @@ public class TreeTableSourceTests : IDisposable
         Assert.Equal (0, tv.SelectedRow);
         Assert.Equal (0, tv.SelectedColumn);
 
-        Assert.True (tv.NewMouseEvent (new MouseEvent { X = 2, Y = 2, Flags = MouseFlags.Button1Clicked }));
+        Assert.True (tv.NewMouseEvent (new MouseEvent { Position = new (2, 2), Flags = MouseFlags.Button1Clicked }));
 
         tv.Draw ();
 
@@ -125,15 +125,15 @@ public class TreeTableSourceTests : IDisposable
         TestHelpers.AssertDriverContentsAre (expected, _output);
 
         // Clicking to the right/left of the expand/collapse does nothing
-        tv.NewMouseEvent (new MouseEvent { X = 3, Y = 2, Flags = MouseFlags.Button1Clicked });
+        tv.NewMouseEvent (new MouseEvent { Position = new (3, 2), Flags = MouseFlags.Button1Clicked });
         tv.Draw ();
         TestHelpers.AssertDriverContentsAre (expected, _output);
-        tv.NewMouseEvent (new MouseEvent { X = 1, Y = 2, Flags = MouseFlags.Button1Clicked });
+        tv.NewMouseEvent (new MouseEvent { Position = new (1, 2), Flags = MouseFlags.Button1Clicked });
         tv.Draw ();
         TestHelpers.AssertDriverContentsAre (expected, _output);
 
         // Clicking on the + again should collapse
-        tv.NewMouseEvent (new MouseEvent { X = 2, Y = 2, Flags = MouseFlags.Button1Clicked });
+        tv.NewMouseEvent (new MouseEvent { Position = new (2, 2), Flags = MouseFlags.Button1Clicked });
         tv.Draw ();
 
         expected =

+ 4 - 4
UnitTests/Views/TreeViewTests.cs

@@ -453,7 +453,7 @@ public class TreeViewTests
         Assert.False (called);
 
         // double click triggers activation
-        tree.NewMouseEvent (new MouseEvent { Y = 0, Flags = MouseFlags.Button1DoubleClicked });
+        tree.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1DoubleClicked });
 
         Assert.True (called);
         Assert.Same (f, activated);
@@ -485,12 +485,12 @@ public class TreeViewTests
         Assert.False (called);
 
         // double click does nothing because we changed button binding to right click
-        tree.NewMouseEvent (new MouseEvent { Y = 1, Flags = MouseFlags.Button1DoubleClicked });
+        tree.NewMouseEvent (new MouseEvent { Position = new (0, 1), Flags = MouseFlags.Button1DoubleClicked });
 
         Assert.Null (activated);
         Assert.False (called);
 
-        tree.NewMouseEvent (new MouseEvent { Y = 1, Flags = MouseFlags.Button2Clicked });
+        tree.NewMouseEvent (new MouseEvent { Position = new (0, 1), Flags = MouseFlags.Button2Clicked });
 
         Assert.True (called);
         Assert.Same (car1, activated);
@@ -522,7 +522,7 @@ public class TreeViewTests
         Assert.False (called);
 
         // double click does nothing because we changed button to null
-        tree.NewMouseEvent (new MouseEvent { Y = 0, Flags = MouseFlags.Button1DoubleClicked });
+        tree.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1DoubleClicked });
 
         Assert.False (called);
         Assert.Null (activated);