Code cleanup

This commit is contained in:
Tig
2024-05-09 09:30:57 -06:00
parent 57dad5c2c5
commit ef16f814cf
10 changed files with 98 additions and 91 deletions

View File

@@ -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,7 +87,7 @@ 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>
@@ -100,17 +101,15 @@ public class Thickness : IEquatable<Thickness>
}
/// <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>
@@ -193,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

View File

@@ -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>
@@ -425,22 +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>
/// <param name="location">Viewport-relative location.</param>
/// <param name="viewportLocation">Viewport-relative location.</param>
/// <returns>Screen-relative location.</returns>
public Rectangle ViewportToScreen (in Rectangle location)
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>

View File

@@ -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;

View File

@@ -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.

View File

@@ -791,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);
}
@@ -839,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);
}
@@ -876,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);
@@ -895,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
@@ -915,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)
{

View File

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

View File

@@ -362,9 +362,9 @@ public class Notepad : Scenario
);
}
Rectangle screen = ((View)sender).ViewportToScreen (new (e.MouseEvent.Position, Size.Empty));
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;

View File

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

View File

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

View File

@@ -852,19 +852,19 @@ public class NavigationTests
// top
Assert.Equal (Point.Empty, top.ScreenToFrame (new (0, 0)));
Rectangle screen = top.Margin.ViewportToScreen (new (0, 0, 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, new (0, 0));
@@ -873,7 +873,7 @@ public class NavigationTests
Assert.Equal (0, found.Frame.X);
Assert.Equal (0, found.Frame.Y);
Assert.Equal (new Point (3, 2), top.ScreenToFrame (new (3, 2)));
screen = top.ViewportToScreen (new (3, 2, 0, 0));
screen = top.ViewportToScreen (new Point (3, 2));
Assert.Equal (4, screen.X);
Assert.Equal (3, screen.Y);
found = View.FindDeepestView (top, new (screen.X, screen.Y));
@@ -885,14 +885,14 @@ public class NavigationTests
//Assert.Equal (3, found.FrameToScreen ().X);
//Assert.Equal (2, found.FrameToScreen ().Y);
Assert.Equal (new Point (13, 2), top.ScreenToFrame (new (13, 2)));
screen = top.ViewportToScreen (new (12, 2, 0, 0));
screen = top.ViewportToScreen (new Point (12, 2));
Assert.Equal (13, screen.X);
Assert.Equal (3, 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, new (13, 2));
@@ -900,7 +900,7 @@ public class NavigationTests
//Assert.Equal (13, found.FrameToScreen ().X);
//Assert.Equal (2, found.FrameToScreen ().Y);
Assert.Equal (new Point (14, 3), top.ScreenToFrame (new (14, 3)));
screen = top.ViewportToScreen (new (14, 3, 0, 0));
screen = top.ViewportToScreen (new Point (14, 3));
Assert.Equal (15, screen.X);
Assert.Equal (4, screen.Y);
found = View.FindDeepestView (top, new (14, 3));
@@ -910,40 +910,40 @@ public class NavigationTests
// view
Assert.Equal (new Point (-4, -3), view.ScreenToFrame (new (0, 0)));
screen = view.Margin.ViewportToScreen (new (-3, -2, 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, new (0, 0));
Assert.Equal (top.Border, found);
Assert.Equal (new Point (-1, -1), view.ScreenToFrame (new (3, 2)));
screen = view.ViewportToScreen (new (0, 0, 0, 0));
screen = view.ViewportToScreen (new Point (0, 0));
Assert.Equal (4, screen.X);
Assert.Equal (3, screen.Y);
found = View.FindDeepestView (top, new (4, 3));
Assert.Equal (view, found);
Assert.Equal (new Point (9, -1), view.ScreenToFrame (new (13, 2)));
screen = view.ViewportToScreen (new (10, 0, 0, 0));
screen = view.ViewportToScreen (new Point (10, 0));
Assert.Equal (14, screen.X);
Assert.Equal (3, screen.Y);
found = View.FindDeepestView (top, new (14, 3));
Assert.Equal (top, found);
Assert.Equal (new Point (10, 0), view.ScreenToFrame (new (14, 3)));
screen = view.ViewportToScreen (new (11, 1, 0, 0));
screen = view.ViewportToScreen (new Point (11, 1));
Assert.Equal (15, screen.X);
Assert.Equal (4, screen.Y);
found = View.FindDeepestView (top, new (15, 4));
@@ -1006,80 +1006,80 @@ public class NavigationTests
// top
Assert.Equal (new Point (-3, -2), top.ScreenToFrame (new (0, 0)));
Rectangle screen = top.Margin.ViewportToScreen (new (-3, -2, 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, new (-4, -3));
Assert.Null (found);
Assert.Equal (Point.Empty, top.ScreenToFrame (new (3, 2)));
screen = top.ViewportToScreen (new (0, 0, 0, 0));
screen = top.ViewportToScreen (new Point (0, 0));
Assert.Equal (4, screen.X);
Assert.Equal (3, screen.Y);
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 (new (13, 2)));
screen = top.ViewportToScreen (new (10, 0, 0, 0));
screen = top.ViewportToScreen (new Point (10, 0));
Assert.Equal (14, screen.X);
Assert.Equal (3, screen.Y);
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 (new (14, 3)));
screen = top.ViewportToScreen (new (11, 1, 0, 0));
screen = top.ViewportToScreen (new Point (11, 1));
Assert.Equal (15, screen.X);
Assert.Equal (4, screen.Y);
Assert.Equal (top, View.FindDeepestView (top, new (14, 3)));
// view
Assert.Equal (new Point (-7, -5), view.ScreenToFrame (new (0, 0)));
screen = view.Margin.ViewportToScreen (new (-6, -4, 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, new (1, 1)));
Assert.Equal (new Point (-4, -3), view.ScreenToFrame (new (3, 2)));
screen = view.ViewportToScreen (new (-3, -2, 0, 0));
screen = view.ViewportToScreen (new Point (-3, -2));
Assert.Equal (4, screen.X);
Assert.Equal (3, screen.Y);
Assert.Equal (top, View.FindDeepestView (top, new (4, 3)));
Assert.Equal (new Point (-1, -1), view.ScreenToFrame (new (6, 4)));
screen = view.ViewportToScreen (new (0, 0, 0, 0));
screen = view.ViewportToScreen (new Point (0, 0));
Assert.Equal (7, screen.X);
Assert.Equal (5, screen.Y);
Assert.Equal (view, View.FindDeepestView (top, new (7, 5)));
Assert.Equal (new Point (6, -1), view.ScreenToFrame (new (13, 4)));
screen = view.ViewportToScreen (new (7, 0, 0, 0));
screen = view.ViewportToScreen (new Point (7, 0));
Assert.Equal (14, screen.X);
Assert.Equal (5, screen.Y);
Assert.Equal (view, View.FindDeepestView (top, new (14, 5)));
Assert.Equal (new Point (7, -2), view.ScreenToFrame (new (14, 3)));
screen = view.ViewportToScreen (new (8, -1, 0, 0));
screen = view.ViewportToScreen (new Point (8, -1));
Assert.Equal (15, screen.X);
Assert.Equal (4, screen.Y);
Assert.Equal (top, View.FindDeepestView (top, new (15, 4)));
Assert.Equal (new Point (16, -2), view.ScreenToFrame (new (23, 3)));
screen = view.ViewportToScreen (new (17, -1, 0, 0));
screen = view.ViewportToScreen (new Point (17, -1));
Assert.Equal (24, screen.X);
Assert.Equal (4, screen.Y);
Assert.Null (View.FindDeepestView (top, new (24, 4)));