Skip to content

Commit

Permalink
Merge pull request #436 from TheJoeFin/testing-centers
Browse files Browse the repository at this point in the history
Testing centers
  • Loading branch information
TheJoeFin authored Mar 9, 2024
2 parents 6321022 + 584272c commit 067f3ec
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 37 deletions.
137 changes: 137 additions & 0 deletions Tests/ScreenLayoutTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
using System.Windows;
using Text_Grab;

namespace Tests;
public class ScreenLayoutTests
{
/*
DISPLAY1 X=0,Y=0,Width=3440,Height=1400
DISPLAY2 X=3440,Y=-1163,Width=2400,Height=3760
DISPLAY3 X=-1920,Y=387,Width=1920,Height=1030
*/
private static Rect display1 = new(0, 0, 3440, 1400);
private static Rect display2 = new(3440, -1163, 2400, 3760);
private static Rect display3 = new(-1920, 387, 1920, 1030);

/*
Param Display 1 Display 6 Display 5
X 0 1920 3840
Y 0 -460 -468
Width 1920 1920 3840
Height 1152 1032 2040
*/
private static Rect display4 = new(0, 0, 1920, 1152);
private static Rect display5 = new(3840, -468, 3840, 2040);
private static Rect display6 = new(1920, -460, 1920, 1032);


[Fact]
public void ShouldFindCenterOfEachRect()
{
Point center1 = display1.CenterPoint();
Point center2 = display2.CenterPoint();
Point center3 = display3.CenterPoint();
Point center4 = display4.CenterPoint();
Point center5 = display5.CenterPoint();
Point center6 = display6.CenterPoint();

Assert.True(display1.Contains(center1));
Assert.True(display2.Contains(center2));
Assert.True(display3.Contains(center3));
Assert.True(display4.Contains(center4));
Assert.True(display5.Contains(center5));
Assert.True(display6.Contains(center6));

Assert.False(display1.Contains(center3));
Assert.False(display1.Contains(center2));

Assert.False(display2.Contains(center1));
Assert.False(display2.Contains(center3));

Assert.False(display3.Contains(center1));
Assert.False(display3.Contains(center2));


Assert.False(display4.Contains(center5));
Assert.False(display4.Contains(center6));

Assert.False(display5.Contains(center4));
Assert.False(display5.Contains(center6));

Assert.False(display6.Contains(center4));
Assert.False(display6.Contains(center5));
}

[Fact]
public void SmallRectanglesContained()
{
/*
FullscreenGrab fullScreenGrab = allFullscreenGrab[count];
fullScreenGrab.WindowStartupLocation = WindowStartupLocation.Manual;
fullScreenGrab.Width = 40;
fullScreenGrab.Height = 40;
fullScreenGrab.DestinationTextBox = destinationTextBox;
fullScreenGrab.WindowState = WindowState.Normal;
Point screenCenterPoint = screen.GetCenterPoint();
Point windowCenterPoint = fullScreenGrab.GetWindowCenter();
fullScreenGrab.Left = screenCenterPoint.X - windowCenterPoint.X;
fullScreenGrab.Top = screenCenterPoint.Y - windowCenterPoint.Y;
*/

int sideLength = 40;

double smallLeft1 = display1.CenterPoint().X - (sideLength / 2);
double smallTop1 = display1.CenterPoint().Y - (sideLength / 2);
Rect smallRect1 = new(smallLeft1, smallTop1, sideLength, sideLength);
Assert.True(display1.Contains(smallRect1));
Assert.False(display2.Contains(smallRect1));
Assert.False(display3.Contains(smallRect1));

double smallLeft2 = display2.CenterPoint().X - (sideLength / 2);
double smallTop2 = display2.CenterPoint().Y - (sideLength / 2);
Rect smallRect2 = new(smallLeft2, smallTop2, sideLength, sideLength);

Assert.True(display2.Contains(smallRect2));
Assert.False(display1.Contains(smallRect2));
Assert.False(display3.Contains(smallRect2));

double smallLeft3 = display3.CenterPoint().X - (sideLength / 2);
double smallTop3 = display3.CenterPoint().Y - (sideLength / 2);
Rect smallRect3 = new(smallLeft3, smallTop3, sideLength, sideLength);

Assert.True(display3.Contains(smallRect3));
Assert.False(display1.Contains(smallRect3));
Assert.False(display2.Contains(smallRect3));
}

[Fact]
public void SmallRectanglesContained456()
{
int sideLength = 40;

double smallLeft4 = display4.CenterPoint().X - (sideLength / 2);
double smallTop4 = display4.CenterPoint().Y - (sideLength / 2);
Rect smallRect4 = new(smallLeft4, smallTop4, sideLength, sideLength);
Assert.True(display4.Contains(smallRect4));
Assert.False(display5.Contains(smallRect4));
Assert.False(display6.Contains(smallRect4));

double smallLeft5 = display5.CenterPoint().X - (sideLength / 2);
double smallTop5 = display5.CenterPoint().Y - (sideLength / 2);
Rect smallRect5 = new(smallLeft5, smallTop5, sideLength, sideLength);

Assert.True(display5.Contains(smallRect5));
Assert.False(display4.Contains(smallRect5));
Assert.False(display6.Contains(smallRect5));

double smallLeft6 = display6.CenterPoint().X - (sideLength / 2);
double smallTop6 = display6.CenterPoint().Y - (sideLength / 2);
Rect smallRect6 = new(smallLeft6, smallTop6, sideLength, sideLength);

Assert.True(display6.Contains(smallRect6));
Assert.False(display4.Contains(smallRect6));
Assert.False(display5.Contains(smallRect6));
}
}
7 changes: 7 additions & 0 deletions Text-Grab/Extensions/ShapeExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,11 @@ public static bool IsGood(this Rect rect)

return true;
}

public static System.Windows.Point CenterPoint(this Rect rect)
{
double x = rect.Left + (rect.Width / 2);
double y = rect.Top + (rect.Height / 2);
return new(x, y);
}
}
66 changes: 29 additions & 37 deletions Text-Grab/Utilities/WindowUtilities.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Security.Permissions;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
Expand All @@ -30,26 +26,26 @@ public static void AddTextToOpenWindow(string textToAdd)

public static void SetWindowPosition(Window passedWindow)
{
string storedPostionString = "";
string storedPositionString = "";

if (passedWindow is EditTextWindow)
storedPostionString = Properties.Settings.Default.EditTextWindowSizeAndPosition;
storedPositionString = Settings.Default.EditTextWindowSizeAndPosition;

if (passedWindow is GrabFrame)
storedPostionString = Properties.Settings.Default.GrabFrameWindowSizeAndPosition;
storedPositionString = Settings.Default.GrabFrameWindowSizeAndPosition;

List<string> storedPostion = new(storedPostionString.Split(','));
List<string> storedPosition = new(storedPositionString.Split(','));

bool isStoredRectWithinScreen = false;

if (storedPostion != null
&& storedPostion.Count == 4)
if (storedPosition != null
&& storedPosition.Count == 4)
{
bool couldParseAll = false;
couldParseAll = double.TryParse(storedPostion[0], out double parsedX);
couldParseAll = double.TryParse(storedPostion[1], out double parsedY);
couldParseAll = double.TryParse(storedPostion[2], out double parsedWid);
couldParseAll = double.TryParse(storedPostion[3], out double parsedHei);
couldParseAll = double.TryParse(storedPosition[0], out double parsedX);
couldParseAll = double.TryParse(storedPosition[1], out double parsedY);
couldParseAll = double.TryParse(storedPosition[2], out double parsedWid);
couldParseAll = double.TryParse(storedPosition[3], out double parsedHei);
Rect storedSize = new((int)parsedX, (int)parsedY, (int)parsedWid, (int)parsedHei);
IEnumerable<Screen> allScreens = Screen.AllScreens;
WindowCollection allWindows = Application.Current.Windows;
Expand Down Expand Up @@ -83,8 +79,8 @@ public static void LaunchFullScreenGrab(TextBox? destinationTextBox = null)
int numberOfScreens = allScreens.Count();

foreach (Window window in allWindows)
if (window is FullscreenGrab)
allFullscreenGrab.Add((FullscreenGrab)window);
if (window is FullscreenGrab grab)
allFullscreenGrab.Add(grab);

int numberOfFullscreenGrabWindowsToCreate = numberOfScreens - allFullscreenGrab.Count;

Expand All @@ -95,34 +91,30 @@ public static void LaunchFullScreenGrab(TextBox? destinationTextBox = null)

int count = 0;

double sideLength = 40;

foreach (Screen screen in allScreens)
{
FullscreenGrab fullscreenGrab = allFullscreenGrab[count];
fullscreenGrab.WindowStartupLocation = WindowStartupLocation.Manual;
fullscreenGrab.Width = 400;
fullscreenGrab.Height = 200;
fullscreenGrab.DestinationTextBox = destinationTextBox;
fullscreenGrab.WindowState = WindowState.Normal;

System.Windows.Point screenCenterPoint = screen.GetCenterPoint();
System.Windows.Point windowCenterPoint = fullscreenGrab.GetWindowCenter();
FullscreenGrab fullScreenGrab = allFullscreenGrab[count];
fullScreenGrab.WindowStartupLocation = WindowStartupLocation.Manual;
fullScreenGrab.Width = sideLength;
fullScreenGrab.Height = sideLength;
fullScreenGrab.DestinationTextBox = destinationTextBox;
fullScreenGrab.WindowState = WindowState.Normal;

double virtualScreenTop = SystemParameters.VirtualScreenTop;
double virtualScreenLeft = SystemParameters.VirtualScreenLeft;
double virtualScreenWidth = SystemParameters.VirtualScreenWidth;
double virtualScreenHeight = SystemParameters.VirtualScreenHeight;
Point screenCenterPoint = screen.GetCenterPoint();

fullscreenGrab.Left = screenCenterPoint.X - windowCenterPoint.X;
fullscreenGrab.Top = screenCenterPoint.Y - windowCenterPoint.Y;
fullScreenGrab.Left = screenCenterPoint.X - (sideLength / 2);
fullScreenGrab.Top = screenCenterPoint.Y - (sideLength / 2);

fullscreenGrab.Show();
fullscreenGrab.Activate();
fullScreenGrab.Show();
fullScreenGrab.Activate();

count++;
}
}

public static System.Windows.Point GetCenterPoint(this Screen screen)
public static Point GetCenterPoint(this Screen screen)
{
double x = screen.WpfBounds.Left + (screen.WpfBounds.Width / 2);
double y = screen.WpfBounds.Top + (screen.WpfBounds.Height / 2);
Expand Down Expand Up @@ -164,7 +156,7 @@ internal static async void CloseAllFullscreenGrabs()

if (fsg.DestinationTextBox is not null)
{
// TODO 3.0 Find out how to re normaize an ETW when FSG had it minimzed
// TODO 3.0 Find out how to re normalize an ETW when FSG had it minimized
isFromEditWindow = true;
// if (fsg.EditWindow.WindowState == WindowState.Minimized)
// fsg.EditWindow.WindowState = WindowState.Normal;
Expand Down Expand Up @@ -201,7 +193,7 @@ internal static async Task TryInsertString(string stringToInsert)
{
await Task.Delay(TimeSpan.FromSeconds(Settings.Default.InsertDelay));

List<INPUT> inputs = new List<INPUT>();
List<INPUT> inputs = new();
// make sure keys are up.
TryInjectModifierKeyUp(ref inputs, VirtualKeyShort.LCONTROL);
TryInjectModifierKeyUp(ref inputs, VirtualKeyShort.RCONTROL);
Expand Down Expand Up @@ -264,7 +256,7 @@ private static void TryInjectModifierKeyUp(ref List<INPUT> inputs, VirtualKeySho
}

// No Window Found, open a new one
T newWindow = new T();
T newWindow = new();
newWindow.Show();
return newWindow;
}
Expand Down

0 comments on commit 067f3ec

Please sign in to comment.