using System;
using System.Drawing;
// The 'windowHandle' parameter will contain the window handle for the:
// - Active window when run by hotkey
// - Window Location target when run by a Window Location 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)
{
//check to see if there was an error, if there was, exit function
if (windowHandle == IntPtr.Zero)
return;
//get the position of the window in the monitor, and the current monitor
Rectangle windowRect = BFS.Window.GetBounds(windowHandle);
Rectangle monitorRect = BFS.Monitor.GetMonitorBoundsByWindow(windowHandle);
//get the space on the right side of the window
int rightSpace = monitorRect.Width - (windowRect.X - monitorRect.X) - windowRect.Width;
//if the window is maximized, move it to the right half of the monitor
if(BFS.Window.IsMaximized(windowHandle))
{
BFS.Window.MoveToRightMonitorHalf(windowHandle);
return;
}
//if the top-right corner of the window is at the far right, but the window is
// more than 50% of the monitor width, just set it back to 50%
if ((rightSpace == 0) && (windowRect.Width > (monitorRect.Width/2)))
{
BFS.Window.MoveToRightMonitorHalf(windowHandle);
return;
}
//if the window has any space on the right, snap the window to the right of the current monitor
if (rightSpace > 0)
{
BFS.Window.MoveToRightMonitorHalf(windowHandle);
return;
}
//if we got this far then the window is on the right
//move the window to the next monitor
BFS.Window.MoveToNextMonitor(windowHandle);
//move the window to the left side
BFS.Window.MoveToLeftMonitorHalf(windowHandle);
}
}