internal static Task <Rect> Select(SelectControl2.ModeType mode, Rect previousRegion) { _taskCompletionSource = new TaskCompletionSource <Rect>(); Selectors.Clear(); foreach (var monitor in Monitor.AllMonitorsGranular()) { var selector = new RegionSelector(); selector.Select(monitor, mode, previousRegion, RegionSelected, RegionChanged, RegionAborted); Selectors.Add(selector); } //Return only when the region gets selected. return(_taskCompletionSource.Task); }
public void Select(Monitor monitor, SelectControl2.ModeType mode, Rect previousRegion, Action <Rect> selected, Action <Monitor> changed, Action aborted) { //Resize to fit given window. Left = monitor.Bounds.Left; Top = monitor.Bounds.Top; Width = monitor.Bounds.Width; Height = monitor.Bounds.Height; Monitor = monitor; _scale = monitor.Dpi / 96d; _selected = selected; _changed = changed; _aborted = aborted; SelectControl.BackImage = CaptureBackground(); SelectControl.Mode = mode; if (mode == SelectControl2.ModeType.Region) { //Since each region selector is attached to a single screen, the selection must be translated. if (!previousRegion.IsEmpty) { previousRegion.Offset(monitor.Bounds.Left * -1, monitor.Bounds.Right * -1); } SelectControl.Selected = previousRegion; SelectControl.Windows.Clear(); } else if (mode == SelectControl2.ModeType.Window) { var win = Native.EnumerateWindows(); //Take into consederation each screen dpi. //Adjust the position of the window. SelectControl.Windows = win.AdjustPosition(monitor.Bounds.Left, monitor.Bounds.Top); } //Call the selector to select the region. SelectControl.IsPickingRegion = true; Show(); }