2
0
Эх сурвалжийг харах

Merge pull request #3461 from tig/v2_3460-xxxToxxx-Consistency

Fixes #3460.  `xxxtoxxx` consistency
Tig 1 жил өмнө
parent
commit
6c6dec124d
81 өөрчлөгдсөн 662 нэмэгдсэн , 681 устгасан
  1. 1 1
      Analyzers/Terminal.Gui.Analyzers.Internal.Tests/Terminal.Gui.Analyzers.Internal.Tests.csproj
  2. 3 3
      Analyzers/Terminal.Gui.Analyzers.Internal/Terminal.Gui.Analyzers.Internal.csproj
  3. 1 1
      ReactiveExample/ReactiveExample.csproj
  4. 27 34
      Terminal.Gui/Application.cs
  5. 2 2
      Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs
  6. 1 1
      Terminal.Gui/ConsoleDrivers/NetDriver.cs
  7. 5 8
      Terminal.Gui/ConsoleDrivers/WindowsDriver.cs
  8. 11 13
      Terminal.Gui/Drawing/Thickness.cs
  9. 10 13
      Terminal.Gui/Input/Mouse.cs
  10. 3 3
      Terminal.Gui/Text/Autocomplete/PopupAutocomplete.cs
  11. 8 6
      Terminal.Gui/View/Adornment/Adornment.cs
  12. 5 5
      Terminal.Gui/View/Adornment/Border.cs
  13. 33 38
      Terminal.Gui/View/Layout/ViewLayout.cs
  14. 26 13
      Terminal.Gui/View/ViewContent.cs
  15. 3 3
      Terminal.Gui/View/ViewDrawing.cs
  16. 2 2
      Terminal.Gui/View/ViewMouse.cs
  17. 1 4
      Terminal.Gui/View/ViewSubViews.cs
  18. 1 1
      Terminal.Gui/Views/ColorPicker.cs
  19. 4 4
      Terminal.Gui/Views/ComboBox.cs
  20. 1 2
      Terminal.Gui/Views/DateField.cs
  21. 3 3
      Terminal.Gui/Views/FileDialog.cs
  22. 6 6
      Terminal.Gui/Views/HexView.cs
  23. 4 4
      Terminal.Gui/Views/ListView.cs
  24. 15 16
      Terminal.Gui/Views/Menu/Menu.cs
  25. 11 8
      Terminal.Gui/Views/Menu/MenuBar.cs
  26. 2 2
      Terminal.Gui/Views/RadioGroup.cs
  27. 1 1
      Terminal.Gui/Views/ScrollBarView.cs
  28. 2 2
      Terminal.Gui/Views/ScrollView.cs
  29. 6 6
      Terminal.Gui/Views/Slider.cs
  30. 1 1
      Terminal.Gui/Views/StatusBar.cs
  31. 1 1
      Terminal.Gui/Views/TableView/CheckBoxTableSourceWrapper.cs
  32. 35 4
      Terminal.Gui/Views/TableView/TableView.cs
  33. 1 1
      Terminal.Gui/Views/TableView/TreeTableSource.cs
  34. 1 1
      Terminal.Gui/Views/TextField.cs
  35. 1 1
      Terminal.Gui/Views/TextValidateField.cs
  36. 8 8
      Terminal.Gui/Views/TextView.cs
  37. 8 8
      Terminal.Gui/Views/TileView.cs
  38. 1 1
      Terminal.Gui/Views/TimeField.cs
  39. 3 3
      Terminal.Gui/Views/TreeView/TreeView.cs
  40. 8 8
      UICatalog/Scenarios/CharacterMap.cs
  41. 2 2
      UICatalog/Scenarios/ContextMenus.cs
  42. 2 2
      UICatalog/Scenarios/LineDrawing.cs
  43. 1 1
      UICatalog/Scenarios/ListColumns.cs
  44. 4 4
      UICatalog/Scenarios/Mouse.cs
  45. 2 2
      UICatalog/Scenarios/Notepad.cs
  46. 1 1
      UICatalog/Scenarios/Scrolling.cs
  47. 2 2
      UICatalog/Scenarios/TableEditor.cs
  48. 3 3
      UICatalog/Scenarios/TreeViewFileSystem.cs
  49. 1 1
      UICatalog/UICatalog.csproj
  50. 3 3
      UnitTests/Application/ApplicationTests.cs
  51. 14 14
      UnitTests/Application/MouseTests.cs
  52. 3 3
      UnitTests/Drawing/ThicknessTests.cs
  53. 2 2
      UnitTests/Input/EscSeqUtilsTests.cs
  54. 1 1
      UnitTests/Text/AutocompleteTests.cs
  55. 3 3
      UnitTests/UnitTests.csproj
  56. 2 2
      UnitTests/View/Adornment/AdornmentSubViewTests.cs
  57. 18 18
      UnitTests/View/Adornment/ToScreenTests.cs
  58. 18 18
      UnitTests/View/FindDeepestViewTests.cs
  59. 42 42
      UnitTests/View/Layout/Pos.Tests.cs
  60. 10 10
      UnitTests/View/Layout/ScreenToTests.cs
  61. 7 7
      UnitTests/View/Layout/ToScreenTests.cs
  62. 9 9
      UnitTests/View/MouseTests.cs
  63. 72 72
      UnitTests/View/NavigationTests.cs
  64. 3 3
      UnitTests/Views/CheckBoxTests.cs
  65. 1 1
      UnitTests/Views/ColorPickerTests.cs
  66. 27 27
      UnitTests/Views/ComboBoxTests.cs
  67. 15 15
      UnitTests/Views/ContextMenuTests.cs
  68. 1 1
      UnitTests/Views/LabelTests.cs
  69. 5 13
      UnitTests/Views/ListViewTests.cs
  70. 43 43
      UnitTests/Views/MenuBarTests.cs
  71. 2 5
      UnitTests/Views/OverlappedTests.cs
  72. 2 2
      UnitTests/Views/ScrollBarViewTests.cs
  73. 1 1
      UnitTests/Views/StatusBarTests.cs
  74. 9 9
      UnitTests/Views/TabViewTests.cs
  75. 7 7
      UnitTests/Views/TableViewTests.cs
  76. 8 8
      UnitTests/Views/TextFieldTests.cs
  77. 1 1
      UnitTests/Views/TextValidateFieldTests.cs
  78. 13 13
      UnitTests/Views/TextViewTests.cs
  79. 28 60
      UnitTests/Views/ToplevelTests.cs
  80. 4 4
      UnitTests/Views/TreeTableSourceTests.cs
  81. 4 4
      UnitTests/Views/TreeViewTests.cs

+ 1 - 1
Analyzers/Terminal.Gui.Analyzers.Internal.Tests/Terminal.Gui.Analyzers.Internal.Tests.csproj

@@ -22,7 +22,7 @@
     <PackageReference Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="4.9.2" PrivateAssets="all" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
     <PackageReference Include="NUnit" Version="4.1.0" />
-    <PackageReference Include="NUnit.Analyzers" Version="4.1.0">
+    <PackageReference Include="NUnit.Analyzers" Version="4.2.0">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>

+ 3 - 3
Analyzers/Terminal.Gui.Analyzers.Internal/Terminal.Gui.Analyzers.Internal.csproj

@@ -53,9 +53,9 @@
         <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.9.2" PrivateAssets="all" />
         <PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="8.0.0" PrivateAssets="all" />
         <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0" PrivateAssets="all" />
-        <PackageReference Include="Roslynator.Analyzers" Version="4.12.1" PrivateAssets="all" />
-        <PackageReference Include="Roslynator.CodeAnalysis.Analyzers" Version="4.12.1" PrivateAssets="all" />
-        <PackageReference Include="Roslynator.CSharp" Version="4.12.1" PrivateAssets="all" />
+        <PackageReference Include="Roslynator.Analyzers" Version="4.12.2" PrivateAssets="all" />
+        <PackageReference Include="Roslynator.CodeAnalysis.Analyzers" Version="4.12.2" PrivateAssets="all" />
+        <PackageReference Include="Roslynator.CSharp" Version="4.12.2" PrivateAssets="all" />
         <PackageReference Include="System.Numerics.Vectors" Version="4.5.0" PrivateAssets="all" />
         <PackageReference Include="System.Runtime.Extensions" Version="4.3.1" PrivateAssets="all" />
         <PackageReference Include="System.Runtime.Numerics" Version="4.3.0" PrivateAssets="all" />

+ 1 - 1
ReactiveExample/ReactiveExample.csproj

@@ -12,7 +12,7 @@
   </PropertyGroup>
   <ItemGroup>
     <PackageReference Include="ReactiveUI.Fody" Version="19.5.41" />
-    <PackageReference Include="ReactiveUI" Version="19.6.1" />
+    <PackageReference Include="ReactiveUI" Version="20.0.1" />
     <PackageReference Include="ReactiveMarbles.ObservableEvents.SourceGenerator" Version="1.3.1" PrivateAssets="all" />
   </ItemGroup>
   <ItemGroup>

+ 27 - 34
Terminal.Gui/Application.cs

@@ -1,10 +1,7 @@
-using System.Collections.Generic;
 using System.Diagnostics;
 using System.Globalization;
 using System.Reflection;
-using System.Reflection.Metadata.Ecma335;
 using System.Text.Json.Serialization;
-using static Unix.Terminal.Curses;
 
 namespace Terminal.Gui;
 
@@ -972,7 +969,7 @@ public static partial class Application
 
         if (PositionCursor (state.Toplevel))
         {
-            Driver.UpdateCursor();
+            Driver.UpdateCursor ();
         }
 
         //        else
@@ -1231,10 +1228,10 @@ public static partial class Application
     /// <value>The current.</value>
     public static Toplevel Current { get; private set; }
 
-    private static void EnsureModalOrVisibleAlwaysOnTop (Toplevel Toplevel)
+    private static void EnsureModalOrVisibleAlwaysOnTop (Toplevel topLevel)
     {
-        if (!Toplevel.Running
-            || (Toplevel == Current && Toplevel.Visible)
+        if (!topLevel.Running
+            || (topLevel == Current && topLevel.Visible)
             || OverlappedTop == null
             || _topLevels.Peek ().Modal)
         {
@@ -1251,24 +1248,24 @@ public static partial class Application
             }
         }
 
-        if (!Toplevel.Visible && Toplevel == Current)
+        if (!topLevel.Visible && topLevel == Current)
         {
             OverlappedMoveNext ();
         }
     }
 
 #nullable enable
-    private static Toplevel? FindDeepestTop (Toplevel start, int x, int y)
+    private static Toplevel? FindDeepestTop (Toplevel start, in Point location)
     {
-        if (!start.Frame.Contains (x, y))
+        if (!start.Frame.Contains (location))
         {
             return null;
         }
 
         if (_topLevels is { Count: > 0 })
         {
-            int rx = x - start.Frame.X;
-            int ry = y - start.Frame.Y;
+            int rx = location.X - start.Frame.X;
+            int ry = location.Y - start.Frame.Y;
 
             foreach (Toplevel t in _topLevels)
             {
@@ -1561,7 +1558,7 @@ public static partial class Application
             return;
         }
 
-        var view = View.FindDeepestView (Current, mouseEvent.X, mouseEvent.Y);
+        var view = View.FindDeepestView (Current, mouseEvent.Position);
 
         if (view is { })
         {
@@ -1579,18 +1576,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 (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);
@@ -1623,10 +1619,10 @@ 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, mouseEvent.X, mouseEvent.Y);
+                View? top = FindDeepestTop (Top, mouseEvent.Position);
+                view = View.FindDeepestView (top, mouseEvent.Position);
 
-                if (view is { } && view != OverlappedTop && top != Current)
+                if (view is { } && view != OverlappedTop && top != Current && top is { })
                 {
                     MoveCurrent ((Toplevel)top);
                 }
@@ -1642,27 +1638,25 @@ public static partial class Application
 
         if (view is Adornment adornment)
         {
-            Point frameLoc = adornment.ScreenToFrame (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 (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
             };
         }
@@ -1714,14 +1708,13 @@ public static partial class Application
                 break;
             }
 
-            Point boundsPoint = view.ScreenToViewport (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
         };
     }

+ 11 - 13
Terminal.Gui/Drawing/Thickness.cs

@@ -9,7 +9,8 @@ namespace Terminal.Gui;
 /// </summary>
 /// <remarks>
 ///     <para>
-///         Use the helper API (<see cref="GetInside(Rectangle)"/> to get the rectangle describing the insides of the frame,
+///         Use the helper API (<see cref="GetInside(Rectangle)"/> to get the rectangle describing the insides of the
+///         frame,
 ///         with the thickness widths subtracted.
 ///     </para>
 ///     <para>Use the helper API (<see cref="Draw(Rectangle, string)"/> to draw the frame with the specified thickness.</para>
@@ -86,32 +87,29 @@ public class Thickness : IEquatable<Thickness>
     public bool Equals (Thickness other) { return other is { } && Left == other.Left && Right == other.Right && Top == other.Top && Bottom == other.Bottom; }
 
     /// <summary>
-    ///     Gets whether the specified coordinates lie within the thickness (inside the bounding rectangle but outside of
+    ///     Gets whether the specified coordinates lie within the thickness (inside the bounding rectangle but outside
     ///     the rectangle described by <see cref="GetInside(Rectangle)"/>.
     /// </summary>
     /// <param name="outside">Describes the location and size of the rectangle that contains the thickness.</param>
-    /// <param name="x">The x coord to check.</param>
-    /// <param name="y">The y coord to check.</param>
+    /// <param name="location">The coordinate to check.</param>
     /// <returns><see langword="true"/> if the specified coordinate is within the thickness; <see langword="false"/> otherwise.</returns>
-    public bool Contains (Rectangle outside, int x, int y)
+    public bool Contains (in Rectangle outside, in Point location)
     {
         Rectangle inside = GetInside (outside);
 
-        return outside.Contains (x, y) && !inside.Contains (x, y);
+        return outside.Contains (location) && !inside.Contains (location);
     }
 
     /// <summary>
-    /// Adds the thickness widths of another <see cref="Thickness"/> to the current <see cref="Thickness"/>, returning a new <see cref="Thickness"/>.
+    ///     Adds the thickness widths of another <see cref="Thickness"/> to the current <see cref="Thickness"/>, returning a
+    ///     new <see cref="Thickness"/>.
     /// </summary>
     /// <param name="other"></param>
     /// <returns></returns>
-    public Thickness Add (Thickness other)
-    {
-        return new Thickness (Left + other.Left, Top + other.Top, Right + other.Right, Bottom + other.Bottom);
-    }
+    public Thickness Add (Thickness other) { return new (Left + other.Left, Top + other.Top, Right + other.Right, Bottom + other.Bottom); }
 
     /// <summary>
-    /// Adds the thickness widths of another <see cref="Thickness"/> to another <see cref="Thickness"/>.
+    ///     Adds the thickness widths of another <see cref="Thickness"/> to another <see cref="Thickness"/>.
     /// </summary>
     /// <param name="a"></param>
     /// <param name="b"></param>
@@ -194,7 +192,7 @@ public class Thickness : IEquatable<Thickness>
                                         );
         }
 
-        if (View.Diagnostics.HasFlag(ViewDiagnosticFlags.Ruler))
+        if (View.Diagnostics.HasFlag (ViewDiagnosticFlags.Ruler))
         {
             // PERF: This can almost certainly be simplified down to a single point offset and fewer calls to Draw
             // Top

+ 10 - 13
Terminal.Gui/Input/Mouse.cs

@@ -116,24 +116,15 @@ 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>
-    ///     Indicates if the current mouse event has been processed. Set this value to <see langword="true"/> to indicate the mouse
-    ///     event was handled.
-    /// </summary>
-    public bool Handled { get; set; }
+    /// <summary>The position of the mouse in <see cref="Gui.View.Viewport"/>-relative coordinates.</summary>
+    public Point Position { get; set; }
 
     /// <summary>
     ///     The screen-relative mouse position.
     /// </summary>
     /// <remarks>
     ///     <para>
-    ///         The <see cref="X"/> and <see cref="Y"/> properties are always <see cref="Gui.View.Viewport"/>-relative. When the mouse is grabbed by a view,
+    ///         <see cref="Position"/> is <see cref="Gui.View.Viewport"/>-relative. When the mouse is grabbed by a view,
     ///         <see cref="ScreenPosition"/> provides the mouse position screen-relative coordinates, enabling the grabbed view to know how much the
     ///         mouse has moved.
     ///     </para>
@@ -143,7 +134,13 @@ public class MouseEvent
     /// </remarks>
     public Point ScreenPosition { get; set; }
 
+    /// <summary>
+    ///     Indicates if the current mouse event has been processed. Set this value to <see langword="true"/> to indicate the mouse
+    ///     event was handled.
+    /// </summary>
+    public bool Handled { get; set; }
+
     /// <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 { })
             {

+ 8 - 6
Terminal.Gui/View/Adornment/Adornment.cs

@@ -135,7 +135,10 @@ public class Adornment : View
     }
 
     /// <inheritdoc/>
-    public override Point ScreenToFrame (int x, int y) { return Parent.ScreenToFrame (x - Frame.X, y - Frame.Y); }
+    public override Point ScreenToFrame (in Point location)
+    {
+        return Parent.ScreenToFrame (new (location.X - Frame.X, location.Y - Frame.Y));
+    }
 
     /// <summary>Does nothing for Adornment</summary>
     /// <returns></returns>
@@ -206,12 +209,11 @@ public class Adornment : View
     /// Indicates whether the specified Parent's SuperView-relative coordinates are within the Adornment's Thickness.
     /// </summary>
     /// <remarks>
-    ///     The <paramref name="x"/> and <paramref name="x"/> are relative to the PARENT's SuperView.
+    ///     The <paramref name="location"/> is relative to the PARENT's SuperView.
     /// </remarks>
-    /// <param name="x"></param>
-    /// <param name="y"></param>
+    /// <param name="location"></param>
     /// <returns><see langword="true"/> if the specified Parent's SuperView-relative coordinates are within the Adornment's Thickness. </returns>
-    public override bool Contains (int x, int y)
+    public override bool Contains (in Point location)
     {
         if (Parent is null)
         {
@@ -221,7 +223,7 @@ public class Adornment : View
         Rectangle frame = Frame;
         frame.Offset (Parent.Frame.Location);
 
-        return Thickness.Contains (frame, x, y);
+        return Thickness.Contains (frame, location);
     }
 
     /// <inheritdoc/>

+ 5 - 5
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 (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,9 +299,9 @@ public class Border : Adornment
                     Parent.SuperView.SetNeedsDisplay ();
                 }
 
-                _dragPosition = new Point (mouseEvent.X, mouseEvent.Y);
+                _dragPosition = mouseEvent.Position;
 
-                Point parentLoc = Parent.SuperView?.ScreenToViewport (mouseEvent.ScreenPosition.X, mouseEvent.ScreenPosition.Y) ?? mouseEvent.ScreenPosition;
+                Point parentLoc = Parent.SuperView?.ScreenToViewport (new (mouseEvent.ScreenPosition.X, mouseEvent.ScreenPosition.Y)) ?? mouseEvent.ScreenPosition;
 
                 GetLocationEnsuringFullVisibility (
                                      Parent,

+ 33 - 38
Terminal.Gui/View/Layout/ViewLayout.cs

@@ -1,4 +1,5 @@
 using System.Diagnostics;
+using Microsoft.CodeAnalysis;
 
 namespace Terminal.Gui;
 
@@ -88,15 +89,13 @@ public partial class View
         }
     }
 
-    private void SetFrame (Rectangle frame)
+    private void SetFrame (in Rectangle frame)
     {
         var oldViewport = Rectangle.Empty;
-        Size? oldContentSize = null;
 
         if (IsInitialized)
         {
             oldViewport = Viewport;
-            oldContentSize = ContentSize;
         }
 
         // This is the only place where _frame should be set directly. Use Frame = or SetFrame instead.
@@ -147,25 +146,22 @@ public partial class View
     ///     View's <see cref="SuperView"/>'s <see cref="Viewport"/>.
     /// </summary>
     /// <returns>The coordinate relative to the <see cref="SuperView"/>'s <see cref="Viewport"/>.</returns>
-    /// <param name="x">Screen-relative column.</param>
-    /// <param name="y">Screen-relative row.</param>
-    public virtual Point ScreenToFrame (int x, int y)
+    /// <param name="location">Screen-relative coordinate.</param>
+    public virtual Point ScreenToFrame (in Point location)
     {
         if (SuperView is null)
         {
-            return new (x - Frame.X, y - Frame.Y);
+            return new (location.X - Frame.X, location.Y - Frame.Y);
         }
 
         Point superViewViewportOffset = SuperView.GetViewportOffsetFromFrame ();
-        superViewViewportOffset.X -= SuperView.Viewport.X;
-        superViewViewportOffset.Y -= SuperView.Viewport.Y;
+        superViewViewportOffset.Offset(-SuperView.Viewport.X, -SuperView.Viewport.Y);
 
-        x -= superViewViewportOffset.X;
-        y -= superViewViewportOffset.Y;
+        Point frame = location;
+        frame.Offset(-superViewViewportOffset.X, -superViewViewportOffset.Y);
 
-        Point frame = SuperView.ScreenToFrame (x, y);
-        frame.X -= Frame.X;
-        frame.Y -= Frame.Y;
+        frame = SuperView.ScreenToFrame (frame);
+        frame.Offset (-Frame.X, -Frame.Y);
 
         return frame;
     }
@@ -180,7 +176,7 @@ public partial class View
     ///     </para>
     ///     <para>
     ///         If set to a relative value (e.g. <see cref="Pos.Center"/>) the value is indeterminate until the view has been
-    ///         initialized ( <see cref="IsInitialized"/> is true) and <see cref="SetRelativeLayout(Size)"/> has been
+    ///         initialized ( <see cref="IsInitialized"/> is true) and <see cref="SetRelativeLayout"/> has been
     ///         called.
     ///     </para>
     ///     <para>
@@ -219,7 +215,7 @@ public partial class View
     ///     </para>
     ///     <para>
     ///         If set to a relative value (e.g. <see cref="Pos.Center"/>) the value is indeterminate until the view has been
-    ///         initialized ( <see cref="IsInitialized"/> is true) and <see cref="SetRelativeLayout(Size)"/> has been
+    ///         initialized ( <see cref="IsInitialized"/> is true) and <see cref="SetRelativeLayout"/> has been
     ///         called.
     ///     </para>
     ///     <para>
@@ -258,7 +254,7 @@ public partial class View
     ///     </para>
     ///     <para>
     ///         If set to a relative value (e.g. <see cref="Dim.Fill(int)"/>) the value is indeterminate until the view has
-    ///         been initialized ( <see cref="IsInitialized"/> is true) and <see cref="SetRelativeLayout(Size)"/> has been
+    ///         been initialized ( <see cref="IsInitialized"/> is true) and <see cref="SetRelativeLayout"/> has been
     ///         called.
     ///     </para>
     ///     <para>
@@ -304,7 +300,7 @@ public partial class View
     ///     </para>
     ///     <para>
     ///         If set to a relative value (e.g. <see cref="Dim.Fill(int)"/>) the value is indeterminate until the view has
-    ///         been initialized ( <see cref="IsInitialized"/> is true) and <see cref="SetRelativeLayout(Size)"/> has been
+    ///         been initialized ( <see cref="IsInitialized"/> is true) and <see cref="SetRelativeLayout"/> has been
     ///         called.
     ///     </para>
     ///     <para>
@@ -397,10 +393,9 @@ public partial class View
     /// <summary>
     ///     Indicates whether the specified SuperView-relative coordinates are within the View's <see cref="Frame"/>.
     /// </summary>
-    /// <param name="x">SuperView-relative X coordinate.</param>
-    /// <param name="y">SuperView-relative Y coordinate.</param>
+    /// <param name="location">SuperView-relative coordinate</param>
     /// <returns><see langword="true"/> if the specified SuperView-relative coordinates are within the View.</returns>
-    public virtual bool Contains (int x, int y) { return Frame.Contains (x, y); }
+    public virtual bool Contains (in Point location) { return Frame.Contains (location); }
 
 #nullable enable
     /// <summary>Finds the first Subview of <paramref name="start"/> that is visible at the provided location.</summary>
@@ -410,29 +405,29 @@ public partial class View
     ///     </para>
     /// </remarks>
     /// <param name="start">The view to scope the search by.</param>
-    /// <param name="x"><paramref name="start"/>.SuperView-relative X coordinate.</param>
-    /// <param name="y"><paramref name="start"/>.SuperView-relative Y coordinate.</param>
+    /// <param name="location"><paramref name="start"/>.SuperView-relative coordinate.</param>
     /// <returns>
-    ///     The view that was found at the <paramref name="x"/> and <paramref name="y"/> coordinates.
+    ///     The view that was found at the <paramref name="location"/> coordinate.
     ///     <see langword="null"/> if no view was found.
     /// </returns>
 
     // CONCURRENCY: This method is not thread-safe. Undefined behavior and likely program crashes are exposed by unsynchronized access to InternalSubviews.
-    internal static View? FindDeepestView (View? start, int x, int y)
+    internal static View? FindDeepestView (View? start, in Point location)
     {
-        while (start is { Visible: true } && start.Contains (x, y))
+        Point currentLocation = location;
+        while (start is { Visible: true } && start.Contains (currentLocation))
         {
             Adornment? found = null;
 
-            if (start.Margin.Contains (x, y))
+            if (start.Margin.Contains (currentLocation))
             {
                 found = start.Margin;
             }
-            else if (start.Border.Contains (x, y))
+            else if (start.Border.Contains (currentLocation))
             {
                 found = start.Border;
             }
-            else if (start.Padding.Contains (x, y))
+            else if (start.Padding.Contains (currentLocation))
             {
                 found = start.Padding;
             }
@@ -445,19 +440,19 @@ public partial class View
                 viewportOffset = found.Parent.Frame.Location;
             }
 
-            int startOffsetX = x - (start.Frame.X + viewportOffset.X);
-            int startOffsetY = y - (start.Frame.Y + viewportOffset.Y);
+            int startOffsetX = currentLocation.X - (start.Frame.X + viewportOffset.X);
+            int startOffsetY = currentLocation.Y - (start.Frame.Y + viewportOffset.Y);
 
             View? subview = null;
 
             for (int i = start.InternalSubviews.Count - 1; i >= 0; i--)
             {
                 if (start.InternalSubviews [i].Visible
-                    && start.InternalSubviews [i].Contains (startOffsetX + start.Viewport.X, startOffsetY + start.Viewport.Y))
+                    && start.InternalSubviews [i].Contains (new (startOffsetX + start.Viewport.X, startOffsetY + start.Viewport.Y)))
                 {
                     subview = start.InternalSubviews [i];
-                    x = startOffsetX + start.Viewport.X;
-                    y = startOffsetY + start.Viewport.Y;
+                    currentLocation.X = startOffsetX + start.Viewport.X;
+                    currentLocation.Y = startOffsetY + start.Viewport.Y;
 
                     // start is the deepest subview under the mouse; stop searching the subviews
                     break;
@@ -528,7 +523,7 @@ public partial class View
             maxDimension -= superView.GetAdornmentsThickness ().Left + superView.GetAdornmentsThickness ().Right;
         }
 
-        if (viewToMove.Frame.Width <= maxDimension)
+        if (viewToMove!.Frame.Width <= maxDimension)
         {
             nx = Math.Max (targetX, 0);
             nx = nx + viewToMove.Frame.Width > maxDimension ? Math.Max (maxDimension - viewToMove.Frame.Width, 0) : nx;
@@ -560,9 +555,9 @@ public partial class View
                 t = t.SuperView;
             }
 
-            if (t is Toplevel toplevel)
+            if (t is Toplevel topLevel)
             {
-                menuVisible = toplevel.MenuBar?.Visible == true;
+                menuVisible = topLevel.MenuBar?.Visible == true;
             }
         }
 
@@ -736,7 +731,7 @@ public partial class View
     /// <remarks>
     ///     <para>
     ///         Determines the relative bounds of the <see cref="View"/> and its <see cref="Frame"/>s, and then calls
-    ///         <see cref="SetRelativeLayout(Size)"/> to update the view.
+    ///         <see cref="SetRelativeLayout"/> to update the view.
     ///     </para>
     /// </remarks>
     internal void OnResizeNeeded ()

+ 26 - 13
Terminal.Gui/View/ViewContent.cs

@@ -196,9 +196,7 @@ public partial class View
         contentRelativeToViewport.Offset (-Viewport.X, -Viewport.Y);
 
         // Translate to Screen-Relative (our SuperView's Viewport-relative coordinates)
-        Rectangle screen = ViewportToScreen (new (contentRelativeToViewport, Size.Empty));
-
-        return screen.Location;
+        return ViewportToScreen (contentRelativeToViewport);
     }
 
     /// <summary>Converts a Screen-relative coordinate to a Content-relative coordinate.</summary>
@@ -211,7 +209,7 @@ public partial class View
     public Point ScreenToContent (in Point location)
     {
         Point viewportOffset = GetViewportOffsetFromFrame ();
-        Point screen = ScreenToFrame (location.X, location.Y);
+        Point screen = ScreenToFrame (location);
         screen.Offset (Viewport.X - viewportOffset.X, Viewport.Y - viewportOffset.Y);
 
         return screen;
@@ -425,20 +423,35 @@ public partial class View
         ViewportChanged?.Invoke (this, e);
     }
 
+    /// <summary>
+    ///     Converts a <see cref="Viewport"/>-relative location and size to a screen-relative location and size.
+    /// </summary>
+    /// <remarks>
+    ///     Viewport-relative means relative to the top-left corner of the inner rectangle of the <see cref="Padding"/>.
+    /// </remarks>
+    /// <param name="viewport">Viewport-relative location and size.</param>
+    /// <returns>Screen-relative location and size.</returns>
+    public Rectangle ViewportToScreen (in Rectangle viewport)
+    {
+        return viewport with { Location = ViewportToScreen (viewport.Location) };
+    }
+
     /// <summary>
     ///     Converts a <see cref="Viewport"/>-relative location to a screen-relative location.
     /// </summary>
     /// <remarks>
     ///     Viewport-relative means relative to the top-left corner of the inner rectangle of the <see cref="Padding"/>.
     /// </remarks>
-    public Rectangle ViewportToScreen (in Rectangle location)
+    /// <param name="viewportLocation">Viewport-relative location.</param>
+    /// <returns>Screen-relative location.</returns>
+    public Point ViewportToScreen (in Point viewportLocation)
     {
         // Translate bounds to Frame (our SuperView's Viewport-relative coordinates)
         Rectangle screen = FrameToScreen ();
         Point viewportOffset = GetViewportOffsetFromFrame ();
-        screen.Offset (viewportOffset.X + location.X, viewportOffset.Y + location.Y);
+        screen.Offset (viewportOffset.X + viewportLocation.X, viewportOffset.Y + viewportLocation.Y);
 
-        return new (screen.Location, location.Size);
+        return screen.Location;
     }
 
     /// <summary>Converts a screen-relative coordinate to a Viewport-relative coordinate.</summary>
@@ -446,15 +459,15 @@ public partial class View
     /// <remarks>
     ///     Viewport-relative means relative to the top-left corner of the inner rectangle of the <see cref="Padding"/>.
     /// </remarks>
-    /// <param name="x">Column relative to the left side of the Viewport.</param>
-    /// <param name="y">Row relative to the top of the Viewport</param>
-    public Point ScreenToViewport (int x, int y)
+    /// <param name="location">Screen-Relative Coordinate.</param>
+    /// <returns>Viewport-relative location.</returns>
+    public Point ScreenToViewport (in Point location)
     {
         Point viewportOffset = GetViewportOffsetFromFrame ();
-        Point screen = ScreenToFrame (x, y);
-        screen.Offset (-viewportOffset.X, -viewportOffset.Y);
+        Point frame = ScreenToFrame (location);
+        frame.Offset (-viewportOffset.X, -viewportOffset.Y);
 
-        return screen;
+        return frame;
     }
 
     /// <summary>

+ 3 - 3
Terminal.Gui/View/ViewDrawing.cs

@@ -106,7 +106,7 @@ public partial class View
 
         if (ViewportSettings.HasFlag (ViewportSettings.ClearContentOnly))
         {
-            Rectangle visibleContent = ViewportToScreen (new (new (-Viewport.X, -Viewport.Y), ContentSize.GetValueOrDefault ()));
+            Rectangle visibleContent = ViewportToScreen (new Rectangle (new (-Viewport.X, -Viewport.Y), ContentSize.GetValueOrDefault ()));
             toClear = Rectangle.Intersect (toClear, visibleContent);
         }
 
@@ -172,7 +172,7 @@ public partial class View
         if (ViewportSettings.HasFlag (ViewportSettings.ClipContentOnly))
         {
             // Clamp the Clip to the just content area that is within the viewport
-            Rectangle visibleContent = ViewportToScreen (new (new (-Viewport.X, -Viewport.Y), ContentSize.GetValueOrDefault ()));
+            Rectangle visibleContent = ViewportToScreen (new Rectangle (new (-Viewport.X, -Viewport.Y), ContentSize.GetValueOrDefault ()));
             clip = Rectangle.Intersect (clip, visibleContent);
         }
 
@@ -396,7 +396,7 @@ public partial class View
             return false;
         }
 
-        Rectangle screen = ViewportToScreen (new (col, row, 0, 0));
+        var screen = ViewportToScreen (new Point (col, row));
         Driver?.Move (screen.X, screen.Y);
 
         return true;

+ 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 - 4
Terminal.Gui/View/ViewSubViews.cs

@@ -875,10 +875,7 @@ public partial class View
         if (IsInitialized && CanFocus && HasFocus && ContentSize.HasValue)
         {
             // By default, position the cursor at the hotkey (if any) or 0, 0.
-            Point location = Viewport.Location;
-            location.X = TextFormatter.HotKeyPos == -1 ? 0 : TextFormatter.CursorPosition;
-            location.Y = 0;
-            Move (location.X, location.Y);
+            Move (TextFormatter.HotKeyPos == -1 ? 0 : TextFormatter.CursorPosition, 0);
         }
 
         // Returning null will hide the cursor.

+ 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 ())
         {

+ 15 - 16
Terminal.Gui/Views/Menu/Menu.cs

@@ -726,13 +726,12 @@ internal sealed class Menu : View
 
         View view = a.View ?? this;
 
-        Point boundsPoint = view.ScreenToViewport (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
         };
 
@@ -792,7 +791,7 @@ internal sealed class Menu : View
 
             if (item is null && BorderStyle != LineStyle.None)
             {
-                var s = ViewportToScreen (new (-1, i, 0, 0));
+                var s = ViewportToScreen (new Point (-1, i));
                 Driver.Move (s.X, s.Y);
                 Driver.AddRune (Glyphs.LeftTee);
             }
@@ -840,7 +839,7 @@ internal sealed class Menu : View
             {
                 if (BorderStyle != LineStyle.None && SuperView?.Frame.Right - Frame.X > Frame.Width)
                 {
-                    var s = ViewportToScreen (new (Frame.Width - 2, i, 0, 0));
+                    var s = ViewportToScreen (new Point (Frame.Width - 2, i));
                     Driver.Move (s.X, s.Y);
                     Driver.AddRune (Glyphs.RightTee);
                 }
@@ -877,7 +876,7 @@ internal sealed class Menu : View
                 textToDraw = item.Title;
             }
 
-            Rectangle screen = ViewportToScreen (new (new (0 , i), Size.Empty));
+            var screen = ViewportToScreen (new Point(0  , i));
             if (screen.X < Driver.Cols)
             {
                 Driver.Move (screen.X + 1, screen.Y);
@@ -896,7 +895,7 @@ internal sealed class Menu : View
 
                     // The -3 is left/right border + one space (not sure what for)
                     tf.Draw (
-                             ViewportToScreen (new (1, i, Frame.Width - 3, 1)),
+                             ViewportToScreen (new Rectangle(1, i, Frame.Width - 3, 1)),
                              i == _currentChild ? GetFocusColor () : GetNormalColor (),
                              i == _currentChild ? ColorScheme.HotFocus : ColorScheme.HotNormal,
                              SuperView?.ViewportToScreen (SuperView.Viewport) ?? Rectangle.Empty
@@ -916,7 +915,7 @@ internal sealed class Menu : View
                             ? item.Help.GetColumns ()
                             : item.Help.GetColumns () + item.ShortcutTag.GetColumns () + 2;
                 int col = Frame.Width - l - 3;
-                screen = ViewportToScreen (new (new (col, i), Size.Empty));
+                screen = ViewportToScreen (new Point (col, i));
 
                 if (screen.X < Driver.Cols)
                 {
@@ -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 ())

+ 11 - 8
Terminal.Gui/Views/Menu/MenuBar.cs

@@ -1336,7 +1336,7 @@ public class MenuBar : View
 
         if (mi.IsTopLevel)
         {
-            Rectangle screen = ViewportToScreen (new (new (0, i), Size.Empty));
+            var screen = ViewportToScreen (new Point (0 , i));
             var menu = new Menu { Host = this, X = screen.X, Y = screen.Y, BarItems = mi };
             menu.Run (mi.Action);
             menu.Dispose ();
@@ -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++)
             {
@@ -1699,7 +1699,7 @@ public class MenuBar : View
                     {
                         if (Menus [i].IsTopLevel)
                         {
-                            Rectangle screen = ViewportToScreen (new (new (0, i), Size.Empty));
+                            var screen = ViewportToScreen (new Point(0 , i));
                             var menu = new Menu { Host = this, X = screen.X, Y = screen.Y, BarItems = Menus [i] };
                             menu.Run (Menus [i].Action);
                             menu.Dispose ();
@@ -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 (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>
+    /// <returns>The position.</returns>
+    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)
             {

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

@@ -219,7 +219,7 @@ public class TileView : View
                 bool isRoot = _splitterLines.Contains (line);
 
                 Rectangle screen = line.ViewportToScreen (Rectangle.Empty);
-                Point origin = ScreenToFrame (screen.X, screen.Y);
+                Point origin = ScreenToFrame (screen.Location);
                 int length = line.Orientation == Orientation.Horizontal ? line.Frame.Width : line.Frame.Height;
 
                 if (!isRoot)
@@ -841,7 +841,7 @@ public class TileView : View
         public Point GetLocalCoordinateForTitle (TileView intoCoordinateSpace)
         {
             Rectangle screen = Tile.ContentView.ViewportToScreen (Rectangle.Empty);
-            return intoCoordinateSpace.ScreenToFrame (screen.X, screen.Y - 1);
+            return intoCoordinateSpace.ScreenToFrame (new (screen.X, screen.Y - 1));
         }
 
         internal string GetTrimmedTitle ()
@@ -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 ();
                           };
 

+ 2 - 2
UICatalog/Scenarios/Notepad.cs

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

+ 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
                             );

+ 1 - 1
UICatalog/UICatalog.csproj

@@ -30,7 +30,7 @@
   <ItemGroup>
     <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.20.1" />
     <PackageReference Include="SixLabors.ImageSharp" Version="3.1.4" />
-    <PackageReference Include="CsvHelper" Version="31.0.3" />
+    <PackageReference Include="CsvHelper" Version="32.0.2" />
     <PackageReference Include="Microsoft.DotNet.PlatformAbstractions" Version="3.1.6" />
     <PackageReference Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
   </ItemGroup>

+ 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);
     }

+ 3 - 3
UnitTests/Drawing/ThicknessTests.cs

@@ -663,7 +663,7 @@ public class ThicknessTests
     {
         var rect = new Rectangle (x, y, width, height);
         var thickness = new Thickness (1, 1, 1, 1); // Uniform thickness for simplicity
-        bool result = thickness.Contains (rect, pointX, pointY);
+        bool result = thickness.Contains (rect, new (pointX, pointY));
         Assert.Equal (expected, result);
     }
 
@@ -702,7 +702,7 @@ public class ThicknessTests
     {
         var rect = new Rectangle (x, y, width, height);
         var thickness = new Thickness (2, 2, 2, 2); // Uniform thickness for simplicity
-        bool result = thickness.Contains (rect, pointX, pointY);
+        bool result = thickness.Contains (rect, new (pointX, pointY));
         Assert.Equal (expected, result);
     }
 
@@ -737,7 +737,7 @@ public class ThicknessTests
     {
         var rect = new Rectangle (x, y, width, height);
         var thickness = new Thickness (0, 0, 0, 0); // Uniform thickness for simplicity
-        bool result = thickness.Contains (rect, pointX, pointY);
+        bool result = thickness.Contains (rect, new (pointX, pointY));
         Assert.Equal (expected, result);
     }
 

+ 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 ();

+ 3 - 3
UnitTests/UnitTests.csproj

@@ -30,11 +30,11 @@
   </PropertyGroup>
   <ItemGroup>
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
-    <PackageReference Include="ReportGenerator" Version="5.2.4" />
+    <PackageReference Include="ReportGenerator" Version="5.2.5" />
     <PackageReference Include="TestableIO.System.IO.Abstractions.TestingHelpers" Version="21.0.2" />
-    <PackageReference Include="xunit" Version="2.7.1" />
+    <PackageReference Include="xunit" Version="2.8.0" />
     <PackageReference Include="Xunit.Combinatorial" Version="1.6.24" />
-    <PackageReference Include="xunit.runner.visualstudio" Version="2.5.8">
+    <PackageReference Include="xunit.runner.visualstudio" Version="2.8.0">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>

+ 2 - 2
UnitTests/View/Adornment/AdornmentSubViewTests.cs

@@ -31,7 +31,7 @@ public class AdornmentSubViewTests (ITestOutputHelper output)
         subView.Margin.Thickness = new Thickness (subViewMargin);
         view.Margin.Add (subView);
 
-        var foundView = View.FindDeepestView (view, 0, 0);
+        var foundView = View.FindDeepestView (view, new (0, 0));
 
         bool found = foundView == subView || foundView == subView.Margin;
         Assert.Equal (expectedFound, found);
@@ -58,7 +58,7 @@ public class AdornmentSubViewTests (ITestOutputHelper output)
         };
         view.Padding.Add (subView);
 
-        Assert.Equal (view.Padding, View.FindDeepestView (view, 0, 0));
+        Assert.Equal (view.Padding, View.FindDeepestView (view, new (0, 0)));
     }
 
     [Fact]

+ 18 - 18
UnitTests/View/Adornment/ToScreenTests.cs

@@ -251,9 +251,9 @@ public class AdornmentToScreenTests (ITestOutputHelper output)
         view.Frame = frame;
 
         // Act
-        var marginScreen = view.Margin.ViewportToScreen (new (testX, 0, 0, 0));
-        var borderScreen = view.Border.ViewportToScreen (new (testX, 0, 0, 0));
-        var paddingScreen = view.Padding.ViewportToScreen (new (testX, 0, 0, 0));
+        var marginScreen = view.Margin.ViewportToScreen (new Point (testX, 0));
+        var borderScreen = view.Border.ViewportToScreen (new Point (testX, 0));
+        var paddingScreen = view.Padding.ViewportToScreen (new Point (testX, 0));
 
         // Assert
         Assert.Equal (expectedX, marginScreen.X);
@@ -292,9 +292,9 @@ public class AdornmentToScreenTests (ITestOutputHelper output)
         Assert.Equal(4, view.Viewport.Width);
 
         // Act
-        var marginScreen = view.Margin.ViewportToScreen (new (testX, 0, 0, 0));
-        var borderScreen = view.Border.ViewportToScreen (new (testX, 0, 0, 0));
-        var paddingScreen = view.Padding.ViewportToScreen (new (testX, 0, 0, 0));
+        var marginScreen = view.Margin.ViewportToScreen (new Point (testX, 0));
+        var borderScreen = view.Border.ViewportToScreen (new Point (testX, 0));
+        var paddingScreen = view.Padding.ViewportToScreen (new Point (testX, 0));
 
         // Assert
         Assert.Equal (expectedX, marginScreen.X);
@@ -338,9 +338,9 @@ public class AdornmentToScreenTests (ITestOutputHelper output)
         superView.LayoutSubviews ();
 
         // Act
-        var marginScreen = view.Margin.ViewportToScreen (new (testX, 0, 0, 0));
-        var borderScreen = view.Border.ViewportToScreen (new (testX, 0, 0, 0));
-        var paddingScreen = view.Padding.ViewportToScreen (new (testX, 0, 0, 0));
+        var marginScreen = view.Margin.ViewportToScreen (new Point (testX, 0));
+        var borderScreen = view.Border.ViewportToScreen (new Point (testX, 0));
+        var paddingScreen = view.Padding.ViewportToScreen (new Point (testX, 0));
 
         // Assert
         Assert.Equal (expectedX, marginScreen.X);
@@ -385,9 +385,9 @@ public class AdornmentToScreenTests (ITestOutputHelper output)
         superView.LayoutSubviews ();
 
         // Act
-        var marginScreen = view.Margin.ViewportToScreen (new (testX, 0, 0, 0));
-        var borderScreen = view.Border.ViewportToScreen (new (testX, 0, 0, 0));
-        var paddingScreen = view.Padding.ViewportToScreen (new (testX, 0, 0, 0));
+        var marginScreen = view.Margin.ViewportToScreen (new Point (testX, 0));
+        var borderScreen = view.Border.ViewportToScreen (new Point (testX, 0));
+        var paddingScreen = view.Padding.ViewportToScreen (new Point (testX, 0));
 
         // Assert
         Assert.Equal (expectedX, marginScreen.X);
@@ -441,9 +441,9 @@ public class AdornmentToScreenTests (ITestOutputHelper output)
         superView.LayoutSubviews ();
 
         // Act
-        var marginScreen = view.Margin.ViewportToScreen (new (testX, 0, 0, 0));
-        var borderScreen = view.Border.ViewportToScreen (new (testX, 0, 0, 0));
-        var paddingScreen = view.Padding.ViewportToScreen (new (testX, 0, 0, 0));
+        var marginScreen = view.Margin.ViewportToScreen (new Point (testX, 0));
+        var borderScreen = view.Border.ViewportToScreen (new Point (testX, 0));
+        var paddingScreen = view.Padding.ViewportToScreen (new Point (testX, 0));
 
         // Assert
         Assert.Equal (expectedX, marginScreen.X);
@@ -502,9 +502,9 @@ public class AdornmentToScreenTests (ITestOutputHelper output)
         superView.LayoutSubviews ();
 
         // Act
-        var marginScreen = view.Margin.ViewportToScreen (new (testX, 0, 0, 0));
-        var borderScreen = view.Border.ViewportToScreen (new (testX, 0, 0, 0));
-        var paddingScreen = view.Padding.ViewportToScreen (new (testX, 0, 0, 0));
+        var marginScreen = view.Margin.ViewportToScreen (new Point (testX, 0));
+        var borderScreen = view.Border.ViewportToScreen (new Point (testX, 0));
+        var paddingScreen = view.Padding.ViewportToScreen (new Point (testX, 0));
 
         // Assert
         Assert.Equal (expectedX, marginScreen.X);

+ 18 - 18
UnitTests/View/FindDeepestViewTests.cs

@@ -80,22 +80,22 @@ public class FindDeepestViewTests ()
         view.Padding.Thickness = new Thickness (paddingThickness);
 
         Type? containedType = null;
-        if (view.Contains (testX, testY))
+        if (view.Contains (new (testX, testY)))
         {
             containedType = view.GetType ();
         }
 
-        if (view.Margin.Contains (testX, testY))
+        if (view.Margin.Contains (new (testX, testY)))
         {
             containedType = view.Margin.GetType ();
         }
 
-        if (view.Border.Contains (testX, testY))
+        if (view.Border.Contains (new (testX, testY)))
         {
             containedType = view.Border.GetType ();
         }
 
-        if (view.Padding.Contains (testX, testY))
+        if (view.Padding.Contains (new (testX, testY)))
         {
             containedType = view.Padding.GetType ();
         }
@@ -115,7 +115,7 @@ public class FindDeepestViewTests ()
             Width = 10, Height = 10,
         };
 
-        Assert.Same (start, View.FindDeepestView (start, testX, testY));
+        Assert.Same (start, View.FindDeepestView (start, new (testX, testY)));
     }
 
     // Test that FindDeepestView returns null if the start view has no subviews and coords are outside the view
@@ -131,7 +131,7 @@ public class FindDeepestViewTests ()
             Width = 10, Height = 10,
         };
 
-        Assert.Null (View.FindDeepestView (start, testX, testY));
+        Assert.Null (View.FindDeepestView (start, new (testX, testY)));
     }
 
     [Theory]
@@ -147,7 +147,7 @@ public class FindDeepestViewTests ()
             Visible = false,
         };
 
-        Assert.Null (View.FindDeepestView (start, testX, testY));
+        Assert.Null (View.FindDeepestView (start, new (testX, testY)));
     }
 
     // Test that FindDeepestView returns the correct view if the start view has subviews
@@ -174,7 +174,7 @@ public class FindDeepestViewTests ()
         };
         start.Add (subview);
 
-        var found = View.FindDeepestView (start, testX, testY);
+        var found = View.FindDeepestView (start, new (testX, testY));
 
         Assert.Equal (expectedSubViewFound, found == subview);
     }
@@ -202,7 +202,7 @@ public class FindDeepestViewTests ()
         };
         start.Add (subview);
 
-        var found = View.FindDeepestView (start, testX, testY);
+        var found = View.FindDeepestView (start, new (testX, testY));
 
         Assert.Equal (expectedSubViewFound, found == subview);
     }
@@ -233,7 +233,7 @@ public class FindDeepestViewTests ()
         subview.Visible = true;
         Assert.True (subview.Visible);
         Assert.False (start.Visible);
-        var found = View.FindDeepestView (start, testX, testY);
+        var found = View.FindDeepestView (start, new (testX, testY));
 
         Assert.Equal (expectedSubViewFound, found == subview);
     }
@@ -265,7 +265,7 @@ public class FindDeepestViewTests ()
         };
         start.Add (subview);
 
-        var found = View.FindDeepestView (start, testX, testY);
+        var found = View.FindDeepestView (start, new (testX, testY));
 
         Assert.Equal (expectedSubViewFound, found == subview);
     }
@@ -296,7 +296,7 @@ public class FindDeepestViewTests ()
         };
         start.Add (subview);
 
-        var found = View.FindDeepestView (start, testX, testY);
+        var found = View.FindDeepestView (start, new (testX, testY));
 
         Assert.Equal (expectedSubViewFound, found == subview);
     }
@@ -328,7 +328,7 @@ public class FindDeepestViewTests ()
         start.BeginInit();
         start.EndInit();
 
-        var found = View.FindDeepestView (start, testX, testY);
+        var found = View.FindDeepestView (start, new (testX, testY));
 
         Assert.Equal (expectedSubViewFound, found == subview);
     }
@@ -362,7 +362,7 @@ public class FindDeepestViewTests ()
         };
         start.Add (subview);
 
-        var found = View.FindDeepestView (start, testX, testY);
+        var found = View.FindDeepestView (start, new (testX, testY));
         Assert.Equal (expectedAdornmentType, found!.GetType ());
     }
 
@@ -393,7 +393,7 @@ public class FindDeepestViewTests ()
         subview.Margin.Thickness = new Thickness (1);
         start.Add (subview);
 
-        var found = View.FindDeepestView (start, testX, testY);
+        var found = View.FindDeepestView (start, new (testX, testY));
 
         Assert.Equal (expectedSubViewFound, found == subview);
     }
@@ -438,7 +438,7 @@ public class FindDeepestViewTests ()
         start.BeginInit();
         start.EndInit();
 
-        var found = View.FindDeepestView (start, testX, testY);
+        var found = View.FindDeepestView (start, new (testX, testY));
 
         Assert.Equal (expectedSubViewFound, found == paddingSubview);
     }
@@ -487,7 +487,7 @@ public class FindDeepestViewTests ()
         start.BeginInit ();
         start.EndInit ();
 
-        var found = View.FindDeepestView (start, testX, testY);
+        var found = View.FindDeepestView (start, new (testX, testY));
 
         Assert.Equal (expectedSubViewFound, found == paddingSubview);
     }
@@ -529,7 +529,7 @@ public class FindDeepestViewTests ()
 
         start.Add (subviews [0]);
 
-        var found = View.FindDeepestView (start, testX, testY);
+        var found = View.FindDeepestView (start, new (testX, testY));
         Assert.Equal (expectedSubViewFound, subviews.IndexOf (found!));
     }
 }

+ 42 - 42
UnitTests/View/Layout/Pos.Tests.cs

@@ -254,82 +254,82 @@ public class PosTests (ITestOutputHelper output)
     [TestRespondersDisposed]
     public void LeftTopBottomRight_Win_ShouldNotThrow ()
     {
-        // Setup Fake driver
-        (Toplevel top, Window win, Button button) setup ()
-        {
-            Application.Init (new FakeDriver ());
-            Application.Iteration += (s, a) => { Application.RequestStop (); };
-            var win = new Window { X = 0, Y = 0, Width = Dim.Fill (), Height = Dim.Fill () };
-            var top = new Toplevel ();
-            top.Add (win);
-
-            var button = new Button { X = Pos.Center (), Text = "button" };
-            win.Add (button);
-
-            return (top, win, button);
-        }
-
-        RunState rs;
-
-        void cleanup (RunState rs)
-        {
-            // Cleanup
-            Application.End (rs);
-
-            Application.Top.Dispose ();
-
-            // Shutdown must be called to safely clean up Application if Init has been called
-            Application.Shutdown ();
-        }
-
         // Test cases:
-        (Toplevel top, Window win, Button button) app = setup ();
+        (Toplevel top, Window win, Button button) app = Setup ();
         app.button.Y = Pos.Left (app.win);
-        rs = Application.Begin (app.top);
+        RunState rs = Application.Begin (app.top);
 
         // If Application.RunState is used then we must use Application.RunLoop with the rs parameter
         Application.RunLoop (rs);
-        cleanup (rs);
+        Cleanup (rs);
 
-        app = setup ();
+        app = Setup ();
         app.button.Y = Pos.X (app.win);
         rs = Application.Begin (app.top);
 
         // If Application.RunState is used then we must use Application.RunLoop with the rs parameter
         Application.RunLoop (rs);
-        cleanup (rs);
+        Cleanup (rs);
 
-        app = setup ();
+        app = Setup ();
         app.button.Y = Pos.Top (app.win);
         rs = Application.Begin (app.top);
 
         // If Application.RunState is used then we must use Application.RunLoop with the rs parameter
         Application.RunLoop (rs);
-        cleanup (rs);
+        Cleanup (rs);
 
-        app = setup ();
+        app = Setup ();
         app.button.Y = Pos.Y (app.win);
         rs = Application.Begin (app.top);
 
         // If Application.RunState is used then we must use Application.RunLoop with the rs parameter
         Application.RunLoop (rs);
-        cleanup (rs);
+        Cleanup (rs);
 
-        app = setup ();
+        app = Setup ();
         app.button.Y = Pos.Bottom (app.win);
         rs = Application.Begin (app.top);
 
         // If Application.RunState is used then we must use Application.RunLoop with the rs parameter
         Application.RunLoop (rs);
-        cleanup (rs);
+        Cleanup (rs);
 
-        app = setup ();
+        app = Setup ();
         app.button.Y = Pos.Right (app.win);
         rs = Application.Begin (app.top);
 
         // If Application.RunState is used then we must use Application.RunLoop with the rs parameter
         Application.RunLoop (rs);
-        cleanup (rs);
+        Cleanup (rs);
+
+        return;
+
+        void Cleanup (RunState rs)
+        {
+            // Cleanup
+            Application.End (rs);
+
+            Application.Top.Dispose ();
+
+            // Shutdown must be called to safely clean up Application if Init has been called
+            Application.Shutdown ();
+        }
+
+        // Setup Fake driver
+        (Toplevel top, Window win, Button button) Setup ()
+        {
+            Application.Init (new FakeDriver ());
+            Application.Iteration += (s, a) => { Application.RequestStop (); };
+            var win = new Window { X = 0, Y = 0, Width = Dim.Fill (), Height = Dim.Fill () };
+            var top = new Toplevel ();
+            top.Add (win);
+
+            var button = new Button { X = Pos.Center (), Text = "button" };
+            win.Add (button);
+
+            return (top, win, button);
+        }
     }
 
     [Fact]
@@ -906,7 +906,7 @@ public class PosTests (ITestOutputHelper output)
         Assert.Equal (new Rectangle (0, 2, 10, 3), win2.Frame);
         Assert.Equal (new Rectangle (0, 0, 8, 1), view2.Frame);
         Assert.Equal (new Rectangle (0, 0, 7, 1), view3.Frame);
-        var foundView = View.FindDeepestView (top, 9, 4);
+        var foundView = View.FindDeepestView (top, new (9, 4));
         Assert.Equal (foundView, view2);
     }
 

+ 10 - 10
UnitTests/View/Layout/ScreenToTests.cs

@@ -32,7 +32,7 @@ public class ScreenToTests
             BorderStyle = LineStyle.Single
         };
 
-        Point actual = view.ScreenToViewport (x, y);
+        Point actual = view.ScreenToViewport (new (x, y));
         Assert.Equal (expectedX, actual.X);
         Assert.Equal (expectedY, actual.Y);
     }
@@ -54,7 +54,7 @@ public class ScreenToTests
     {
         var view = new View { X = viewX, Y = viewY, Width = 10, Height = 10 };
 
-        Point actual = view.ScreenToViewport (x, y);
+        Point actual = view.ScreenToViewport (new (x, y));
         Assert.Equal (expectedX, actual.X);
         Assert.Equal (expectedY, actual.Y);
     }
@@ -82,7 +82,7 @@ public class ScreenToTests
         var view = new View { X = viewX, Y = viewY, Width = 5, Height = 5 };
         super.Add (view);
 
-        Point actual = view.ScreenToViewport (x, y);
+        Point actual = view.ScreenToViewport (new (x, y));
         Assert.Equal (expectedX, actual.X);
         Assert.Equal (expectedY, actual.Y);
     }
@@ -113,7 +113,7 @@ public class ScreenToTests
 
         view.Viewport = new (1, 1, 5, 5);
 
-        Point actual = view.ScreenToViewport (x, y);
+        Point actual = view.ScreenToViewport (new (x, y));
         Assert.Equal (expectedX, actual.X);
         Assert.Equal (expectedY, actual.Y);
     }
@@ -134,7 +134,7 @@ public class ScreenToTests
         var view = new View { X = viewX, Y = viewY, Width = 5, Height = 5 };
         super.Add (view);
 
-        Point actual = view.ScreenToViewport (x, y);
+        Point actual = view.ScreenToViewport (new (x, y));
         Assert.Equal (expectedX, actual.X);
         Assert.Equal (expectedY, actual.Y);
     }
@@ -169,7 +169,7 @@ public class ScreenToTests
 
         view.Viewport = view.Viewport with { Location = new (1, 1) };
 
-        Point actual = view.ScreenToViewport (x, y);
+        Point actual = view.ScreenToViewport (new (x, y));
         Assert.Equal (expectedX, actual.X);
         Assert.Equal (expectedY, actual.Y);
     }
@@ -198,7 +198,7 @@ public class ScreenToTests
             BorderStyle = LineStyle.Single
         };
 
-        Point actual = view.ScreenToFrame (x, y);
+        Point actual = view.ScreenToFrame (new (x, y));
         Assert.Equal (expectedX, actual.X);
         Assert.Equal (expectedY, actual.Y);
     }
@@ -220,7 +220,7 @@ public class ScreenToTests
     {
         var view = new View { X = viewX, Y = viewY, Width = 10, Height = 10 };
 
-        Point actual = view.ScreenToFrame (x, y);
+        Point actual = view.ScreenToFrame (new (x, y));
         Assert.Equal (expectedX, actual.X);
         Assert.Equal (expectedY, actual.Y);
     }
@@ -248,7 +248,7 @@ public class ScreenToTests
         var view = new View { X = viewX, Y = viewY, Width = 5, Height = 5 };
         super.Add (view);
 
-        Point actual = view.ScreenToFrame (x, y);
+        Point actual = view.ScreenToFrame (new (x, y));
         Assert.Equal (expectedX, actual.X);
         Assert.Equal (expectedY, actual.Y);
     }
@@ -269,7 +269,7 @@ public class ScreenToTests
         var view = new View { X = viewX, Y = viewY, Width = 5, Height = 5 };
         super.Add (view);
 
-        Point actual = view.ScreenToFrame (x, y);
+        Point actual = view.ScreenToFrame (new (x, y));
         Assert.Equal (expectedX, actual.X);
         Assert.Equal (expectedY, actual.Y);
     }

+ 7 - 7
UnitTests/View/Layout/ToScreenTests.cs

@@ -655,7 +655,7 @@ public class ToScreenTests (ITestOutputHelper output)
         view.Frame = frame;
 
         // Act
-        var screen = view.ViewportToScreen (new (viewportX, 0, 0, 0));
+        var screen = view.ViewportToScreen (new Point (viewportX, 0));
 
         // Assert
         Assert.Equal (expectedX, screen.X);
@@ -687,7 +687,7 @@ public class ToScreenTests (ITestOutputHelper output)
         view.Frame = frame;
 
         // Act
-        var screen = view.ViewportToScreen (new (viewportX, 0, 0, 0));
+        var screen = view.ViewportToScreen (new Point (viewportX, 0));
 
         // Assert
         Assert.Equal (expectedX, screen.X);
@@ -729,7 +729,7 @@ public class ToScreenTests (ITestOutputHelper output)
         superView.LayoutSubviews ();
 
         // Act
-        var screen = view.ViewportToScreen (new (viewportX, 0, 0, 0));
+        var screen = view.ViewportToScreen (new Point (viewportX, 0));
 
         // Assert
         Assert.Equal (expectedX, screen.X);
@@ -772,7 +772,7 @@ public class ToScreenTests (ITestOutputHelper output)
         superView.LayoutSubviews ();
 
         // Act
-        var screen = view.ViewportToScreen (new (viewportX, 0, 0, 0));
+        var screen = view.ViewportToScreen (new Point (viewportX, 0));
 
         // Assert
         Assert.Equal (expectedX, screen.X);
@@ -824,7 +824,7 @@ public class ToScreenTests (ITestOutputHelper output)
         superView.LayoutSubviews ();
 
         // Act
-        var screen = view.ViewportToScreen (new (viewportX, 0, 0, 0));
+        var screen = view.ViewportToScreen (new Point (viewportX, 0));
 
         // Assert
         Assert.Equal (expectedX, screen.X);
@@ -878,7 +878,7 @@ public class ToScreenTests (ITestOutputHelper output)
         superView.LayoutSubviews ();
 
         // Act
-        var screen = view.ViewportToScreen (new (viewportX, 0, 0, 0));
+        var screen = view.ViewportToScreen (new Point (viewportX, 0));
 
         // Assert
         Assert.Equal (expectedX, screen.X);
@@ -935,7 +935,7 @@ public class ToScreenTests (ITestOutputHelper output)
         superView.LayoutSubviews ();
 
         // Act
-        var screen = view.ViewportToScreen (new (testX, 0, 0, 0));
+        var screen = view.ViewportToScreen (new Point (testX, 0));
 
         // Assert
         Assert.Equal (expectedX, screen.X);

+ 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);

+ 72 - 72
UnitTests/View/NavigationTests.cs

@@ -851,102 +851,102 @@ public class NavigationTests
                                                          );
 
         // top
-        Assert.Equal (Point.Empty, top.ScreenToFrame (0, 0));
-        Rectangle screen = top.Margin.ViewportToScreen (new (0, 0, 0, 0));
+        Assert.Equal (Point.Empty, top.ScreenToFrame (new (0, 0)));
+        var screen = top.Margin.ViewportToScreen (new Point (0, 0));
         Assert.Equal (0, screen.X);
         Assert.Equal (0, screen.Y);
-        screen = top.Border.ViewportToScreen (new (0, 0, 0, 0));
+        screen = top.Border.ViewportToScreen (new Point (0, 0));
         Assert.Equal (0, screen.X);
         Assert.Equal (0, screen.Y);
-        screen = top.Padding.ViewportToScreen (new (0, 0, 0, 0));
+        screen = top.Padding.ViewportToScreen (new Point (0, 0));
         Assert.Equal (1, screen.X);
         Assert.Equal (1, screen.Y);
-        screen = top.ViewportToScreen (new (0, 0, 0, 0));
+        screen = top.ViewportToScreen (new Point (0, 0));
         Assert.Equal (1, screen.X);
         Assert.Equal (1, screen.Y);
-        screen = top.ViewportToScreen (new (-1, -1, 0, 0));
+        screen = top.ViewportToScreen (new Point (-1, -1));
         Assert.Equal (0, screen.X);
         Assert.Equal (0, screen.Y);
-        var found = View.FindDeepestView (top, 0, 0);
+        var found = View.FindDeepestView (top, new (0, 0));
         Assert.Equal (top.Border, found);
 
         Assert.Equal (0, found.Frame.X);
         Assert.Equal (0, found.Frame.Y);
-        Assert.Equal (new Point (3, 2), top.ScreenToFrame (3, 2));
-        screen = top.ViewportToScreen (new (3, 2, 0, 0));
+        Assert.Equal (new Point (3, 2), top.ScreenToFrame (new (3, 2)));
+        screen = top.ViewportToScreen (new Point (3, 2));
         Assert.Equal (4, screen.X);
         Assert.Equal (3, screen.Y);
-        found = View.FindDeepestView (top, screen.X, screen.Y);
+        found = View.FindDeepestView (top, new (screen.X, screen.Y));
         Assert.Equal (view, found);
         //Assert.Equal (0, found.FrameToScreen ().X);
         //Assert.Equal (0, found.FrameToScreen ().Y);
-        found = View.FindDeepestView (top, 3, 2);
+        found = View.FindDeepestView (top, new (3, 2));
         Assert.Equal (top, found);
         //Assert.Equal (3, found.FrameToScreen ().X);
         //Assert.Equal (2, found.FrameToScreen ().Y);
-        Assert.Equal (new Point (13, 2), top.ScreenToFrame (13, 2));
-        screen = top.ViewportToScreen (new (12, 2, 0, 0));
+        Assert.Equal (new Point (13, 2), top.ScreenToFrame (new (13, 2)));
+        screen = top.ViewportToScreen (new Point (12, 2));
         Assert.Equal (13, screen.X);
         Assert.Equal (3, screen.Y);
-        found = View.FindDeepestView (top, screen.X, screen.Y);
+        found = View.FindDeepestView (top, new (screen.X, screen.Y));
         Assert.Equal (view, found);
         //Assert.Equal (9, found.FrameToScreen ().X);
         //Assert.Equal (0, found.FrameToScreen ().Y);
-        screen = top.ViewportToScreen (new (13, 2, 0, 0));
+        screen = top.ViewportToScreen (new Point (13, 2));
         Assert.Equal (14, screen.X);
         Assert.Equal (3, screen.Y);
-        found = View.FindDeepestView (top, 13, 2);
+        found = View.FindDeepestView (top, new (13, 2));
         Assert.Equal (top, found);
         //Assert.Equal (13, found.FrameToScreen ().X);
         //Assert.Equal (2, found.FrameToScreen ().Y);
-        Assert.Equal (new Point (14, 3), top.ScreenToFrame (14, 3));
-        screen = top.ViewportToScreen (new (14, 3, 0, 0));
+        Assert.Equal (new Point (14, 3), top.ScreenToFrame (new (14, 3)));
+        screen = top.ViewportToScreen (new Point (14, 3));
         Assert.Equal (15, screen.X);
         Assert.Equal (4, screen.Y);
-        found = View.FindDeepestView (top, 14, 3);
+        found = View.FindDeepestView (top, new (14, 3));
         Assert.Equal (top, found);
         //Assert.Equal (14, found.FrameToScreen ().X);
         //Assert.Equal (3, found.FrameToScreen ().Y);
 
         // view
-        Assert.Equal (new Point (-4, -3), view.ScreenToFrame (0, 0));
-        screen = view.Margin.ViewportToScreen (new (-3, -2, 0, 0));
+        Assert.Equal (new Point (-4, -3), view.ScreenToFrame (new (0, 0)));
+        screen = view.Margin.ViewportToScreen (new Point (-3, -2));
         Assert.Equal (1, screen.X);
         Assert.Equal (1, screen.Y);
-        screen = view.Border.ViewportToScreen (new (-3, -2, 0, 0));
+        screen = view.Border.ViewportToScreen (new Point (-3, -2));
         Assert.Equal (1, screen.X);
         Assert.Equal (1, screen.Y);
-        screen = view.Padding.ViewportToScreen (new (-3, -2, 0, 0));
+        screen = view.Padding.ViewportToScreen (new Point (-3, -2));
         Assert.Equal (1, screen.X);
         Assert.Equal (1, screen.Y);
-        screen = view.ViewportToScreen (new (-3, -2, 0, 0));
+        screen = view.ViewportToScreen (new Point (-3, -2));
         Assert.Equal (1, screen.X);
         Assert.Equal (1, screen.Y);
-        screen = view.ViewportToScreen (new (-4, -3, 0, 0));
+        screen = view.ViewportToScreen (new Point (-4, -3));
         Assert.Equal (0, screen.X);
         Assert.Equal (0, screen.Y);
-        found = View.FindDeepestView (top, 0, 0);
+        found = View.FindDeepestView (top, new (0, 0));
         Assert.Equal (top.Border, found);
 
-        Assert.Equal (new Point (-1, -1), view.ScreenToFrame (3, 2));
-        screen = view.ViewportToScreen (new (0, 0, 0, 0));
+        Assert.Equal (new Point (-1, -1), view.ScreenToFrame (new (3, 2)));
+        screen = view.ViewportToScreen (new Point (0, 0));
         Assert.Equal (4, screen.X);
         Assert.Equal (3, screen.Y);
-        found = View.FindDeepestView (top, 4, 3);
+        found = View.FindDeepestView (top, new (4, 3));
         Assert.Equal (view, found);
 
-        Assert.Equal (new Point (9, -1), view.ScreenToFrame (13, 2));
-        screen = view.ViewportToScreen (new (10, 0, 0, 0));
+        Assert.Equal (new Point (9, -1), view.ScreenToFrame (new (13, 2)));
+        screen = view.ViewportToScreen (new Point (10, 0));
         Assert.Equal (14, screen.X);
         Assert.Equal (3, screen.Y);
-        found = View.FindDeepestView (top, 14, 3);
+        found = View.FindDeepestView (top, new (14, 3));
         Assert.Equal (top, found);
 
-        Assert.Equal (new Point (10, 0), view.ScreenToFrame (14, 3));
-        screen = view.ViewportToScreen (new (11, 1, 0, 0));
+        Assert.Equal (new Point (10, 0), view.ScreenToFrame (new (14, 3)));
+        screen = view.ViewportToScreen (new Point (11, 1));
         Assert.Equal (15, screen.X);
         Assert.Equal (4, screen.Y);
-        found = View.FindDeepestView (top, 15, 4);
+        found = View.FindDeepestView (top, new (15, 4));
         Assert.Equal (top, found);
     }
 
@@ -1005,84 +1005,84 @@ public class NavigationTests
         Assert.Equal (new Rectangle (3, 2, 23, 10), frame);
 
         // top
-        Assert.Equal (new Point (-3, -2), top.ScreenToFrame (0, 0));
-        Rectangle screen = top.Margin.ViewportToScreen (new (-3, -2, 0, 0));
+        Assert.Equal (new Point (-3, -2), top.ScreenToFrame (new (0, 0)));
+        var  screen = top.Margin.ViewportToScreen (new Point (-3, -2));
         Assert.Equal (0, screen.X);
         Assert.Equal (0, screen.Y);
-        screen = top.Border.ViewportToScreen (new (-3, -2, 0, 0));
+        screen = top.Border.ViewportToScreen (new Point (-3, -2));
         Assert.Equal (0, screen.X);
         Assert.Equal (0, screen.Y);
-        screen = top.Padding.ViewportToScreen (new (-3, -2, 0, 0));
+        screen = top.Padding.ViewportToScreen (new Point (-3, -2));
         Assert.Equal (1, screen.X);
         Assert.Equal (1, screen.Y);
-        screen = top.ViewportToScreen (new (-3, -2, 0, 0));
+        screen = top.ViewportToScreen (new Point (-3, -2));
         Assert.Equal (1, screen.X);
         Assert.Equal (1, screen.Y);
-        screen = top.ViewportToScreen (new (-4, -3, 0, 0));
+        screen = top.ViewportToScreen (new Point (-4, -3));
         Assert.Equal (0, screen.X);
         Assert.Equal (0, screen.Y);
-        var found = View.FindDeepestView (top, -4, -3);
+        var found = View.FindDeepestView (top, new (-4, -3));
         Assert.Null (found);
-        Assert.Equal (Point.Empty, top.ScreenToFrame (3, 2));
-        screen = top.ViewportToScreen (new (0, 0, 0, 0));
+        Assert.Equal (Point.Empty, top.ScreenToFrame (new (3, 2)));
+        screen = top.ViewportToScreen (new Point (0, 0));
         Assert.Equal (4, screen.X);
         Assert.Equal (3, screen.Y);
-        Assert.Equal (top.Border, View.FindDeepestView (top, 3, 2));
+        Assert.Equal (top.Border, View.FindDeepestView (top, new (3, 2)));
         //Assert.Equal (0, found.FrameToScreen ().X);
         //Assert.Equal (0, found.FrameToScreen ().Y);
-        Assert.Equal (new Point (10, 0), top.ScreenToFrame (13, 2));
-        screen = top.ViewportToScreen (new (10, 0, 0, 0));
+        Assert.Equal (new Point (10, 0), top.ScreenToFrame (new (13, 2)));
+        screen = top.ViewportToScreen (new Point (10, 0));
         Assert.Equal (14, screen.X);
         Assert.Equal (3, screen.Y);
-        Assert.Equal (top.Border, View.FindDeepestView (top, 13, 2));
+        Assert.Equal (top.Border, View.FindDeepestView (top, new (13, 2)));
         //Assert.Equal (10, found.FrameToScreen ().X);
         //Assert.Equal (0, found.FrameToScreen ().Y);
-        Assert.Equal (new Point (11, 1), top.ScreenToFrame (14, 3));
-        screen = top.ViewportToScreen (new (11, 1, 0, 0));
+        Assert.Equal (new Point (11, 1), top.ScreenToFrame (new (14, 3)));
+        screen = top.ViewportToScreen (new Point (11, 1));
         Assert.Equal (15, screen.X);
         Assert.Equal (4, screen.Y);
-        Assert.Equal (top, View.FindDeepestView (top, 14, 3));
+        Assert.Equal (top, View.FindDeepestView (top, new (14, 3)));
 
         // view
-        Assert.Equal (new Point (-7, -5), view.ScreenToFrame (0, 0));
-        screen = view.Margin.ViewportToScreen (new (-6, -4, 0, 0));
+        Assert.Equal (new Point (-7, -5), view.ScreenToFrame (new (0, 0)));
+        screen = view.Margin.ViewportToScreen (new Point (-6, -4));
         Assert.Equal (1, screen.X);
         Assert.Equal (1, screen.Y);
-        screen = view.Border.ViewportToScreen (new (-6, -4, 0, 0));
+        screen = view.Border.ViewportToScreen (new Point (-6, -4));
         Assert.Equal (1, screen.X);
         Assert.Equal (1, screen.Y);
-        screen = view.Padding.ViewportToScreen (new (-6, -4, 0, 0));
+        screen = view.Padding.ViewportToScreen (new Point (-6, -4));
         Assert.Equal (1, screen.X);
         Assert.Equal (1, screen.Y);
-        screen = view.ViewportToScreen (new (-6, -4, 0, 0));
+        screen = view.ViewportToScreen (new Point (-6, -4));
         Assert.Equal (1, screen.X);
         Assert.Equal (1, screen.Y);
-        Assert.Null (View.FindDeepestView (top, 1, 1));
-        Assert.Equal (new Point (-4, -3), view.ScreenToFrame (3, 2));
-        screen = view.ViewportToScreen (new (-3, -2, 0, 0));
+        Assert.Null (View.FindDeepestView (top, new (1, 1)));
+        Assert.Equal (new Point (-4, -3), view.ScreenToFrame (new (3, 2)));
+        screen = view.ViewportToScreen (new Point (-3, -2));
         Assert.Equal (4, screen.X);
         Assert.Equal (3, screen.Y);
-        Assert.Equal (top, View.FindDeepestView (top, 4, 3));
-        Assert.Equal (new Point (-1, -1), view.ScreenToFrame (6, 4));
-        screen = view.ViewportToScreen (new (0, 0, 0, 0));
+        Assert.Equal (top, View.FindDeepestView (top, new (4, 3)));
+        Assert.Equal (new Point (-1, -1), view.ScreenToFrame (new (6, 4)));
+        screen = view.ViewportToScreen (new Point (0, 0));
         Assert.Equal (7, screen.X);
         Assert.Equal (5, screen.Y);
-        Assert.Equal (view, View.FindDeepestView (top, 7, 5));
-        Assert.Equal (new Point (6, -1), view.ScreenToFrame (13, 4));
-        screen = view.ViewportToScreen (new (7, 0, 0, 0));
+        Assert.Equal (view, View.FindDeepestView (top, new (7, 5)));
+        Assert.Equal (new Point (6, -1), view.ScreenToFrame (new (13, 4)));
+        screen = view.ViewportToScreen (new Point (7, 0));
         Assert.Equal (14, screen.X);
         Assert.Equal (5, screen.Y);
-        Assert.Equal (view, View.FindDeepestView (top, 14, 5));
-        Assert.Equal (new Point (7, -2), view.ScreenToFrame (14, 3));
-        screen = view.ViewportToScreen (new (8, -1, 0, 0));
+        Assert.Equal (view, View.FindDeepestView (top, new (14, 5)));
+        Assert.Equal (new Point (7, -2), view.ScreenToFrame (new (14, 3)));
+        screen = view.ViewportToScreen (new Point (8, -1));
         Assert.Equal (15, screen.X);
         Assert.Equal (4, screen.Y);
-        Assert.Equal (top, View.FindDeepestView (top, 15, 4));
-        Assert.Equal (new Point (16, -2), view.ScreenToFrame (23, 3));
-        screen = view.ViewportToScreen (new (17, -1, 0, 0));
+        Assert.Equal (top, View.FindDeepestView (top, new (15, 4)));
+        Assert.Equal (new Point (16, -2), view.ScreenToFrame (new (23, 3)));
+        screen = view.ViewportToScreen (new Point (17, -1));
         Assert.Equal (24, screen.X);
         Assert.Equal (4, screen.Y);
-        Assert.Null (View.FindDeepestView (top, 24, 4));
+        Assert.Null (View.FindDeepestView (top, new (24, 4)));
     }
 
     [Fact]

+ 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);