diff --git a/.github/actions/spell-check/excludes.txt b/.github/actions/spell-check/excludes.txt
index 24045c080aa7..e9fb1cadf815 100644
--- a/.github/actions/spell-check/excludes.txt
+++ b/.github/actions/spell-check/excludes.txt
@@ -114,7 +114,7 @@
^src/modules/cmdpal/Tests/Microsoft\.CmdPal\.Common\.UnitTests/Text/.*\.cs$
^src/modules/colorPicker/ColorPickerUI/Shaders/GridShader\.cso$
^src/modules/launcher/Plugins/Microsoft\.PowerToys\.Run\.Plugin\.TimeDate/Properties/
-^src/modules/MouseUtils/MouseJumpUI/MainForm\.resx$
+^src/modules/MouseUtils/MouseJumpUI/UI/MainForm\.resx$
^src/modules/MouseWithoutBorders/App/.*/NativeMethods\.cs$
^src/modules/MouseWithoutBorders/App/Form/.*\.Designer\.cs$
^src/modules/MouseWithoutBorders/App/Form/.*\.resx$
@@ -139,6 +139,7 @@
^src/modules/ZoomIt/ZoomIt/selfie_segmentation\.onnx$
^src/modules/ZoomIt/ZoomIt/ZoomIt\.idc$
^src/Monaco/
+^tools/MouseJump.Kicker/KickerForm\.resx$
^tools/project_template/ModuleTemplate/resource\.h$
^tools/Verification scripts/Check preview handler registration\.ps1$
ignore$
diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt
index b265378f1dc1..61a73d16c1ba 100644
--- a/.github/actions/spell-check/expect.txt
+++ b/.github/actions/spell-check/expect.txt
@@ -44,7 +44,6 @@ ALLVIEW
ALPHATYPE
altkey
amr
-ANDSCANS
animatedvisuals
Animnate
AOC
@@ -186,6 +185,7 @@ CAPTURECHANGED
CARETBLINKING
carlos
Carlseibert
+cascadia
caub
CBN
cch
@@ -304,7 +304,6 @@ CREATESCHEDULEDTASK
CREATESTRUCT
CREATEWINDOWFAILED
creativecommons
-CRECT
CRH
critsec
cropandlock
@@ -378,7 +377,6 @@ DELA
DELD
deld
DELETEDKEYIMAGE
-DELETESCANS
DEMOTYPE
DENORMAL
depersist
@@ -445,10 +443,8 @@ dreamsofameaningfullife
drivedetectionwarning
DROPFILES
DSPDLOG
-DSTINVERT
DString
dto
-DUMMYUNIONNAME
dumpbin
dutil
DVASPECT
@@ -492,6 +488,8 @@ encodedlaunch
encryptor
ENDSESSION
ENSUREVISIBLE
+ENTERIDLE
+ENTERMENULOOP
ENTERSIZEMOVE
ENTRYW
ENU
@@ -525,6 +523,8 @@ EXECUTEDEFAULT
executionpolicy
exename
exf
+EXITCOMMAND
+EXITMENULOOP
EXITSIZEMOVE
exlist
EXPCMDFLAGS
@@ -655,6 +655,7 @@ gwl
GWLP
GWLSTYLE
hangeul
+Hanguel
Hantai
Hanzi
Hardlines
@@ -794,6 +795,7 @@ imageresizerinput
imageresizersettings
imagingdevices
ime
+IMEAceept
imgflip
inapp
inbox
@@ -808,6 +810,8 @@ INITCOMMONCONTROLSEX
INITDIALOG
INITGUID
initialfile
+INITMENU
+INITMENUPOPUP
INITTOLOGFONTSTRUCT
inkscape
INLINEPREFIX
@@ -912,6 +916,7 @@ Lclean
Ldone
Ldr
LEFTALIGN
+LEFTBUTTON
leftclick
LEFTSCROLLBAR
LEFTTEXT
@@ -963,11 +968,9 @@ LPCLSID
lpcmi
LPCMINVOKECOMMANDINFO
LPCREATESTRUCT
-LPCRECT
LPCTSTR
lpdw
lpfn
-LPINPUT
LPITEMIDLIST
lpmi
LPMINMAXINFO
@@ -976,6 +979,7 @@ LPOSVERSIONINFOEXW
LPQUERY
lprc
LPSAFEARRAY
+LPSECURITY
lpstr
lpsz
LPTHREAD
@@ -1036,8 +1040,7 @@ meme
memicmp
MENUITEMINFO
MENUITEMINFOW
-MERGECOPY
-MERGEPAINT
+MENUSELECT
Metacharacter
metadatamatters
Metadatas
@@ -1183,7 +1186,6 @@ NOASYNC
NOCHANGEDIR
NOCLIP
NOCLOSEPROCESS
-NOCOALESCE
NOCOMM
NOCONFIRMMKDIR
NOCOPYBITS
@@ -1200,10 +1202,10 @@ NOLINKINFO
nologo
NOMCX
NOMINMAX
-NOMIRRORBITMAP
nomove
NONANTIALIASED
nonclient
+Nonconvert
NONCLIENTMETRICSW
NONELEVATED
nonspace
@@ -1232,8 +1234,6 @@ NOTIFYICONDATAW
NOTIMPL
NOTOPMOST
NOTRACK
-NOTSRCCOPY
-NOTSRCERASE
Notupdated
notwindows
NOTXORPEN
@@ -1258,7 +1258,10 @@ nwc
ocr
Ocrsettings
odbccp
+Oemcomma
OEMCONVERT
+Oemplus
+Oemtilde
officehubintl
OFN
ofs
@@ -1283,7 +1286,6 @@ openxmlformats
OPTIMIZEFORINVOKE
Optronics
ORPHANEDDIALOGTITLE
-ORSCANS
oss
OSVERSIONINFO
OSVERSIONINFOEX
@@ -1314,10 +1316,7 @@ PARENTRELATIVEFORUI
PARENTRELATIVEPARSING
parray
PARTIALCONFIRMATIONDIALOGTITLE
-PATCOPY
PATHMUSTEXIST
-PATINVERT
-PATPAINT
pbc
pbi
PBP
@@ -1545,6 +1544,7 @@ REMAPSUCCESSFUL
REMAPUNSUCCESSFUL
Remotable
remotedesktop
+remotehost
remoteip
Removelnk
renamable
@@ -1579,7 +1579,6 @@ RIGHTBUTTON
RIGHTSCROLLBAR
riid
rollups
-rop
ROUNDSMALL
rpcrt
RRF
@@ -1693,6 +1692,7 @@ shortdate
SHORTPATH
shortsplit
showcolorname
+SHOWCONTEXTMENU
SHOWDEFAULT
SHOWELEVATIONPROMPT
SHOWMAGNIFIEDCURSOR
@@ -1754,12 +1754,8 @@ spsi
spsia
spsrm
spsv
-SRCAND
SRCCOPY
-SRCERASE
Srch
-SRCINVERT
-SRCPAINT
SResize
srme
srre
@@ -1922,6 +1918,7 @@ tracerpt
trackbar
trafficmanager
transicc
+TRAYICON
transitioning
TRAYMOUSEMESSAGE
triaging
@@ -1939,6 +1936,8 @@ TYPEMOUSE
TYPESHORTCUT
UAC
UACUI
+UAHINITMENU
+UAHMEASUREMENUITEM
UAL
uap
UBR
@@ -1961,6 +1960,7 @@ UNCPRIORITY
UNDNAME
ungroup
UNICODETEXT
+UNINITMENUPOPUP
unins
uninsdeletekey
Uninstaller
@@ -2027,7 +2027,6 @@ vgetq
viewmodels
virama
VIRTKEY
-VIRTUALDESK
VISEGRADRELAY
visiblecolorformats
visio
diff --git a/PowerToys.slnx b/PowerToys.slnx
index 3c49c6cce00f..acaa8c7e154e 100644
--- a/PowerToys.slnx
+++ b/PowerToys.slnx
@@ -519,11 +519,17 @@
-
-
+
+
+
+
+
+
+
+
@@ -531,6 +537,12 @@
+
+
+
+
+
+
diff --git a/src/modules/MouseUtils/MouseJump.Common.UnitTests/Helpers/DrawingHelperTests.cs b/src/modules/MouseUtils/MouseJump.Common.UnitTests/Helpers/DrawingHelperTests.cs
index 63f372f20bb8..ad9379326eb8 100644
--- a/src/modules/MouseUtils/MouseJump.Common.UnitTests/Helpers/DrawingHelperTests.cs
+++ b/src/modules/MouseUtils/MouseJump.Common.UnitTests/Helpers/DrawingHelperTests.cs
@@ -2,29 +2,32 @@
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-using System.Globalization;
+using System.Drawing;
+using System.Drawing.Imaging;
using System.Reflection;
-using System.Text;
+
using Microsoft.VisualStudio.TestTools.UnitTesting;
+
using MouseJump.Common.Helpers;
using MouseJump.Common.Imaging;
-using MouseJump.Common.Models.Drawing;
-using MouseJump.Common.Models.Styles;
+using MouseJump.Models.Display;
+using MouseJump.Models.Drawing;
+using MouseJump.Models.Styles;
namespace MouseJump.Common.UnitTests.Helpers;
-[TestClass]
public static class DrawingHelperTests
{
[TestClass]
- public sealed class RenderPreviewTests
+ public sealed class GetPreviewLayoutTests
{
public sealed class TestCase
{
- public TestCase(PreviewStyle previewStyle, List screens, PointInfo activatedLocation, string desktopImageFilename, string expectedImageFilename)
+ public TestCase(PreviewStyle previewStyle, DisplayInfo displayInfo, ScreenInfo activatedScreen, PointInfo activatedLocation, string desktopImageFilename, string expectedImageFilename)
{
this.PreviewStyle = previewStyle;
- this.Screens = screens;
+ this.DisplayInfo = displayInfo;
+ this.ActivatedScreen = activatedScreen;
this.ActivatedLocation = activatedLocation;
this.DesktopImageFilename = desktopImageFilename;
this.ExpectedImageFilename = expectedImageFilename;
@@ -32,7 +35,9 @@ public TestCase(PreviewStyle previewStyle, List screens, PointInf
public PreviewStyle PreviewStyle { get; }
- public List Screens { get; }
+ public DisplayInfo DisplayInfo { get; }
+
+ public ScreenInfo ActivatedScreen { get; }
public PointInfo ActivatedLocation { get; }
@@ -43,32 +48,94 @@ public TestCase(PreviewStyle previewStyle, List screens, PointInf
public static IEnumerable