using System;
using System.Drawing;
// The 'windowHandle' parameter will contain the window handle for the:
// - Active window when run by hotkey
// - Trigger target when run by a Trigger rule
// - TitleBar Button owner when run by a TitleBar Button
// - Jump List owner when run from a Taskbar Jump List
// - Currently focused window if none of these match
public static class DisplayFusionFunction
{
public static void Run(IntPtr windowHandle)
{
// Get the mouse co-ordinates and the current monitor ID
int mouseX = BFS.Input.GetMousePositionX();
int mouseY = BFS.Input.GetMousePositionY();
uint currentMonitor = BFS.Monitor.GetMonitorIDByXY(mouseX, mouseY);
// If the window isn't on the current monitor, move it
// If it is, exit the script
if (BFS.Monitor.GetMonitorIDByWindow(windowHandle) != currentMonitor)
BFS.Window.MoveToMonitor(currentMonitor, windowHandle);
else
return;
// Get the target monitor work area
Rectangle monitorWorkArea = BFS.Monitor.GetMonitorWorkAreaByMouseCursor();
// Get the bounds of the window
Rectangle windowBounds = BFS.Window.GetBounds(windowHandle);
// Calculate the new X,Y locations
int windowTargetX = mouseX - (windowBounds.Width / 2);
int windowTargetY = mouseY - (windowBounds.Height / 2);
// Check if the window will fit on the monitor at the new location, if not, change the target X,Y values to keep it in the monitor
int windowTargetWidth = windowBounds.Width;
int windowTargetHeight = windowBounds.Height;
if ((windowTargetX + windowBounds.Width) > (monitorWorkArea.X + monitorWorkArea.Width))
{
windowTargetX = (monitorWorkArea.X + monitorWorkArea.Width) - windowBounds.Width;
}
else if (windowTargetX < monitorWorkArea.X)
{
windowTargetX = monitorWorkArea.X;
}
if ((windowTargetY + windowBounds.Height) > (monitorWorkArea.Y + monitorWorkArea.Height))
{
windowTargetY = (monitorWorkArea.Y + monitorWorkArea.Height) - windowBounds.Height;
}
else if (windowTargetY < monitorWorkArea.Y)
{
windowTargetY = monitorWorkArea.Y;
}
BFS.Window.SetSizeAndLocation(windowHandle, windowTargetX, windowTargetY, windowTargetWidth, windowTargetHeight);
}
}